Ошибка времени выполнения 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