QueryTables错误:预期')'

时间:2013-05-09 21:43:26

标签: batch-file vbscript cmd

获取错误:“预期”)第22行,Char 60(即在QueryTables.Add函数中的“连接”右侧)。此批处理文件正在调用此VBA。我试图了解我的语法有什么问题,以便我可以调用VB作业将文本文件转换为格式化的CSV。文本文件已经以制表符分隔。

批处理文件:

pushd %~dp0                    **Used to get current DIR
set path=%~dp0                 **Used to set a path variable to send to VBScript
txtToCsv.vbs %path%            **Used to invoke the VBScript

VBA脚本:

if WScript.Arguments.Count < 1 Then
     WScript.Echo "Error! Please specify the source path and the destination. Usage: txtToCsv Destination.csv"
     Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = False
oExcel.DisplayAlerts = False

Dim oBook
Set oBook = oExcel.Workbooks.Add()
With oBook
    .Title = "Deal Data"
    .Subject = "Deal Data"
    .SaveAs WScript.Arguments(0)&"Deal_Data.xlsx"&YEAR(Date)&MONTH(Date)&DAY(Date)
End With

Dim sourceFile
Set sourceFile = "TEXT;"&WScript.Arguments(0)&"deal_data.txt"

Set ActiveSheet = Worksheets("Sheet1")
With ActiveWorkbook.ActiveSheet.QueryTables.Add(Connection:="TEXT;" & sourceFile,    Destination:=ActiveCell)
    .Name = "deal_data"
        .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

oBook.Close False
oExcel.Quit
WScript.Echo "Done"

1 个答案:

答案 0 :(得分:0)

你的第二个脚本是VBScript,而不是VBA,即使你在其中调用Excel VBA方法。虽然这两种语言有一些相似之处,但也存在一些根本区别。

  1. 您需要一个句柄来访问VBA方法和集合。

  2. 您不能在VBScript中使用名称参数。

  3. 此外,您似乎已经在变量sourceFile中构建了连接字符串。

    更改以下两行:

    Set ActiveSheet = Worksheets("Sheet1")
    With ActiveWorkbook.ActiveSheet.QueryTables.Add(Connection:="TEXT;" & sourceFile,    Destination:=ActiveCell)
    

    进入这个:

    Set ActiveSheet = oBook.Worksheets("Sheet1")
    With ActiveSheet.QueryTables.Add(sourceFile, oExcel.ActiveCell)
    

    问题应该消失。