VBA宏将SQL错误代码复制到Excel

时间:2016-12-14 13:54:02

标签: sql-server excel vba excel-vba macros

我正在尝试在VBA中编写/采用宏来将SQL查询复制到Excel中。 我有它连接和执行。当我在SQL中手动运行它时,这是SQL中的错误代码:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#MSP_History3', because it does not exist or you do not have permission.

(8661 row(s) affected)
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#MSP1', because it does not exist or you do not have permission.

(8661 row(s) affected)
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#MSP_PBP', because it does not exist or you do not have permission.

(8661 row(s) affected)
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 'dbo.MSP_History', because it does not exist or you do not have permission.
Msg 262, Level 14, State 1, Line 1
CREATE TABLE permission denied in database 'master'.

看起来它不是一个很好的查询,但我感兴趣的是受影响的行数。

这是VBA代码的后一部分,比我更熟练的人用于将表结果粘贴到A1的不同查询:

'Open the connection.
cn.Open strConn
'
'Set and Execute SQL Command
Set cmd1.ActiveConnection = cn
cmd1.CommandText = SQLquery
cmd1.CommandType = adCmdText
cmd1.Execute

'Open Recordset
Set rs1.ActiveConnection = cn
rs1.Open cmd1

'Paste Column Headers into Spreadsheet
    For Col = 0 To rs1.Fields.Count - 1
    Range("A1").Offset(0, Col).Value = rs1.Fields(Col).Name
    Next

'Copy Data to Excel
ActiveSheet.Range("A2").CopyFromRecordset rs1
Cells.Select
Cells.EntireColumn.AutoFit

此代码适用于正确执行的SQL查询。有没有办法复制错误信息?

理想情况下,我在Excel中的单元格A1中想要的只是" 8661"。

谢谢!

编辑:当前执行" cmd1.Execute"时VBA中的错误消息行是:

Run-time error '-2147217900 (80040e14)': Automation error

1 个答案:

答案 0 :(得分:0)

也许您可以尝试使用此代码...它会在消息框中显示错误。

Option Explicit

Public Sub Connect()

On Error GoTo InvalidValue:

Dim myCn As MyServer
Set myCn = New MyServer

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "Select * from myTable", myCn.GetConnection

Range("A1").CopyFromRecordset rs

rs.Close
myCn.Shutdown

Set rs = Nothing
Set myCn = Nothing

Exit Sub

InvalidValue:

MsgBox Err.Number & " " & Err.Description

End Sub