vba excel:需要加载xml文件并写入特定值(从当前excel获得),然后保存它

vba excel:需要加载xml文件并写入特定值(从当前excel获得),然后保存它,xml,vba,excel,Xml,Vba,Excel,我对VBA、xml和通用编程一无所知,我只是尝试从许多网站获取信息,但似乎无法解决我的问题,即: 我的目标是:对于最终用户,他必须在excel文件中输入框架路径和其他有用的值,并选择RunTest,然后代码将获取这些值,加载xml文件,将这些值输入xml,保存并启动应用程序。这些值将由调用到应用程序中的其他脚本使用 我的pb显示excel似乎根本没有加载xml(甚至继续调试,他说“运行时错误,无法找到指定的路径;下面是我使用的代码和xml格式: Option Explicit Private

我对VBA、xml和通用编程一无所知,我只是尝试从许多网站获取信息,但似乎无法解决我的问题,即:

我的目标是:对于最终用户,他必须在excel文件中输入框架路径和其他有用的值,并选择RunTest,然后代码将获取这些值,加载xml文件,将这些值输入xml,保存并启动应用程序。这些值将由调用到应用程序中的其他脚本使用

我的pb显示excel似乎根本没有加载xml(甚至继续调试,他说“运行时错误,无法找到指定的路径;下面是我使用的代码和xml格式:

Option Explicit

Private Sub RunTest_Click()
Dim envFrmwrkPath As String
Dim ApplicationName As String
Dim TestIterationName As String
Dim objfso, app, Eval As Object
Dim i, Msgarea




envFrmwrkPath = ActiveSheet.Range("E6").Value
ApplicationName = ActiveSheet.Range("E4").Value
TestIterationName = ActiveSheet.Range("E8").Value


Set EnvVarXML = CreateObject("Microsoft.XMLDOM")

EnvVarXML.Load (envFrmwrkPath & "Environment\EnvVar.xml")

For Each UIElement In EnvVarXML.SelectNodes("Environment/Variable")

        Set Field = Eval(objUIElement.SelectSingleNode("Name").Text)
        Field.Value = UIElement.SelectSingleNode("Value").Text

        Set EnvVarXML = CreateObject("Microsoft.XMLDOM")

        EnvVarXML.Load (envFrmwrkPath & "Environment\EnvVar.xml")

Next

Set EnvVarXML = Nothing

Set objfso = CreateObject("Scripting.FileSystemObject")

If Not objfso.FolderExists(envFrmwrkPath) Then

    MsgBox envFrmwrkPath & "- Folder not found. Setting not saved"

    Exit Sub

End If

Set objfso = Nothing

Set EnvVarXML = CreateObject("Microsoft.XMLDOM")

EnvVarXML.Load (envFrmwrkPath & "Environment\EnvVar.xml")

For Each UIElement In EnvVarXML.SelectNodes("Environment/Variable")

        Set Field = Eval(UIElement.SelectSingleNode("Name").Text)

        UIElement.SelectSingleNode("Value").Text = Field.Value

        If UIElement.SelectSingleNode("Name").Text = "envFrmwrkPath" Then

            Application.DisplayAlerts = False

            Set app = CreateObject("QuickTest.Application")

            app.Launch
            app.Visible = True
            app.WindowState = "Maximized"
            app.Open envFrmwrkPath & "\Driver", False
            app.Folders.RemoveAll
            app.Folders.Add (envFrmwrkPath)
            app.Test.Settings.Resources.DataTablePath = "<Default>"
            app.Test.Settings.Resources.Libraries.RemoveAll

            app.Test.Settings.Resources.Libraries.Add (envFrmwrkPath & _
              "FunctionLibrary\VTL_Util_Lib.vbs")

            app.Test.Settings.Resources.Libraries.Add (envFrmwrkPath & _
              "FunctionLibrary\VTL_BP_Lib.vbs")

            app.Test.Settings.Resources.Libraries.Add (envFrmwrkPath & _
               "FunctionLibrary\VTL_Engine_Lib.vbs")

            app.Test.Settings.Resources.Libraries.Add (Field.Value & _
                "FunctionLibrary\RecoveryScenario.qfl")

            If app.Test.Settings.Recovery.Count > 0 Then
                 app.Test.Settings.Recovery.RemoveAll
            End If

            app.Options.Run.RunMode = "Fast"

            app.Options.Run.ViewResults = False

            For i = 1 To app.Test.Actions.Count
                app.Test.Actions(i).ObjectRepositories.RemoveAll

                app.Test.Actions(i).ObjectRepositories.Add (envFrmwrkPath & _
                           "Ressources\ObjectRepository\shared_repository.tsr")

            Next

            app.Test.Save

        End If

    Next

    ' here i got the error but the pb is earlier i think!
    EnvVarXML.Save (envFrmwrkPath & "Environment\EnvVar.xml") 

End Sub
选项显式
专用子运行测试\u单击()
作为字符串的Dim envFrmwrkPath
将ApplicationName设置为字符串
Dim TesterationName作为字符串
Dim objfso、应用程序、评估对象
米斯加雷亚
envFrmwrkPath=ActiveSheet.Range(“E6”).Value
ApplicationName=ActiveSheet.Range(“E4”).Value
TesterationName=ActiveSheet.Range(“E8”).Value
设置EnvVarXML=CreateObject(“Microsoft.XMLDOM”)
Load(envFrmwrkPath&“Environment\EnvVar.xml”)
对于EnvVarXML.SelectNodes(“环境/变量”)中的每个UIElement
Set Field=Eval(objUIElement.SelectSingleNode(“名称”).Text)
Field.Value=UIElement.SelectSingleNode(“值”).Text
设置EnvVarXML=CreateObject(“Microsoft.XMLDOM”)
Load(envFrmwrkPath&“Environment\EnvVar.xml”)
下一个
Set EnvVarXML=Nothing
设置objfso=CreateObject(“Scripting.FileSystemObject”)
如果不是objfso.FolderExists(envFrmwrkPath),则
MsgBox envFrmwrkPath&“-未找到文件夹。未保存设置”
出口接头
如果结束
设置objfso=Nothing
设置EnvVarXML=CreateObject(“Microsoft.XMLDOM”)
Load(envFrmwrkPath&“Environment\EnvVar.xml”)
对于EnvVarXML.SelectNodes(“环境/变量”)中的每个UIElement
Set Field=Eval(UIElement.SelectSingleNode(“名称”).Text)
UIElement.SelectSingleNode(“值”).Text=Field.Value
如果UIElement.SelectSingleNode(“Name”).Text=“envFrmwrkPath”,则
Application.DisplayAlerts=False
设置app=CreateObject(“QuickTest.Application”)
应用程序启动
app.Visible=True
app.WindowState=“最大化”
app.Open envFrmwrkPath&“\Driver”,False
app.Folders.RemoveAll
app.Folders.Add(envFrmwrkPath)
app.Test.Settings.Resources.DataTablePath=“”
app.Test.Settings.Resources.Libraries.RemoveAll
app.Test.Settings.Resources.Libraries.Add(envFrmwrkPath&_
“函数库\VTL\u Util\u Lib.vbs”)
app.Test.Settings.Resources.Libraries.Add(envFrmwrkPath&_
“函数库\VTL\u BP\u Lib.vbs”)
app.Test.Settings.Resources.Libraries.Add(envFrmwrkPath&_
“函数库\VTL\u引擎\u Lib.vbs”)
app.Test.Settings.Resources.Libraries.Add(Field.Value&_
“FunctionLibrary\RecoveryScenario.qfl”)
如果app.Test.Settings.Recovery.Count>0,则
app.Test.Settings.Recovery.RemoveAll
如果结束
app.Options.Run.RunMode=“快速”
app.Options.Run.ViewResults=False
对于app.Test.Actions.Count的i=1
app.Test.Actions(i).ObjectRepositories.RemoveAll
app.Test.Actions(i).ObjectRepositories.Add(envFrmwrkPath&_
“resources\ObjectRepository\shared_repository.tsr”)
下一个
app.Test.Save
如果结束
下一个
“这里我得到了错误,但我认为pb是更早的!
保存(envFrmwrkPath&“Environment\EnvVar.xml”)
端接头
============

xml文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Environment>
    <Variable>
        <Name>envversion</Name>
        <Caption>version :</Caption>
        <Type>TEXT</Type>
        <Value></Value>
        <Description>Version</Description>
    </Variable>
    <Variable>
        <Name>envAppName</Name>
        <Caption>Application name :</Caption>
        <Type>TEXT</Type>
        <Value></Value>
        <Description>Name of the Application Under Test</Description>
    </Variable>
    <Variable>
        <Name>envFrmwrkPath</Name>
        <Caption>Framework folder path:</Caption>
        <Type>TEXT</Type>
        <Value></Value>
        <Description>Path of the automation framework</Description>
    </Variable>
    <Variable>
        <Name>envIP</Name>
        <Caption>IP Address:</Caption>
        <Type>TEXT</Type>
        <Value></Value>
        <Description>IP Address</Description>
    </Variable>
    <Variable>
        <Name>envLogin</Name>
        <Caption>Login:</Caption>
        <Type>TEXT</Type>
        <Value></Value>
        <Description>Login</Description>
    </Variable>
    <Variable>
        <Name></Name>
        <Caption>Password:</Caption>
        <Type>TEXT</Type>
        <Value></Value>
        <Description>Password</Description>
    </Variable>
    <Variable>
        <Name>envLogs</Name>
        <Caption>Logs:</Caption>
        <Type>TEXTAREA</Type>
        <Value></Value>
        <Description>logs</Description>
    </Variable>
    <Variable>
        <Name>envTestIteration</Name>
        <Caption>Test iteration name:</Caption>
        <Type>TEXT</Type>
        <Value></Value>
        <Description>TestIterationName Subfolder to be created</Description>
    </Variable>
</Environment>

环境变化
版本:
正文
版本
环境名称
应用程序名称:
正文
正在测试的应用程序的名称
环境路径
框架文件夹路径:
正文
自动化框架的路径
埃维普
IP地址:
正文
IP地址
环境登录
登录:
正文
登录
密码:
正文
密码
环境日志
日志:
文本区
日志
环境试验
测试迭代名称:
正文
要创建的TesterationName子文件夹
=====================


很抱歉,文本太长,希望尽可能清楚……我非常感谢您对如何解决此问题的帮助,尤其是在理解如何随时解决此问题方面。谢谢。

如果
envFrmwrkPath
的值不是以
\
结尾,那么您的路径很可能会被破坏。例如,如果
envFrmwrkPath
C:\Shared Documents
则您尝试加载/保存的路径为:

C:\shareddocumentsenvironment\EnvVar.xml


确保单元格E6中的值以一个
\
结尾,然后重试

谢谢您的帮助…我按照您的建议进行了更改,但没有起作用,同样的情况…我复制了上面的一些代码以仅测试负载,我添加了一个条件来显示是否加载,它始终指向未加载。我还禁用了framew工作路径声明,并将完整路径添加到加载函数,文件加载正确。我不知道为什么第一种情况下它不起作用…它起作用了,你是对的…我完全错了…非常感谢“barrowc”…事实上,有两种方法解决了pb:EnvVarXML.load(envFrmwrkPath&“\Environment\EnvVar.xml”)而不是EnvVarXML.Load(envFrmwrkPath&“Environment\EnvVar.xml”)(这是我将告诉我们的方法