需要Excel VBA运行时错误“424”对象

我在VBA和编程方面都是全新的,我试图从同一个工作簿的单元格中获取数据(获取框架path…),然后启动应用程序(QTP)并运行testing。

当我尝试获取在Excel单元格中input的值时出现此错误:

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 

第一个代码行Option Explicit意思是(所有的variables都必须由Dim语句显式声明)。 它们可以是任何types,包括对象,整数,string甚至是变体。

这一行: Dim envFrmwrkPath As Range声明Rangetypes的variablesenvFrmwrkPath 。 这意味着您只能将其设置为一个范围。

此行: Set envFrmwrkPath = ActiveSheet.Range("D6").Value试图将Rangetypesvariables设置为单元格D6一个特定的值。 这可能是一个整数或string例如(取决于你在那个单元格中有什么),但它不是一个范围。

我假设你想要存储在一个variables中的值。 尝试这样的事情:

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

这假定你有一个数字(如5)在单元格D6。 现在你的variables将有价值。

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


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

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

只需从代码中移除.value“Set envFrmwrkPath = ActiveSheet.Range(”D6“)。Value”

而不是这个使用这个:Set envFrmwrkPath = ActiveSheet.Range(“D6”)

 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