Ошибка времени выполнения Excel VBA Ошибка "424"
Я совершенно новый в 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
Ответы
Ответ 1
Первая строка кода Option Explicit
означает (простыми словами), что все ваши переменные должны быть явно объявлены операторами Dim
. Они могут быть любыми типами, включая объект, целое число, строку или даже вариант.
Эта строка: Dim envFrmwrkPath As Range
объявляет переменную envFrmwrkPath
типа Range
. Это означает, что вы можете установить его только в диапазоне.
Эта строка: Set envFrmwrkPath = ActiveSheet.Range("D6").Value
пытается установить переменную типа Range
для определенного значения, которое находится в ячейке D6
. Это может быть целым числом или строкой, например (зависит от того, что у вас есть в этой ячейке), но это не диапазон.
Я предполагаю, что вы хотите, чтобы значение хранилось в переменной. Попробуйте что-то вроде этого:
Dim MyVariableName As Integer
MyVariableName = ActiveSheet.Range("D6").Value
Это предполагает, что у вас есть число (например, 5) в ячейке D6. Теперь ваша переменная будет иметь значение.
Для простоты обучения вы можете удалить или прокомментировать строку Option Explicit
, и VBA попытается определить тип переменных во время выполнения.
Попробуйте выполнить эту часть кода
Dim envFrmwrkPath As String
Dim ApplicationName As String
Dim TestIterationName As String
Ответ 2
Просто удалите .value
из своего кода.
Set envFrmwrkPath = ActiveSheet.Range("D6").Value
вместо этого используйте:
Set envFrmwrkPath = ActiveSheet.Range("D6")
Ответ 3
У вас есть два варианта,
-If вы хотите значение:
Dim MyValue as Variant ' or string/date/long/...
MyValue = ThisWorkbook.Sheets(1).Range("A1").Value
-If вам нужен объект ячейки:
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