【问题标题】:Excel VBA Run Time Error '424' object required需要 Excel VBA 运行时错误“424”对象
【发布时间】:2019-08-30 22:23:33
【问题描述】:

我是 VBA 和一般编码方面的新手,我正在尝试从同一工作簿中的单元格获取数据(获取框架路径...),然后启动应用程序 (QTP) 并运行测试。

我在尝试获取在 Excel 单元格中输入的值时遇到此错误:

Run Time Error '424' object required

我认为我遗漏了一些基本规则,但感谢您的帮助。请参阅下面有问题的代码部分:

Option Explicit

Private Sub RunTest_Click()

    Dim envFrmwrkPath As Range
    Dim ApplicationName As Range
    Dim TestIterationName As Range
    'Dim wb As Workbook
    'Dim Batch1 As Worksheets
    Dim objEnvVarXML, objfso, app As Object
    Dim i, Msgarea

    Set envFrmwrkPath = ActiveSheet.Range("D6").Value ' error displayed here
    Set ApplicationName = ActiveSheet.Range("D4").Value
    Set TestIterationName = ActiveSheet.Range("D8").Value

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    第一行代码Option Explicit 意味着(简单来说)您的所有变量都必须由Dim 语句显式声明。它们可以是任何类型,包括对象、整数、字符串,甚至是变体。

    这一行:Dim envFrmwrkPath As Range 声明了Range 类型的变量envFrmwrkPath。这意味着您只能将其设置为一个范围。

    这一行:Set envFrmwrkPath = ActiveSheet.Range("D6").Value 正在尝试将Range 类型变量设置为单元格D6 中的特定值。例如,这可以是整数或字符串(取决于您在该单元格中的内容),但它不是范围。

    我假设您希望将值存储在变量中。试试这样的:

    Dim MyVariableName As Integer
    MyVariableName = ActiveSheet.Range("D6").Value
    

    这假设您在单元格 D6 中有一个数字(如 5)。现在您的变量将具有值。

    为简单起见,您可以删除或注释掉Option Explicit 行,VBA 将在运行时尝试确定变量的类型。


    试试这个来通过你的这部分代码

    Dim envFrmwrkPath As String
    Dim ApplicationName As String
    Dim TestIterationName As String
    

    【讨论】:

    • 非常感谢您的快速回复,我在尝试了所有找到的方法后发布了我的问题:Used/Unused Option Explicit ...尝试了其他表达方式;现在通过使用您的建议;我得到:运行时错误'13'类型不匹配......好吧,envFrmwrkPath是用户在excel单元格中输入的QTP框架的路径;我想获取此路径,然后获取其他可重复使用的文件/文件夹...如果这有帮助,我将添加我的 excel 我的文件...
    • 如果单元格包含“路径”,它实际上将被视为字符串。添加文件会很有帮助。只需编辑您的原始问题并包含指向您的文件的链接。
    • 是的,我尝试使用 String 并且没问题,现在处理 QTP 时遇到其他错误。再次感谢您的帮助
    【解决方案2】:

    只需从您的代码中删除 .value

    Set envFrmwrkPath = ActiveSheet.Range("D6").Value
    

    代替这个,使用:

    Set envFrmwrkPath = ActiveSheet.Range("D6")
    

    【讨论】:

      【解决方案3】:

      你有两个选择,

      -如果你想要这个值:

      Dim MyValue as Variant ' or string/date/long/...
      MyValue = ThisWorkbook.Sheets(1).Range("A1").Value
      

      -如果你想要单元格对象:

      Dim oCell as Range  ' or object (but then you'll miss out on intellisense), and both can also contain more than one cell.
      Set oCell = ThisWorkbook.Sheets(1).Range("A1")
      

      【讨论】:

        【解决方案4】:
        Private Sub CommandButton1_Click()
        
            Workbooks("Textfile_Receiving").Sheets("menu").Range("g1").Value = PROV.Text
            Workbooks("Textfile_Receiving").Sheets("menu").Range("g2").Value = MUN.Text
            Workbooks("Textfile_Receiving").Sheets("menu").Range("g3").Value = CAT.Text
            Workbooks("Textfile_Receiving").Sheets("menu").Range("g4").Value = Label5.Caption
        
            Me.Hide
        
            Run "filename"
        
        End Sub
        
        Private Sub MUN_Change()
            Dim r As Integer
            r = 2
        
            While Range("m" & CStr(r)).Value <> ""
                If Range("m" & CStr(r)).Value = MUN.Text Then
                Label5.Caption = Range("n" & CStr(r)).Value
                End If
                r = r + 1
            Wend
        
        End Sub
        
        Private Sub PROV_Change()
            If PROV.Text = "LAGUNA" Then
                MUN.Text = ""
                MUN.RowSource = "Menu!M26:M56"
            ElseIf PROV.Text = "CAVITE" Then
                MUN.Text = ""
                MUN.RowSource = "Menu!M2:M25"
            ElseIf PROV.Text = "QUEZON" Then
                MUN.Text = ""
                MUN.RowSource = "Menu!M57:M97"
            End If
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多