Excel VBA Run Time Error ‘424’ object vereist

Ik ben helemaal nieuw in VBA en coderen in het algemeen, ik probeer gegevens uit cellen uit dezelfde werkmap te halen (framepad ophalen …) en vervolgens de toepassing (QTP) te starten en tests uit te voeren.

Ik krijg deze foutmelding wanneer ik probeer waarden op te halen in Excel-cellen:

Run Time Error '424' object required

Ik geloof dat ik enkele basisregels mis, maar ik waardeer je hulp. Zie hieronder het deel van de code in kwestie:

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

Antwoord 1, autoriteit 100%

De eerste coderegel, Option Explicitbetekent (in eenvoudige bewoordingen) dat al uw variabelen expliciet moeten worden gedeclareerddoor Dim-statements . Ze kunnen van elk type zijn, inclusief object, geheel getal, string of zelfs een variant.

Deze regel: Dim envFrmwrkPath As Rangedeclareert de variabele envFrmwrkPathvan het type Range. Dit betekent dat u het alleen op een bereik kunt instellen.

Deze regel: Set envFrmwrkPath = ActiveSheet.Range("D6").Valueprobeert de variabele Rangein te stellen op een specifieke waarde in cel D6. Dit kan bijvoorbeeld een geheel getal of een tekenreeks zijn (afhankelijk van wat je in die cel hebt) maar het is geen bereik.

Ik neem aan dat je de waarde wilt opslaan in een variabele. Probeer zoiets als dit:

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

Hierbij wordt ervan uitgegaan dat je een getal (zoals 5) in cel D6 hebt. Nu heeft je variabele de waarde.

Voor het gemak van leren, kun je de regel Option Explicitverwijderen of becommentariëren en VBA zal proberen het type variabelen tijdens runtime te bepalen.


Probeer dit om door dit deel van je code te komen

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

Antwoord 2, autoriteit 10%

Verwijder eenvoudig de .valueuit uw code.

Set envFrmwrkPath = ActiveSheet.Range("D6").Value

gebruik in plaats hiervan:

Set envFrmwrkPath = ActiveSheet.Range("D6")

Antwoord 3

Je hebt twee opties,

-Als u de waarde wilt:

Dim MyValue as Variant ' or string/date/long/...
MyValue = ThisWorkbook.Sheets(1).Range("A1").Value

-als u het celobject wilt:

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

Antwoord 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

Other episodes