хочу создать подключение через SQL, к листу формы https://ibb.co/yVP5g54 так как лист имеет многострочную шапку, названия колонок не в 1 строке, а считывается с 1 строки, хочу обратиться через SQL по номерам колонок для считывания с указанной строки до последней заполненной ячейки листа цель - уйти от одномерных массивов на каждую колонку, а сразу выбрать все нужные колонки листа в один массив
Код
[IMG]https://ibb.co/yVP5g54[/IMG]
'создаем строку запроса
For li = LBound(avSheets) To UBound(avSheets)
sQuery = "SELECT " & "SELECT COL_NAME(OBJECT_ID(" & avSheets(li) & " ), 1)" & " FROM [" & avSheets(li) & "$]"
Next li
'сначала создаем подключение к временному файлу
'это поможет избежать ошибок подключения к открытому файлу
sCon = _
"ODBC;DSN=Excel Files;DBQ=" & sTmpFileName & ";" & _
"DefaultDir=" & sPath & ";DriverId=790;" & _
"MaxBufferSize=2048;PageTimeout=5"
Set oPTCache = ThisWorkbook.PivotCaches.Add(SourceType:=xlExternal)
With oPTCache
.Connection = sCon
.CommandType = xlCmdSql
.CommandText = sQuery
Set oPT = .CreatePivotTable(rRes(3, 1))
End With
нужно выбрать столбец в ранг начиная с определенной строки
этот код
Код
Set rg = ThisWorkbook.Sheets(Element).UsedRange.Columns(1)
выбирает весь столбец по номеру, но как выбрать именно столбец начиная с определенной строки и до конца листа, чтобы не выбирать мусор, который идёт до нужных данных
Добрый день! есть код нужно с других листов книги (их много) собрать тролько выделенные столбцы
Сводная не работает, так как все листы имеют многоуровневые шапки (до 7 уровней), и оформлены по 4 разным шаблонам (т.е. разное количество столбцов) https://ibb.co/yVP5g54
ПРОБЛЕМА массив IndeksArray на лист выводится (СТРОКА 1/139) , а массив DataArray1 текстовый - нет, а просто впечатывает последнее значение во все ячейки диапазона (СТРОКА 4/143) , если выводить как массив IndeksArray - то впечатывает только первое значение во все ячейки диапазона (СТРОКА 2/141), хотя в отладчике видно что массив содержит и другие значения. В чем проблема? как исправить?
Код
Sheets("настройка_отчета").Range("d9:d" & UBound(IndeksArray) + 9).Value = IndeksArray
' Sheets("настройка_отчета").Range("C9:C" & UBound(IndeksArray) + 9).Value = DataArray1
For Counter = 1 To UBound(DataArray1)
Sheets("настройка_отчета").Range("C9:C" & [Counter] + 9).Value = CVar(DataArray1(Counter))
Next Counter
Код
Function CombineArrays(Arr1 As Variant, Arr2 As Variant) As Variant
If (Not IsArray(Arr1)) And IsArray(Arr2) Then CombineArrays = Arr2: Exit Function
If (Not IsArray(Arr2)) And IsArray(Arr1) Then CombineArrays = Arr1: Exit Function
If (Not IsArray(Arr2)) And (Not IsArray(Arr1)) Then
Debug.Print "??????: ??? ?????????? ???????? ?? ???????? ?????????!"
CombineArrays = Null: Exit Function
End If
On Error Resume Next: Err.Clear
If (LBound(Arr1, 2) <> LBound(Arr2, 2)) Or (UBound(Arr1, 2) <> UBound(Arr2, 2)) Then
Debug.Print "??????: ??????????? ???????? (?? ??????) ?? ?????????"
CombineArrays = Null: Exit Function
End If
If Err.Number = 9 Then
Debug.Print "??????: ???? ?? ???????? ?? ???????? ?????????!"
CombineArrays = Null: Exit Function
End If
ReDim arr(1 To UBound(Arr1, 1) + UBound(Arr2, 1), LBound(Arr1, 2) To UBound(Arr1, 2))
For i = 1 To UBound(Arr1, 1)
For j = LBound(Arr1, 2) To UBound(Arr1, 2)
arr(i, j) = Arr1(i, j)
Next
Next
For i = 1 To UBound(Arr2, 1)
For j = LBound(Arr2, 2) To UBound(Arr2, 2)
arr(i + UBound(Arr1, 1), j) = Arr2(i, j)
Next
Next
CombineArrays = arr ' ?????????? ???????????? ??????
End Function
Function CombineArrays2(Arr1 As Variant, Arr2 As Variant) As Variant
If (Not IsArray(Arr1)) And IsArray(Arr2) Then CombineArrays2 = Arr2: Exit Function
If (Not IsArray(Arr2)) And IsArray(Arr1) Then CombineArrays2 = Arr1: Exit Function
' если оба параметра функции не являются массивами
If (Not IsArray(Arr2)) And (Not IsArray(Arr1)) Then
Debug.Print "ОШИБКА: Оба переданных значения не являются массивами!"
CombineArrays2 = Null: Exit Function
End If
' проверяем совпадение размерностей массивов Arr1 и Arr2
On Error Resume Next: Err.Clear
ReDim arr(1 To UBound(Arr1) + UBound(Arr2))
For i = 1 To UBound(Arr1, 1)
arr(i) = Arr1(i)
Next
For i = 1 To UBound(Arr2, 1)
arr(i + UBound(Arr1)) = Arr2(i)
Next
CombineArrays2 = arr ' возвращаем объединённый массив
End Function
Sub CreateTableM()
Dim arrRecords() As Variant
Dim aa As Variant
Dim Element As Variant
Dim rg As Range
Dim rg2 As Range
Dim rg3 As Range
Dim objRange As Range
Dim IndeksArray As Variant
Dim DataArray1 As Variant
Dim DataArray2 As Variant
Dim k As Integer
Dim ttt As Integer
Dim cl As New Collection, x
k = 0
Dim arrWsNames
arrWsNames = Array("Жовтень2021", "Жовтень2020", "Жовтень2019")
ttt = 1
ReDim DataArray2(ttt)
ReDim DataArray1(ttt)
For Each Element In arrWsNames
With Line
ttt = SLastRow(Element)
Set rg = ThisWorkbook.Sheets(Element).UsedRange.Columns(1)
Set rg2 = ThisWorkbook.Sheets(Element).UsedRange.Columns(27)
ttt = UBound(ThisWorkbook.Sheets(Element).UsedRange.Columns(1).Value)
ReDim DataArray2(ttt)
For i = 1 To ttt
DataArray2(i) = Element
Next i
Set objRange = Union(rg, rg2)
ОбъединённыйМассив12 = CombineArrays(IndeksArray, objRange)
IndeksArray = ОбъединённыйМассив12
ОбъединённыйМассив11 = CombineArrays2(DataArray1, DataArray2)
DataArray1 = ОбъединённыйМассив11
If SLastCol(Element) = 75 Then
' aa = rF.Value2
ElseIf SLastCol(Element) = 80 Then
' aa = rF.Value2
ElseIf SLastCol(Element) = 89 Then
' aa = rF.Value2
End If
k = SLastRow(Element)
End With
Next
'обїединение одномерных массивов в многомерный
ReDim Preserve arrRecords(1 To ttt, 1 To 42)
Sheets("настройка_отчета").Range("d9:d" & UBound(IndeksArray) + 9).Value = IndeksArray
' Sheets("настройка_отчета").Range("C9:C" & UBound(IndeksArray) + 9).Value = DataArray1
For Counter = 1 To UBound(DataArray1)
Sheets("настройка_отчета").Range("C9:C" & [Counter] + 9).Value = CVar(DataArray1(Counter))
Next Counter
End Sub
Добрый день! Хочу сделать свою интерактивную карту - график в Excel 2016 , с управлением заливкой сгруппированных частей карты. Вставляю рисунки с прозрачным фоном через вставка/рисунки/это устройство. Проблема -
Код
.Fill.ForeColor.RGB = vbYellow
заливает квадратные границы рисунка - т.е. прозрачный фон, а не фон самого рисунка, т.е. VBA не видит узлы рисунка, в то время как на примере карты каждая часть карты отображается именно узлами и заливка происходи внутри узлов рисунка - Вопрос "как реализовать заливку внутри узлов рисунка"
Код
Dim list As Worksheet
Dim NorthAmerica As Shape
Dim SouthAmerica As Shape
Dim Europe As Shape
Dim Asia As Shape
Dim Africa As Shape
Dim Australia As Shape
Dim tovar1 As Long
Dim tovar2 As Long
Dim tovar3 As Long
tovar1 = Range("B1").Interior.Color
tovar2 = Range("C1").Interior.Color
tovar3 = Range("D1").Interior.Color
Dim a() As Variant
a = Array(tovar1, tovar2, tovar3)
Set list = Sheets("ВИЗУАЛИЗАЦИЯ")
Set Kodumska_ob = list.Shapes("Kodumska")
With Kodumska_ob
'?????? ?????? ? ?????? ??????
.Height = 150
.Width = 100
'?????? ???? ??????
.Fill.ForeColor.RGB = vbYellow
'???????????? ?????? ????? ?? 40 ????????
.Rotation = -40
End With
на рисунке 2 результата с "нужный вариант" - как должно быть - выделенные узлы части рисунка и заливка внутри с "получаемый" - как получается VBA не видит узлов рисунка и заливает фон всего квадрата
как достичь "нужного варианта" - заменить всё автофигурами не получается, так как все автофигуры в Excel имеют стандартный перечень форм, а формы областей карты региона - не стандартные и должны состоять из большого множества узлов. рисунок вопроса
Добрый День! Прошу помощи, давно не пользовалась excelem нужно передать массив названия листов в процедуру формирующую сводную по нескольким листам. Ошибка "Драйвер ODBC Excel] Ошибочная инструкция SQL предполагалось " в строке Set oPT = .CreatePivotTable(rRes(3, 1))
Код
Option Explicit
Public Function SheetList() As String()
Dim sheet As Worksheet
Dim n As Integer
Dim i As Integer
Dim arr() As String
Dim cell As Range
i = 1
n = 0
With ActiveWorkbook
For Each sheet In ActiveWorkbook.Worksheets
'Set cell = Worksheets(1).Cells(sheet.Index, 1)
'MsgBox (sheet.Name)
If ((sheet.Name <> "Ñïðàâî÷íèê") And (sheet.Name <> "îò÷åò") And (sheet.Name <> "Ñâîä")) Then
n = n + 1
End If
Next
End With
ReDim arr(1 To n)
With ActiveWorkbook
For Each sheet In ActiveWorkbook.Worksheets
Set cell = Worksheets(1).Cells(sheet.Index, 1)
'cell.Formula = sheet.Name
'MsgBox (sheet.Name)
If ((sheet.Name <> "Ñïðàâî÷íèê") And (sheet.Name <> "îò÷åò") And (sheet.Name <> "Ñâîä")) Then
arr(i) = sheet.Name
i = i + 1
End If
Next
End With
SheetList = arr()
End Function
Sub PTFromMultipleSheets()
Dim oPTCache As PivotCache, oPT As PivotTable
Dim sPath As String, sWbFulName As String, sTmpFileName As String
Dim avSheets() As String
Dim sCols As String, sQuery As String, sCon As String
Dim rRes As Range
Dim li As Long
sPath = ThisWorkbook.Path
sWbFulName = ThisWorkbook.FullName
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sTmpFileName = sPath & "TempWbForDB_" & Format(Now, "yyyymmddhhmmss") & ".xls"
'ñþäà ìîæíî äîáàâèòü åùå ëèñòû
'òàáëèöû íà ëèñòàõ äîëæíû èìåòü îäèíàêîâîå êîë-âî ñòîëáöîâ
'ñòîëáöû ìîãóò áûòü â ðàçíîì ïîðÿäêå, íî èìåòü îäèíàêîâûå çàãîëîâêè
avSheets = SheetList()
'íèæå ïåðå÷èñëÿþòñÿ çàãîëîâêè ñòîëáöîâ, íà îñíîâå êîòîðûõ ñòðîèòñÿ ñâîäíàÿ
'÷åðåç çàïÿòóþ â êâàäðàòíûõ ñêîáêàõ
sCols = "[Îáúåêò],[Êîíòðàãåíò],[ÑóììàÄîêóìåíòà]"
'sCols = "*" ' - åñëè íåîáõîäèìî âêëþ÷èòü âñå ñòîëáöû
'ïðè ýòîì øàïêà íà âñåõ ëèñòàõ äîëæíà áûòü ïîëíîñòüþ îäèíàêîâàÿ
'äàííûå áóäóò â òîì ïîðÿäêå, â êîòîðîì ðàñïîëîæåíû ñòîëáöû
Application.ScreenUpdating = False
If Val(Application.Version) > 11 Then DelCon
Set rRes = ThisWorkbook.Sheets(1).Cells
rRes.Clear
ThisWorkbook.Worksheets(avSheets).Copy
With ActiveWorkbook
.SaveAs sTmpFileName
.Close
End With
'ñîçäàåì ñòðîêó çàïðîñà
For li = LBound(avSheets) To UBound(avSheets)
If li > 0 Then
sQuery = sQuery & " UNION SELECT " & sCols & " FROM [" & avSheets(li) & "$]"
Else
sQuery = "SELECT " & sCols & " FROM [" & avSheets(li) & "$]"
End If
Next li
'ñíà÷àëà ñîçäàåì ïîäêëþ÷åíèå ê âðåìåííîìó ôàéëó
'ýòî ïîìîæåò èçáåæàòü îøèáîê ïîäêëþ÷åíèÿ ê îòêðûòîìó ôàéëó
sCon = _
"ODBC;DSN=Excel Files;DBQ=" & sTmpFileName & ";" & _
"DefaultDir=" & sPath & ";DriverId=790;" & _
"MaxBufferSize=2048;PageTimeout=5"
Set oPTCache = ThisWorkbook.PivotCaches.Add(SourceType:=xlExternal)
With oPTCache
.Connection = sCon
.CommandType = xlCmdSql
.CommandText = sQuery
Set oPT = .CreatePivotTable(rRes(3, 1))
End With
'òåïåðü èçìåíÿåì â çàïðîñå ñâîäíîé ïóòü ê ôàéëó íà òåêóùèé
sCon = _
"ODBC;DSN=Excel Files;DBQ=" & sWbFulName & ";" & _
"DefaultDir=" & sPath & ";DriverId=790;" & _
"MaxBufferSize=2048;PageTimeout=5"
ThisWorkbook.PivotCaches(1).Connection = sCon
With oPT
'âûñòàâëÿåì ïåðâîíà÷àëüíûå íàñòðîéêè äëÿ ñâîäíîé
With .PivotFields(1)
.Orientation = xlRowField
.Position = 1
End With
With .PivotFields(2)
.Orientation = xlRowField
.Position = 2
End With
.AddDataField .PivotFields("Ñóììà"), "Ñóììà ïî ïîëþ Ñóììà", xlSum
End With
'óäàëÿåì âðåìåííûé ôàéë
Kill sTmpFileName
Set oPT = Nothing: Set oPTCache = Nothing
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------------------------------------------
' Procedure : DelCon
' Purpose : Ïðîöåäóðà óäàëÿåò ïîäêëþ÷åíèÿ
' Òðåáóåòñÿ òîëüêî äëÿ âåðñèé, âûøå 2003
'---------------------------------------------------------------------------------------
Private Sub DelCon()
On Error Resume Next: ThisWorkbook.Connections(1).Delete: On Error GoTo 0
End Sub
Sub RefreshCon()
Dim sCon As String, sPath As String, sWbFulName As String
sPath = ThisWorkbook.Path
sWbFulName = ThisWorkbook.FullName
sCon = _
"ODBC;DSN=Excel Files;DBQ=" & sWbFulName & ";" & _
"DefaultDir=" & sPath & ";DriverId=790;" & _
"MaxBufferSize=2048;PageTimeout=5"
With ThisWorkbook
If .PivotCaches.Count > 0 Then .PivotCaches(1).Connection = sCon
End With
End Sub
Добрый День! Подскажите, пожалуйста, кто-то проверял достоверность прогнозов создаваемых с помощью инструмента "Лист прогноза"? Кто знает как добиться достоверности прогноза (конкретные действия) или примеры использования другого функционала в Excel? или у кого-то есть примеры макросов по прогнозированию? прогноз продаж...нужно чтобы как можно ближе было к факту...Заранее большое спасибо.
Доброе Утро! Подскажите, кто-то знает существует ли программка (не онлайн, а с инсоляцией на комп) для визуального тестирования регулярных выражений перед их вставкой в программный код VBA Excel? Заранее большое спасибо.
Добрый Вечер! Подскажите, кто-то может подсказать, как правильно изменить регулярное выражение: 1) чтобы в строке
Скрытый текст
Цитата
1. ГОТОВА КОНЦЕРВОВАНА РИБА У ГЕРМЕТИЧНО ЗАКРИТИХ ПОСУДИНАХ - "ПРЕСЕРВИ": -ШМАТОЧКИ ФІЛЕ ОСЕЛЕДЕЦЯ БЕЗ ШКІРИ В ОЛІЇ 500ГР; -ФІЛЕ ОСЕЛЕДЕЦЯ БЕЗ ШКІРИ В ОЛІЇ 750ГР;
1. ГОТОВА КОНЦЕРВОВАНА РИБА У ГЕРМЕТИЧНО ЗАКРИТИХ ПОСУДИНАХ - "ПРЕСЕРВИ": -ПРЕСЕРВИ РИБНІ ОСЕЛЕДЕЦЬ В ОЛІЇ 180ГР ТМ"ОХОТСКАЯ"-1ШТ; -ПРЕСЕРВИ РИБНІ ОСЕЛЕДЕЦЬ В ОЛІЇ З АРОМАТОМ ПАПРИКИ 180ГР ТМ"ОХОТСКАЯ"-1ШТ; -ПРЕСЕРВИ РИБНІ ОСЕЛЕДЕЦЬ З МОРСЬКОЮ КАПУСТОЮ 500ГР ТМ"ОХОТСКАЯ"-1ШТ; -ПРЕСЕРВИ РИБНІ ОСЕЛЕДЕЦЬ В ОЛІЇ "5 ПЕРЦІВ" 500ГР ТМ"NORVEN"-1ШТ; -ПРЕСЕРВИ РИБНІ ОСЕЛЕДЕЦЬ ПРЯНО-ПІКАНТНИЙ В ОЛІЇ 300ГР ТМ"NORVEN"-1ШТ; ВИРОБНИК: ТОВ "ЮФК" UA ЧАСТИНА МІСЦЯ - ВСЬОГО 5 БАНОК, ЗАПАКОВАНІ В ПОЛІМЕРНУ БАНКУ ОБТЯНУТІ П/П ПЛІВКОЮ, В ПІНОПЛАСТОВОМУ КОРОБІ З ЛЬОДОМ.
выделить все подстроки, которые между ":" и ";" и между самими ";" и ";" и ";" и "$" (концом строки)
Добрый День! Подскажите кто-то знает каксоставить шаблон для pReg.Pattern, объекта Set pReg = CreateObject("VBScript.RegExp") шаблон разделения строки по предложениям. Т.е. именно по предложениям, а не по символу ".", так как символ "." может следовать после сокращения, причём сокращение может быть одиночной заглавной буквой, например "И.П.Сидоров" или "банк.полим." или "ООО" и т.д.. Так как именно предложение имеет начало (первая буква слова заглавная, но не одиночно стоящая с точкой (как И.) и не последовательность заглавных букв (как ООО), и не последовательность заглавных букв с точкой (как И.И.) ) и конец сам символ "." который либо стоит перед следующим словом с заглавной буквой или перед концом строки (т.е. знаком $), но не после обозначения года или другого условного сокращения (как 2015р.). Само предложение для деления
Цитата
1. Філе судака, заморожене, глазуроване, зі шкірою, без луски, без харчових добавок та приправ, без теплової та кулінарної обробки, без теплової та кулінарної обробки, не консервована, без ГМО. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 70-120гр. - 684 карт/короба. чиста вага - 3420кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 120-170гр. - 664 карт/короба.чиста вага - 3320кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 140-180гр. - 1012 карт/короба.чиста вага - 5060кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 170-230гр. - 618 карт/короба.чиста вага - 3090кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд:230-300гр. - 307 карт/короба. чиста вага - 1535кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд:300-500гр. -161 карт/короба. чиста вага - 805кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 500-800гр. -50 карт/короба. чиста вага - 500кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 800гр. + - 27 карт/короба. чиста вага - 270кг. Загальна чиста вага нетто -18000 кг. Дата виробництва: 10 серпня 2015р., 14 серпня 2015р. Виробник: ТОВ "УКРХАРЧПРОМКОМПЛЕКС" Країна виробництва-(UA). Торговельна марка відсутня.
Необходимый результат деления
Цитата
Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 70-120гр. - 684 карт/короба. чиста вага - 3420кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 120-170гр. - 664 карт/короба.чиста вага - 3320кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 140-180гр. - 1012 карт/короба.чиста вага - 5060кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 170-230гр. - 618 карт/короба.чиста вага - 3090кг. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 800гр. + - 27 карт/короба. чиста вага - 270кг...
(наименование продуктов "Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on)" - может быть абсолютно разным, просьба к нему не привязываться)
а строки
Цитата
Дата виробництва: 10 серпня 2015р., 14 серпня 2015р. Виробник: ТОВ "УКРХАРЧПРОМКОМПЛЕКС" Країна виробництва-(UA). Торговельна марка відсутня.
и строки
Цитата
1. Філе судака, заморожене, глазуроване, зі шкірою, без луски, без харчових добавок та приправ, без теплової та кулінарної обробки, без теплової та кулінарної обробки, не консервована, без ГМО.
выделить отдельно и продублировать началом и продолжением к каждой строке (как общие строки для всех) , Т.е. конечный результат:
Цитата
1. Філе судака, заморожене, глазуроване, зі шкірою, без луски, без харчових добавок та приправ, без теплової та кулінарної обробки, без теплової та кулінарної обробки, не консервована, без ГМО. Судак філе, зі шкірою, морож. (Frozen Pike perch fillets skin/on) Розмірний ряд: 70-120гр. - 684 карт/короба. чиста вага - 3420кг. Дата виробництва: 10 серпня 2015р., 14 серпня 2015р. Виробник: ТОВ "УКРХАРЧПРОМКОМПЛЕКС" Країна виробництва-(UA). Торговельна марка відсутня.
Добрый День! Подскажите, пожалуйста, возможно ли в VBA передавать в функцию имена других функций?
вопрос: Возможно ли в одном цикле: 1. вызвать имя конкретной функции по параметру содержащему её имя 2. передать ей массив в качестве параметра функции в внутри цикла 3. иметь возможность в условии вызова функции 2 выбирать название функции1 или другой функции обработки Или как правильно записать? т.е. есть
Код
функция 2()
for i=1 to 34
m = функция1 (mF(i, 16),....)
next i
Есть файл размера 300 000 строк. Нужно перед процедурой нечёткого поиска, разложить строку "наименование товара" на подстроки. Разложение по определённому символу мало эффективно. Т.е. нужна функция выделения подстрокмежду двумя символами, согласно следующему правилу:
Добрый Вечер! Скажите,кто-то сталкивался с проблемой создания массива динамического , который был бы виден во всех классах
(т.е. для переноса информации между ) . т.е. я определяю класс пользовательского типа данных
Код
Public iArr As New Arr1
Public imyColumns As Long
Public imyRows As Long
но если поставить
Код
Public iArr() As Variant
Public imyColumns As Long
Public imyRows As Long
даёт ошибку тогда: определяю отдельным классом
Код
Dim Arr1() As Variant
и ставлю в модуле
Код
Sub Example()
Dim Large_Array As New Large_Array
Dim Arr() As New MyArr
Large_Array.Path_Import_file = "G:\ÐÀÇÐÀÁÎÒÊÀ_2\äàííî" & "\"
Large_Array.Import_file = "exim_ua_2015_1-8_ðûá.xls"
Large_Array.Sheet_Import_file = "exim_ua_2015_1_8_ðûá"
Arr().iArr = Large_Array.ToArray().iArr
End Sub
тогда в других классах ставлю:
кл. ADO Dim MyArr As New MyArr
Код
.....
Public Function ToArray() As MyArr
Dim Data() As Variant
Dim Arr() As New Arr1
Dim Column As Long
Dim Row As Long
Dim t As MyArr
............................
t.iArr = Arr
t.imyColumns = UBound(Data, 2)
t.imyRows = UBound(Data, 1)
кл Large_Array
Код
Public Function ToArray() As MyArr
Dim Data() As Variant
Dim Arr() As Variant
Dim Column As Long
Dim Row As Long
ADO.DataSource = Path_Import_file & Import_file ' ïîëíûé ïóòü ê êíèãå
ADO.Query ("SELECT * FROM [" & Sheet_Import_file & "$]")
ToArray = ADO.ToArray()
End Function