2015-03-12 4 views
0

Я работаю над Excel VBA. Я пытаюсь перебирать столбцы по горизонтали в excel так, как до последнего значения в наборе записей. Ниже мой код. Поскольку я хочу, чтобы он начинался с столбца G и до данных в наборе записей. Как и в приведенном ниже коде, я представляю последний столбец как X. Это может быть BM/BN, но не может предсказать при запуске.Петля до последней колонки (по горизонтали), которая будет использоваться

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

Set RS = 'recordset is set 

If Not RS.BOF And Not RS.EOF Then 
RS.MoveFirst 
Do While Not RS.BOF And Not RS.EOF 

    Set xlApp = CreateObject("Excel.Application") 
    Set xlWorkbook = xlApp.Workbooks.Open(ReportTemplateDirectory & TestExcel.xlsx") 
    xlWorkbook.Sheets(2).Name = "Calculation" 
    Set ShtReport = xlApp.Workbooks(1).Sheets("Calculation") 

    xlApp.Workbooks(1).Sheets("Calculation").Range("G6").Value = "") 
    ..... 
    ..... 'Loop until the last column to be used 
    ..... 
    xlApp.Workbooks(1).Sheets("Calculation").Range("X").Value = "") 

RS.MoveNext 
Loop 
End If 
+0

Не могу сказать по коду - вы уже ввели набор записей? – Lopsided

+0

Я пропустил код для установки набора записей через запрос. Так что просто нужно знать итерационную часть. – vivek

+0

Если у вас есть набор записей в MS Access, у вас есть счетчик полей/столбцов. – Fionnuala

ответ

0

Вы можете выполнить это с довольно простой петлей. Я добавил некоторые встроенные комментарии, чтобы отметить некоторые сделанные изменения.

Set RS = 'recordset is set 

' Not sure if you need/want the RS.BOF condition here... 
If Not RS.BOF And Not RS.EOF Then 
    RS.MoveFirst 

    ' Initial Excel outside of the loop. 
    ' Otherwise you create an instance for each record entry. 
    Set xlApp = CreateObject("Excel.Application") 
    Set xlWorkbook = xlApp.Workbooks.Open(ReportTemplateDirectory & "TestExcel.xlsx") 
    Set ShtReport = xlWorkbook.Sheets(2) 

    ShtReport.Name = "Calculation" 

    Dim col As Integer 
    col = 7 ' Start on column G. 
    Do While Not RS.EOF 
     ' All output will go to row 6. 
     ShtReport.Cells(col, 6).Value = "?" ' Put value from RS here. 

     RS.MoveNext 
     col = col + 1 
    Loop 

    ' If you are done with Excel, release the resources here. 

End If 
+0

RBAR редко бывает ответом, когда у вас есть copyfromrecordset. – Fionnuala

+0

Копирование на лист Excel, а затем перемещение листа вместо Recordset, вероятно, проще, но это, безусловно, должно работать. +1 – Lopsided

+0

@Fionnuala - RBAR? Я вижу, что вы сделали несколько комментариев в основном потоке о 'copyfromrecordset'. Я не знал об этом методе, поэтому я проверю его. –

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