【问题标题】:Passing variables from QTP/UFT to Excel macros将变量从 QTP/UFT 传递到 Excel 宏
【发布时间】:2017-06-08 16:40:35
【问题描述】:

我有一些 txt 文件要导入 Excel。这些文件按日期分组。我在 Excel 中记录了宏,每次我必须将每个日期的文件路径更改为 ...\files(date)\filename.txt。这是宏:

Sub DataImport2()
'
' DataImport2 Macro
'
With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;d:\testfiles\project1\20170528\filename.txt" _
        , Destination:=Range("$A$2"))
'        .CommandType = 0
        .Name = "filename.txt"
        .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
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

在自动化测试中,UFT 应在网页中选择一个日期,并将网页上的数据与该日期的文件中的数据进行比较。

问题是:如何将选择的日期从 UFT 传递到 Excel 并在 Excel 中用作文件路径?我想它应该看起来像

..."TEXT;d:\testfiles\project1\(uft-passed-date)\filename.txt" _...

也许如下传递变量可能有效,但从 Excel/宏方面我应该如何使用它们?

objExcel.Run "macroname", "params1", "param2"

我尝试将上述宏复制到 UFT,但它不起作用(一般错误)。 使用 UFT 12.52、IE11 和 Office 16。

【问题讨论】:

  • 为您的子 DataImport2 创建 String 变量以传递文件名。现在使用 UFT 从 GUI 中提取日期,然后使用 run your excel macro from UFT
  • @ManishChristian in UFT 我有vDate=Browser("").Page("").WebElement("").GetROProperty("") 我可以以objExcel.Run "DataImport2", "vDate" 的身份运行宏在Excel 中,宏如何获得它?录制的宏应该修改什么?谢谢)
  • 检查我的答案。

标签: excel automated-tests qtp vba


【解决方案1】:

首先像这样修改你的宏来添加日期参数:

Sub DataImport2(dDate as String)
'
' DataImport2 Macro
'
With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;d:\testfiles\project1\" & dDate & "\filename.txt" _
        , Destination:=Range("$A$2"))

然后在 UFT 中,从 GUI 捕获日期并将其转换为文件名格式(如果需要)。

最后像这样从 UFT 运行宏:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("ExcelFilePath\FileName.xlsm", 0, True)
objExcel.Visible = False
objExcel.DisplayAlerts = False
objExcel.Run "DataImport2", sDate 'sDate variable holding date
objExcel.Application.Quit
Set objWorkbook = Nothing : Set objExcel = Nothing

【讨论】:

  • 非常感谢。但现在我收到错误“此工作簿中可能没有宏,或者所有宏可能被禁用”)宏在 Excel 中启用,在模块中。选择“信任对 VBA 项目的访问”。当我从 Excel 运行 marco 时,它可以工作
  • 你的宏存储在哪里,是在模块还是工作表级别?
  • 存储在Module中
  • 查看this链接,看看有没有答案对你有帮助。因为我已经测试了我的答案的每一点并且它的工作没有任何问题。
  • 它有效。不得不在新文件中重写宏。在宏中将 sDate 声明为 String 时,它返回错误。我没有将它声明为字符串,它可以工作:Sub DataImport2(sDate)
【解决方案2】:

您需要将宏更改为此,以便它可以采用picked date

Sub DataImport2(sFilePart As String)
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;d:\testfiles\project1\" & sFilePart & "\filename.txt" _
            , Destination:=Range("$A$2"))
    '
    '~~> Rest of the code
    '
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多