Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Julik

Как передать массив данных в VBA?

30.07.2007, 12:55. Показов 2335. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется получить большой массив данных из приложения в VBA (Excel). Как это можно сделать, не используя временный файл?
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.07.2007, 12:55
Ответы с готовыми решениями:

Как передать массив из базы данных (передать массив из php в javascript методом ajax)
<?php //php страница qwe.php для обработки ajax запроса require_once "blocks/head.php"; ...

Как передать массив данных в публичную функцию?
Есть публичная функция CHTOTO_DELAY в неё необходимо передать массив данных типа: 1, 2, 3, 4, 6, 76, 345... и так далее Можно как то по...

Как передать массив данных в обработчик JavaScript?
Получаю массив данных public string Friends { get; set; } из базы во ViewModel. EditUserViewModel model = new EditUserViewModel ...

4
0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 21
30.07.2007, 15:51
Открыть Excel как OLE объект и читать данные непросредственно с листа. Если надо, брошу пример.

С уважением, Михаил.
0
Julik
31.07.2007, 14:30
Огромное спасибо, и примерчик хорошо бы посмотреть, правда мне нужно передать данные в EXCEL из приложения.
0 / 0 / 1
Регистрация: 22.07.2007
Сообщений: 260
31.07.2007, 16:21
Скорость передачи данных в OLE медленная, если данных много, то, как показывает практика, гораздо быстрее передача через Clipboard (разделяя столбцы табуляцией, а строки - переходом на новую строку, естественно в самих данных не должно быть табуляций и переводов строки), например
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Set xlApp = CreateObject('excel.application')
xlApp.Workbooks.Add
Set ws = xlApp.ActiveSheet
 
Clipboard.Clear
 
' пишем в строку данные
s = 'a1' & vbTab & 'a2' & vbNewLine & 'b1' & vbTab & 'b2'
 
Clipboard.SetText s
 
ws.Paste
 
xlApp.Visible = True
0
0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 21
01.08.2007, 07:41
1. В проект включаешь библиотеку excel8.olb
2. Содаешь модуль со следующими содержанием:
Public Function xlOPEN_EXCEL_APP(ByRef FLAG As Long) As Object

On Error GoTo ERR_OPEN_EXCEL_APP

If EXCEL_RUNNING Then
Set xlOPEN_EXCEL_APP = GetObject(, 'EXCEL.APPLICATION')
Else
Set xlOPEN_EXCEL_APP = CreateObject('EXCEL.APPLICATION')
End If
FLAG = 0

Exit Function

ERR_OPEN_EXCEL_APP:
MsgBox 'Произошла ошибка - ' & Err.NUMBER & vbCr & _
Err.Description, _
vbOKOnly + vbCritical, _
'Ошибка OLE'
Set xlOPEN_EXCEL_APP = Nothing
FLAG = Err.NUMBER
Err.Clear

End Function

Public Function EXCEL_RUNNING() As Boolean

Dim hWnd As Long

On Error Resume Next
' Если Excel выполняется, этот вызов API возвращает его дескриптор.
hWnd = FindWindow('XLMAIN', 0)
'If hWnd = 0 Then ' 0 означает, что Excel не выполняется.
EXCEL_RUNNING = (hWnd <> 0)
ExcelWasNotRunning = (hWnd = 0)
Err.Clear ' Очищаем объект Err на случай ошибки.

End Function

Public Function xlOPEN_BOOK(Excel As Object, xlPATH As String, _
Optional ByRef RESULT As Long) As Workbook

On Error GoTo ERR_OPEN_BOOK

Set xlOPEN_BOOK = Excel.Workbooks.Open(xlPATH)
RESULT = 0

Exit Function

ERR_OPEN_BOOK:
Set xlOPEN_BOOK = Nothing
RESULT = Err.NUMBER
Err.Clear

End Function

Public Function xlWB_OPENED(Excel As Object, WB_INDEX As Variant, _
Optional ByRef FLAG As Long) As Boolean

Dim WB_CNT As Integer

On Error GoTo ERR_WB_OPENED

WB_CNT = Excel.Workbooks.Count
If WB_CNT = 0 Then
FLAG = 0
xlWB_OPENED = False
Exit Function
End If

If IsNumeric(WB_INDEX) Then
FLAG = 0
xlWB_OPENED = (WB_INDEX <= WB_CNT)
Exit Function
End If

For WB_CNT = 1 To Excel.Workbooks.Count
If Excel.Workbooks(WB_CNT).NAME = WB_INDEX Then
FLAG = 0: xlWB_OPENED = True
Exit Function
Exit For
End If
Next WB_CNT

FLAG = 0: xlWB_OPENED = False
Exit Function

ERR_WB_OPENED:
FLAG = Err.NUMBER: Err.Clear
xlWB_OPENED = False

End Function

Public Function PVT_xlFSPLIT(FULL_PATH_NAME As String, _
ByRef sDRIVE As String, ByRef sDIR As String, _
ByRef SNAME As String, ByRef sEXT As String) As Integer

Dim posCHAR%, I As Integer, sREMAINS$, sMIRROR As String

On Error GoTo ERR_FSPLIT

If FULL_PATH_NAME = '' Then
PVT_xlFSPLIT = -1
Exit Function
End If

posCHAR = InStr(1, FULL_PATH_NAME, ':', vbTextCompare)

Select Case posCHAR
Case 0
sDRIVE = ''
sREMAINS = FULL_PATH_NAME
Case 2
sDRIVE = Mid$(FULL_PATH_NAME, 1, 1)
If Mid$(FULL_PATH_NAME, 3, 1) = ' ' Then
sREMAINS = Mid$(FULL_PATH_NAME, 4, Len(FULL_PATH_NAME) - 3)
Else
sREMAINS = Mid$(FULL_PATH_NAME, 3, Len(FULL_PATH_NAME) - 2)
End If
Case Else
PVT_xlFSPLIT = -1
Exit Function
End Select

I = Len(sREMAINS)
If I = 0 Then
PVT_xlFSPLIT = -1
Exit Function
End If

If Mid$(sREMAINS, 1, 1) = '.' Then
PVT_xlFSPLIT = -1
Exit Function
End If

sMIRROR = PVT_xlTAIL_TO_HEAD(sREMAINS)
posCHAR = InStr(1, sMIRROR, '.', vbTextCompare)
If posCHAR <> 0 Then
s
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2007, 07:41
Помогаю со студенческими работами здесь

Передать динамический массив из процедуры VBA в функцию на С++
Статический массив (т.е. размерность которого известна заранее: dim StaticArray(0 to 10) as double) может быть передан как аргумент в...

Как можно передать в метод репорта весь массив данных?
С недавних пор начал работать с Reporting Services. Даже не знаю к какому разделу форума отнести вопрос на эту тему. Если кто работал...

Как передать в хранимую процедуру в MSSQL 2000 массив данных?
Есть нужда передать в качестве входного параметра в хранимую процедуру массив данных. Есть ли какой-нибудь способ это сделать? И как потом...

Как передать функции в качестве параметра массив пользовательских типов данных
Собственно вопрос указан в теме. Весь день мучаюсь с этим. есть пользовательский тип данных: Type Kit Name As String Count...

Как передать в фукнцию массив без передачи дополнительных данных о размере массива?
Если передавал по указателю, то не не указал размер, а как могу определить условие цикла, если хочу, чтоб работал до последнего элемента. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru