[英]excel vba sql server data import “type mismatch error”
我正在嘗試創建一個宏,該宏將從SQL Server 2005將一些數據提取到Excel 2003中。
SQL代碼在此宏中,並且此代碼的一部分來自Excel中單元格中的值。 這在一定程度上可行,但是當我用於SQL代碼的Excel單元格中的數據超過公式預覽中的一行(或大約170個字符)時,出現“類型不匹配”錯誤。 否則它將正常工作。
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=anglobisql;Use Procedure for Prepare=1;Auto " _
, _
"Translate=True;Packet Size=4096;Workstation ID=MyIDHere;Use Encryption for Data=False;Tag with column collation when possible=F" _
, "alse;Initial Catalog=DATABASENAME"), Destination:=Range("A1"))
.CommandType = xlCmdSql
.CommandText = Array("SELECT COLUMN1, COLUMN2 FROM TABLENAME (nolock) WHERE COLUMN1 IN (" & ActiveWorkbook.Sheets("Sheet1").Range("e607").Value & ")")
.Name = "DATABASE TABLENAME"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceConnectionFile = _
"H:\My Data Sources\DATABASE TABLENAME.odc"
.Refresh BackgroundQuery:=False
顯然,所有數據庫名稱和表名稱均正確填寫。
知道為什么它會下降(是否存在字符數限制,或者是否由於單元格值繼續到Excel中的公式預覽欄中的下一行而失敗),如何解決?
非常感激,
亞歷克斯
Excel單元格超過170個字符不會引起任何問題。 我建議將出錯的行分開,以幫助找到問題所在。
替換為:
.CommandText = Array("SELECT COLUMN1, COLUMN2 FROM TABLENAME (nolock) WHERE COLUMN1 IN (" & ActiveWorkbook.Sheets("Sheet1").Range("e607").Value & ")")
有了這個:
Dim rng As Range, sSql As String
Set rng = ActiveWorkbook.Sheets("Sheet1").Range("e607")
Debug.Print "Range.Value = |" & rng.Value & "|"
sSql = "SELECT COLUMN1, COLUMN2 FROM TABLENAME (nolock) WHERE COLUMN1 IN (" & rng.Value & ")"
Debug.Print "SQL = |" & sSql & "|"
.CommandText = sSql
Debug.Print
打印到立即窗口,因此您可以再次檢查變量是否保存了期望的值。 我喜歡使用|
調試字符串時使用“ |
"
代替"
,因為我幾乎在字符串中都沒有|
。
另外,我不會為CommandText
或Connection
使用Array()
。 為了方便閱讀,我將重做第一行,使其看起來像這樣。
With ActiveSheet.QueryTables.Add( _
Connection:="OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI" _
& ";Persist Security Info=True;Data Source=anglobisql" _
& ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096" _
& ";Workstation ID=MyIDHere;Use Encryption for Data=False" _
& ";Tag with column collation when possible=False;Initial Catalog=DATABASENAME" _
, Destination:=Range("A1"))
這是通過刪除數組文本來解決的,因此
.CommandText = Array("SELECT COLUMN1, COLUMN2 FROM TABLENAME (nolock) WHERE ...
變成
.CommandText = ("SELECT COLUMN1, COLUMN2 FROM TABLENAME (nolock) WHERE ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.