При получении массива из рекордсета, часть данных получают значение null. К примеру, если в таблице Excel-файла была колонка, в которой указывались числовые и текстовые значения, то в массиве отображаются только числовые значения, а текст принимает значение null, т.е. определяется тип данных для всей колонки исходя из типа значений, которых больше. Метод .getrows возвращает двухмерный массив типа variant и определяет тип данных не для всех значений.
Код
Function DataTransfer(Way1 As String)
Dim Arr1()
Dim i As Long, j As Integer
Dim isql As String
Dim con As Object
Dim rs As Object
Dim tableName As String
Set con = CreateObject("ADODB.Connection") ' подключение к книге Excel
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" & Way1 & """;Extended Properties=""Excel 12.0;HDR=Yes"";"
con.Open
Set rs = con.OpenSchema(adSchemaTables)
tableName = rs!TABLE_NAME ' получил имя листа в книге Excel
rs.Close
Set rs = CreateObject("ADODB.Recordset")
isql = "SELECT * FROM [" & tableName & "] WHERE F1" ' запрос к листу книги Excel
rs.Open isql, con
Arr1() = rs.GetRows 'передача записей на листе книги в массив
rs.Close
con.Close
end function
Есть некая процедура, в которой есть функция. Функция вызывается в цикле для каждого листа книги. В функцию передаются индексы нужных столбцов и массив. Далее функция собирает данные с листа в массив. Как вернуть этот массив (byref) обратно в процедуру? Сейчас при каждом срабатывании функции массив теряется, а нужно его наращивать
Не получается найти ответ на вопрос: Как при наличии ошибки завершить процедуру, при этом чтобы никакие дейтвия над исходным файлом не совершались? Пробовал on error goto, но ошибка возникает в середине кода, к тому моменту исходный файл немного изменяется
Есть некий Excel файл, который выгружается из программы. Я хочу произвести дополнительные вычисления, добавляю колонки отдельной процедурой, далее расчет по формуле при определенных условиях. Я написал условие, что если значение определенной ячейки не пустое, то должны делаться вычисления, но пустые ячейки почему-то определяются как заполненые, соответсвенно возникает ошибка. Файл прикрепил
Код
Sub Podschet()
Set List = ThisWorkbook.ActiveSheet
For k = 4 To List.UsedRange.Rows.Count - 1
If List.Cells(k, 10).Value <> "" Then
List.Cells(k, 11) = Round(List.Cells(k, 7).Value / List.Cells(k, 3).Value * 100)
List.Cells(k, 12) = List.Cells(k, 8).Value
End If
If List.Cells(k, 5).Value <> "" Then List.Cells(k, 13) = List.Cells(k, 5) - List.Cells(k, 8)
Next k
End Sub
ReDim ArrSbor (1 to 1, 1 to 1) as variant
x=1
y=1
Do while List.Cells (x,1) <> ""
ReDim Preserve ArrSbor (1 to x, 1 to y)
For y=1 to 10
ArrSbor (x,y)=List.Cells (x,y)
Next y
x=x+1
Loop
Помогите пожалуйста разобраться в массиве.
Допустим на листе есть таблица, количество столбцов которой известно, а вот со строками дело обстоит сложнее. Хочу сделать цикл Do While по строкам, чтобы в массив попадали только те строки, в которых первая ячейка заполнена, List.Cells (i,1) <> "". Внутри цикла Do Loop сделать цикл For Next для добавления ячеек по столбцам.
Проблема в том, что если используется комманда Redim Preserve, то переменную можно использовать только в правой части массива. Так же читал, что массивы можно транспонировать, но что в моем случае необходимо сделать я так и не понял(
Что-то не прикрепилось письмо изначально. Всем привет! Нужна помощь:
1) В книге есть листы, на которых таблицы с данными. Таблицы эти спарсили из инета, поэтому они разного формата 2) Необходимо собрать эти таблицы в одну на новый лист
В Excel 2013 есть PoverPivot, можно было бы сделать связи между сводными таблицами, но на работе только Excel 2010:(
Как лучше это реализовать? Макросом?
Где можно посмотреть стандарты VBA на доступном обычному пользователю языке? По форумам искать неудобно и тяжело, особенно когда не знаешь, что конкретно искать.