Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Преобразование рекордсета (rs.GetString) в массив, при получении данных в массив, часть из них теряется и получает значение - null
 

Здравствуйте!

Помогите пожалуйста найти решение.

При получении массива из рекордсета, часть данных получают значение 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
Изменено: CovalevSA - 13.10.2017 12:16:16
Быстрая вставка массива в ячейки, Необходимо побыстрее вставить массив Arr(1 to 8,1 to 23 000) на лист
 
Подскажите пожалуйста, как ускорить вставку массива на лист?

Массив - ArrSborList (1 to 8, 1 to 23 000) as variant

На данный момент пробовал втавлять через цикл:
Код
For i = 1 To UBound(ArrSborList, 2)
        For n = 1 To UBound(ArrSborList, 1)
            List.Cells(i, n).Value = ArrSborList(n, i)
        Next n
Next i

Данный способ работает очень долго, порой Excel виснет.
Возрат массива из функции
 
Всех приветствую!

Помогите пожалуйста разобраться в одном вопросе.

Есть некая процедура, в которой есть функция. Функция вызывается в цикле для каждого листа книги. В функцию передаются индексы нужных столбцов и массив. Далее функция собирает данные с листа в массив. Как вернуть этот массив (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
Заполнение массива с помощью цикла Do While loop
 
Код
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, то переменную можно использовать только в правой части массива. Так же читал, что массивы можно транспонировать, но что в моем случае необходимо сделать я так и не понял(
 
Изменено: CovalevSA - 27.03.2017 16:06:15
Сбор данных с определенных листов книги (или книг) на один лист в одну таблицу
 
Что-то не прикрепилось письмо изначально.
Всем привет! Нужна помощь:

1) В книге есть листы, на которых таблицы с данными. Таблицы эти спарсили из инета, поэтому они разного формата
2) Необходимо собрать эти таблицы в одну на новый лист

В Excel 2013 есть PoverPivot, можно было бы сделать связи между сводными таблицами, но на работе только Excel 2010:(

Как лучше это реализовать? Макросом?

Где можно посмотреть стандарты VBA на доступном обычному пользователю языке? По форумам искать неудобно и тяжело, особенно когда не знаешь, что конкретно искать.  
Изменено: CovalevSA - 17.02.2017 12:22:46
Страницы: 1
Наверх