2014-01-26 8 views
8

Я совершенно новый в VBA и кодировании в целом, я пытаюсь получить данные из ячеек из одной и той же книги (получить путь к каркасу ...), а затем запустить приложение (QTP) и запустить тесты.Excel VBA Ошибка выполнения «424» требуется объект

Я получаю эту ошибку при попытке получить значения, введенные в ячейки 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 

ответ

13

Первая строка кода, 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 
+0

Действительно спасибо за быстрый ответ, Я отправил свой вопрос, пытаясь найти все пути: Используемый/неиспользуемый вариант Явно ... пробовал другие выражения; теперь, используя ваше предложение; am getting: Ошибка времени выполнения «13» несоответствие типа ... well, envFrmwrkPath - это путь к структуре QTP, введенный пользователем в excel; Я хочу получить этот путь, затем получить другие файлы/папки многократного использования ... Я добавлю свой файл excel, если это может помочь ... – user3232996

+0

Если ячейка содержит «путь», она будет обрабатываться как строка. Добавление файла будет полезно. Просто отредактируйте исходный вопрос и включите ссылку на свой файл. –

+0

Да, я пробовал со String и был в порядке, теперь получаю другие ошибки, связанные с QTP. Еще раз спасибо за вашу помощь – user3232996

-2
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 
-1

просто удалить .Value из кода "Set envFrmwrkPath = ActiveSheet.Range (" D6 "). Value"

вместо этого использовать это: Set envFrmwrkPath = ActiveSheet.Range ("D6")

Смежные вопросы