Excel VBA 运行时错误 '424',需要对象。

21

我完全不懂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
4个回答

29

第一行代码 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

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

3
只需要从您的代码中删除.value即可。
Set envFrmwrkPath = ActiveSheet.Range("D6").Value

使用这个替代:

Set envFrmwrkPath = ActiveSheet.Range("D6")

0

你有两个选项:

-如果你想要这个值:

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")

-3
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接