【问题标题】:VBA type mismatch error in QueryTablesQueryTables 中的 VBA 类型不匹配错误
【发布时间】:2017-08-24 21:03:39
【问题描述】:

我在第 8 行遇到类型不匹配范围错误。谁能解释一下我做错了什么?

谢谢

Set objExcel = CreateObject("Excel.application")
Set objWorkbook = objExcel.Workbooks.Add()
Set objSheet = objWorkbook.Worksheets.Add
objExcel.Visible = True
objExcel.DisplayAlerts = True
objExcel.Workbooks.Add(1)

With objExcel.ActiveSheet.QueryTables.Add(Connection="TEXT;C:\temp\file.csv", Destination=Range("$A$1"))
    '.CommandType = 0
    .Name = "test_ITS_ExtractX"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 850
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 2)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery=False
End With

objExcel.ActiveWorkbook.SaveAs Filename="c:/temp/file.xlsx", FileFormat=xlOpenXMLWorkbook, CreateBackup=False

objExcel.DisplayAlerts = True objExcel.退出

【问题讨论】:

    标签: vba


    【解决方案1】:

    如果您的代码实际上是用其中一种 VBA 变体编写的,则应使用 := 而不是仅使用 = 指定命名参数。这会在我运行您的代码时生成“类型不匹配”错误。

    您还有一个不合格的Range 对象(请参阅answer by Domenic),一旦您更正语法错误,就会出现问题。

    所以正确的行应该是:

    With objExcel.ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\temp\file.csv", _
                                              Destination:=objExcel.ActiveSheet.Range("$A$1"))
    

    你后面的一行应该是

    objExcel.ActiveWorkbook.SaveAs Filename:="c:\temp\file.xlsx", _
                                   FileFormat:=xlOpenXMLWorkbook, _
                                   CreateBackup:=False
    

    我刚刚注意到

    .Refresh BackgroundQuery:=False
    

    (注意:请确保xlOpenXMLWorkbook 常量在您运行它的任何应用程序中都可用。如果没有,您需要自己为其分配正确的值。同样适用于xlInsertDeleteCells 等.)

    【讨论】:

    • 感谢您提供非常详尽的答案和其他信息,这对我非常有限的 vba 知识肯定有所帮助。
    【解决方案2】:

    试试……

    With objExcel.ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\temp\file.csv", Destination:=objExcel.ActiveSheet.Range("$A$1"))
    

    希望这会有所帮助!

    【讨论】:

    • 非常感谢。很有帮助!
    • 我根据YowE3K关于命名参数的评论编辑了我的帖子。
    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2017-04-12
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多