Выполнить SQL-запрос, если нет ошибок / Получить данные - PullRequest
0 голосов
/ 27 июня 2018

В своем коде Excel VBA я открываю соединение с другой книгой.

  With CreateObject("ADODB.Connection")
        .CommandTimeout = 500
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & path & ";" & "Extended Properties=""Excel 12.0;HDR=NO;Readonly=true"";"
    .Open

Я хочу сделать такую ​​строку:

ThisWorkbook.Worksheets("Test").Range("H306:307").CopyFromRecordset .Execute("select * from [values$S8:S8]")

Но, возможно, что «значения» листа не существует, поэтому я хочу сделать эту строку, только если нет ошибок или если «значения» существуют, но я не знаю, как это сделать .

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Другой вариант - использовать On Error Resume Next очень осторожно, потому что он будет игнорировать любую ошибку. Тем не менее, вы можете сделать это в одну строку и поставить On Error GoTo 0, что останавливает действие. В конце, перед присвоением значений новому рабочему листу, проверьте, rs is not Nothing:

Public Sub TestMe()

    Dim path As String: path = "C:\Source.xlsx"
    Dim rs As Object

    With CreateObject("ADODB.Connection")
        .CommandTimeout = 500
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                    & path & ";" & _
                    "Extended Properties=""Excel 12.0;HDR=NO;Readonly=true"";"
        .Open

        On Error Resume Next
        Set rs = .Execute("SELECT * FROM [Sheet12$A1:B4]")
        On Error GoTo 0
    End With

    If Not rs Is Nothing Then
        With ThisWorkbook.Worksheets(1).Range("A1")
            .CopyFromRecordset rs
        End With
    End If

End Sub
0 голосов
/ 27 июня 2018

Если ваша идея проверить, существует ли рабочая таблица, тогда сделайте это. И забудь про SQL, он не актуален:

Public Function worksheetExists(wb As Workbook, sh As Worksheet) As Boolean    
    worksheetExists = IsError(wb.sh.Range("A1"))    
End Function

А если вы хотите поместить открытие функции в функцию, то:

Public Function worksheetExists(path As String, sh As Worksheet) As Boolean

    On Error GoTo worksheetExists_Error

    Dim wb As Workbook
    Set wb = Workbooks.Open(path)
    worksheetExists = IsError(wb.sh.Range("A1"))

    wb.Close False

    On Error GoTo 0
    Exit Function

worksheetExists_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") "

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...