2017-05-14 4 views
2

Ich bin neu in VBA, also lerne ich. Ich habe Mühe zu verstehen, warum dies in Excel 2016 scheitert und meine Forschung ist leer. Ich habe den folgenden Codevba: Variable nicht definiert in activeCell

Option Explicit 

Sub Range_End_Method() 

Dim lRow As Long 
Dim lCol As Long 
Dim i As Integer 
Dim rng As Range 

Set rng = ActiveCell 

lRow = Cells(Rows.Count, 1).End(xlUp).Row 

lCol = Cells(1, Columns.Count).End(xlToLeft).Column 

    Do While rng.Value <> Empty 
     If InStr(rng.Value, "Petrol") = 0 Then 
      currentRow = ActiveCell.Row 
      Worksheets("MySheet").Cells(currentRow, 5) = "Shopping" 
      Set rng = rng.Offset(1) 
      rng.Select 
     Else 
      currentRow = ActiveCell.Row 
      Worksheets("MySheet").Cells(currentRow, 9) = "Not Found" 
      Set rng = rng.Offset(1) 
      rng.Select 
     End If 
    Loop 

End Sub 

Wenn ich den VBA-Editor öffnen und geben Sie diese in eine „Microsoft Excel-Objekte“ Blatt Ich habe keinen Fehler. Aber wenn ich laufe als „Module“ Benennung meines Modul als „m_End“ Ich erhalte eine Fehlermeldung geworfen sagen

Compile Error 

Variable not defined 

Die Variablen es in VBA-Editor hebt sind „currentRow“ von der Linie in der ersten „Wenn Bedingung ":

currentRow = ActiveCell.Row 

Ich verstehe nicht, was der Unterschied ist und wie man den Fehler beheben kann.

Jede Hilfe wäre willkommen.

+0

Sie fehlen eine *** Sub *** -Anweisung am Anfang Ihres Codes. –

+0

Am Anfang Ihres Codes sollten Sie 'Option Explicit' gefolgt von' Sub yourSubName() 'haben. In diesem Fall deklariert man 'currentRow' nie als Variable. Wenn Sie zu Beginn nicht 'Option Explicit' haben, gehen Sie zu' Extras ► Optionen ► Editor ► Code-Einstellungen' und wählen Sie 'Variablendeklaration anfordern'. Dadurch sparen Sie viel Zeit in der Zukunft. Vielleicht hatten Sie in Ihrem Blattmodul nicht die Option Explicit. –

+0

Entschuldigung, ich habe gerade meinen Code bearbeitet - ich habe versehentlich vergessen, die Option und die Unteranweisungen zu kopieren. Sie waren auch beim Ausführen des Codes dabei. Das gab immer noch den gleichen Fehler. Wie soll ich die Variable deklarieren? Danke – Dan

Antwort

2

Da Sie den Rest Ihres Codes gebucht haben, liegt dieser Fehler eindeutig darin, dass Sie currentRow in Ihren Dim Anweisungen nicht deklariert haben. Möglicherweise war option Explicit nicht in Ihrem Blattmodul, also kein Fehler.

In jedem Fall, gehen Sie zu und wählen Sie Require Variable Declaration Es wird Ihnen viel Debugging-Zeit in der Zukunft sparen. Vielleicht in Ihrem Blatt Modul Sie haben nicht Option Explicit

Ich würde erklären ihn als Long

Oh, und in VBA gibt es keinen Vorteil (und es gibt einige Nachteile), um einen Datentyp als Integer deklarieren. Sie werden trotzdem intern zu Longs konvertiert; und die Werte, die zugewiesen werden können, sind begrenzt. Überprüfen Sie die VBA-Spezifikationen für Datentypen für die verschiedenen Grenzwerte.

+0

Großartig, das hat es geschafft. Ich habe gerade überprüft und Sie haben Recht, mein anderer Code hatte nicht die Option "Explicit". Ich habe gerade deklariert, wie du erwähnt hast und es funktioniert !!! Obwohl die Felder nicht festgelegt werden, werde ich versuchen, das zu debuggen. Vielen Dank – Dan