2015-07-08 6 views
1

Я разрабатываю небольшой инструмент, который запрашивает наша база данных и возвращает некоторые ссылки.Excel VBA Добавление записей ниже существующих значений

У меня возникли проблемы с добавлением новых значений query'd ниже уже существующих значений в excel Sheet1.

Option Explicit 

Public Ref As String 
Const DWConnectString = "Provider=SQLOLEDB... " 

Public Property Get rRef() As String 
    rRef = Me.TextBox1.Value 
    Ref = Trim(rRef) 
End Property 

Private Sub TextBox1_Change() 
    Dim rRef As String 
    rRef = Me.TextBox1.Value 
End Sub 

Private Sub ZoekRef_Click() 
    Dim cn As Object 
    Dim rs As Object 
    Dim cm As Object 
    Dim Ref As String 
    Dim StrSource As String 
    Dim startrow As Integer 

    Ref = rRef 

    Set cn = CreateObject("ADODB.Connection") 
    cn.Open DWConnectString 

    Set rs = CreateObject("ADODB.Recordset") 
    'rs = New ADODB.Recordset 

    StrSource = "Select CONSIGNMENT.CONSIGNMENT, CONSIGNMENT.DOCUMENT_REMARK_2, INVOICE_HIST.NET_AMOUNT, INVOICE_HIST.VAT_AMOUNT, INVOICE_HIST.INV_CURRENCY " 
    StrSource = StrSource & "from CONSIGNMENT left outer join INVOICE_HIST ON CONSIGNMENT.CONSIGNMENT=INVOICE_HIST.CONSIGNMENT " 
    StrSource = StrSource & "where DOCUMENT_REMARK_2 like '%" 
    StrSource = StrSource & Ref & "%'" 

    rs.Open StrSource, cn 

    If rs.EOF Then 
     MsgBox "Geen Resultaten" 
     Exit Sub 
    Else 
     Dim fieldNames, j 

     rs.MoveFirst 

     ReDim fieldNames(rs.Fields.Count - 1) 

     For j = 0 To rs.Fields.Count - 1 
      fieldNames(j) = rs.Fields(j).Name 
     Next 

     Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, rs.Fields.Count)).Value = fieldNames 

     For j = 1 To rs.Fields.Count 
      Sheet1.Columns(j).AutoFit 
     Next 

     Sheet1.Cells.CopyFromRecordset rs 
     'fldcount2 = Sheets("sheet1").UsedRange.Rows.Count 
     Sheet1.Rows(1).Insert 
     Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, rs.Fields.Count)).Value = fieldNames 
     startrow = 3 

     Do Until rs.EOF 
      rs.MoveNext 
      startrow = startrow + 1 
     Loop 
    End If 

    rs.Close 
    Set rs = Nothing 

    cn.Close 
    Set cn = Nothing 
End Sub 

Я думал об использовании линии:

Do until trim(cells(startrow,1).Value) = "" 
    startrow = startrow + 1 
Loop 

Перед тем как rs.Movenext линии, но, кажется, чтобы проверить, не записи фактического файла Excel.

Могу ли я проверить свои текущие значения Sheet1 перед добавлением нового набора записей, чтобы он был ниже того, что уже существует?

Спасибо за помощь.

+0

Вы пытаетесь получить последнюю строку с данными? Существует [множество способов] (http://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using- использование- vba) для этого, мой любимый «LastRow = Cells (Rows.Count,« A »). End (xlUp) .Row'. – nicholas79171

+0

Итак, в какой части моего кода я добавляю эту строку + использовать последнюю, чтобы скопировать RS в нужном месте? – Witloofdc

+0

Я не мог сказать, глядя на ваш код, вы пытаетесь выбрать ряд строк? Или вы просто пытаетесь получить первую открытую строку внизу, а затем вставьте данные под нее? – nicholas79171

ответ

0

Развернуть область действия вашего цикла.

rs.MoveFirst 
Do Until rs.EOF 

    'Do all your work here 


    'Then increment your counter and the recordset 
    rs.MoveNext 
    startrow = startrow + 1 
Loop 
Смежные вопросы