VBA查询可以逐步进行,但在运行时会跳过

时间:2018-08-02 07:16:00

标签: excel-vba userform

我有一个简单的用户窗体,允许用户通过选项按钮选择两个选项之一。这两个选项的SQL语句的WHERE子句不同。

选择正确的选项按钮并按下提交按钮后,它将信息复制到活动工作簿中,将所有结果放在单个单元格中(通过将a列的值设置为all的值)其他列合并在一起,然后为每行清空所有其他列),然后将其另存为新的.CSV文件。

当我第一次按计划运行它时,另一方面,当我更改选定的optionbutton时,它仍然使用旧查询结果,而不是带有新WHERE的查询结果。 (其他所有内容都可以正常运行)。

我尝试通过F8键逐步运行它,然后它起作用了。结果之一大约是120行,另外50个结果。据我所知,在设置查询的新String值与将结果复制到excel工作表之间,发现查询本身已正确修改,这是有问题的。在工作表上保持不变。

If Optionbutton1 = True Then
Value = A
ElseIf optionbutton2= True Then
Value = b
End If


    Dim TDMConnection As ADODB.Connection
    Dim QueryResult As ADODB.Recordset
    Dim QueryField As ADODB.Field

    'Variabelen voor het samenvoegen van velden.
    Dim Rows As Range, RowNumber As Range


Set TDMConnection = New ADODB.Connection
Set QueryResult = New ADODB.Recordset
TDMConnection.ConnectionString = ConnectionString

TDMConnection.Open
On Error GoTo CloseConnection


Dim QuerySelect As String

QuerySelect = " SELECT      XXXX " & _
              " FROM        XXXX " & _
              " WHERE       XXXX= " & Value & " "


With QueryResult
    .ActiveConnection = TDMConnection
    .Source = QuerySelect
    .LockType = adLockReadOnly
    .CursorType = adOpenForwardOnly
    .Open
End With


On Error GoTo closeRecordSet


Sheets("Sheet1").UsedRange.ClearContents

Range("A1").CopyFromRecordset QueryResult

Range("A1", Range("I1").End(xlDown)).Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("I1"), Order2:=xlAscending, Key3:=Range("H1"), Order3:=xlAscending, Header:=xlNo

Set Rows = Range("A1", Range("I1").End(xlDown))
For Each regelnummer In Rows .Rows
    Range("A" & RowNumber .Row).Value = Range("A" & RowNumber .Row).Value + ";" + Range("B" & RowNumber .Row).Value + ";" + And so on until I
    Range("B" & RowNumber .Row).Value = ""
    Range("C" & RowNumber .Row).Value = ""
    Range("D" & RowNumber .Row).Value = ""
    Range("E" & RowNumber .Row).Value = ""
    Range("F" & RowNumber .Row).Value = ""
    Range("G" & RowNumber .Row).Value = ""
    Range("H" & RowNumber .Row).Value = ""
    Range("I" & RowNumber .Row).Value = ""
Next
  Range("A1").CurrentRegion.EntireColumn.AutoFit


closeRecordSet:

QueryResult.Close
Set QueryResult = Nothing
CloseConnection:
    TDMConnection.Close

ThisWorkbook.Worksheets("Sheet1").Copy
ActiveWorkbook.SaveAs Filename:="C:\temp\" & Value & ".csv", FileFormat:=xlCSVWindows
End Sub

编辑: 看来活动的工作簿已更改为新创建的.CSV文件,并且在自动运行时不会还原

1 个答案:

答案 0 :(得分:0)

看来,当我制作.CSV文件时,已将该文件转换为活动的工作簿,当逐步运行时,它本身又恢复为真正的活动工作簿,但正常运行时,我只需要添加Workbooks("WorkbookName.XLSM").Activate在将数据复制到正确的工作表之前。