2015-01-25 2 views
0

У меня есть извлечение базы данных в xlsx. Я написал код, который проходит через лист и записывает отдельные ячейки/поля в текстовый файл с разделителями строк. Во-первых, была проблема, что код игнорировал все строки после строки, которая начиналась с «пустого» значения. Я исправил это, используя UseRange. Затем началась другая проблема - файл имеет «фиксированное» количество столбцов, но иногда последние 3 ячейки пусты или так. В этом случае он не работает - он игнорирует пустые ячейки в конце.Использование ячеек диапазона и UsedRange in для каждого цикла

Я считаю, что проблема находится на линии со вторым для каждого цикла (с myField); Я потратил примерно 5 часов на поиск в Google, используя справку, пробовал разные комбо с диапазоном, ячейками, End (xxx) и не мог решить проблему. Может ли кто-нибудь помочь?

В заключение код ДОЛЖЕН пройти через всю матрицу, но в первом и последнем столбцах могут быть пустые значения.

Вставьте часть кода, приведенную ниже.

For Each myRecord In myWkSheet.Range("A1:A" & myWkSheet.UsedRange.Rows.Count) 
    With myRecord 
     For Each myField In myWkSheet.Range(.Cells, myWkSheet.Cells(.Row, myWkSheet.Columns.Count).End(xlToLeft)) 
     RplcText = myField.Text 
     RplcText = Replace(RplcText, "|", "/") 'Replaces pipes from input file to slashes to avoid mismatches during ETL 
     sOut = sOut & RplcText & DELIMITER 
     Next myField 
     OUTFILE_WRITELINE sOut 
     sOut = Empty 
    End With 
Next myRecord` 
+0

Если * «файл имеет„фиксированное“количество столбцов» * почему не просто жесткий код число столбцов в, а не пытаться измерить '.UsedRange' или' .CurrentRegion'? – Jeeped

+0

Я использую макрос для создания файлов .txt для различных типов экспорта. Я хотел сказать, что каждый отдельный файл имеет первую строку заголовков, которая всегда заполняется. Пример. Первая строка содержит 10 столбцов. Невозможно, чтобы любая строка имела 10+. Но может случиться так, что первая ячейка в первом столбце пустая и такая же, как в последних столбцах x. –

ответ

1

Если у вас есть набор заголовков меток по первой строке затем положить .CurrentRegion использовать. см Range.CurrentRegion Property (Excel)

dim totalRows as long, totalColumns as long, dataRange as range 
with sheets("sheet1").cells(1, 1).currentregion 
    totalRows = .rows.count 
    totalColumns = .columns.count 
    set dataRange = .offset(1, 0).resize(.rows.count -1, .columns.count) 'no header row 
end with 
+0

Большое спасибо, я заменил все петли только 'Для каждого myField In myWkSheet.Cells (1, 1) .CurrentRegion' И теперь он работает :) Спасибо! –

Смежные вопросы