Julik

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

30.07.2007, 12:55. Показов 2340. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru