2016-05-13 2 views
2

Im Folgenden ist der Code, an dem ich gearbeitet habe. Ich erkannte jedoch, dass etwas schief ging, wenn ich ein anderes Arbeitsblatt aus demselben Arbeitsbuch auswählte.Die Variable ist nach der Auswahl eines anderen Arbeitsblatts falsch gegangen. VBA

Die Variable ShiftName scheint sich zu ändern, wenn sie im folgenden Code durch Sheets("Cash").Select geht.

Ich glaube, dass die Spalte für ShiftName von "B" des Arbeitsblattes "ShiftRoster" in "C" von "Cash" geändert wurde, was meine Ausgabe für ShiftName falsch war.

Ich würde gerne prüfen, ob es eine Möglichkeit gibt, das zu lösen?

Sub Testing() 
    Sheets("Shift Roster").Select 

    Range("A1").Select 
    Cells.Find("LEAVE").Activate 
    r1 = ActiveCell.Row 

    Dim ShiftRowName As Integer 
    Dim ShiftColName As String: ShiftColName = "B" 
    Dim ShiftColLeave As String: ShiftColLeave = "E" 
    Dim ShiftName As String 
    Dim ShiftReason As String 

    Dim CashRowName As Integer 
    Dim CashColName As String: CashColName = "C" 
    Dim CashColLeave As String: CashColLeave = "H" 
    Dim CashName As String 
    Dim CashLeave As String 

    ShiftRowName = r1 + 1 

    Do While Cells(ShiftRowName, 1) <> "" 
     ShiftName = Cells(ShiftRowName, ShiftColName) 
     ShiftReason = Cells(ShiftRowName, ShiftColLeave) 

     If ShiftName = "" Or IsEmpty(ShiftName) Then 
      Exit Do 
     Else 
      'SOMETHING WENT WRONG FROM HERE ONWARDS 
      Sheets("Cash").Select 

      Range("C1").Select 
      Cells.Find("Name").Activate 
      r2 = ActiveCell.Row 

      CashRowName = r2 + 1 

      Do While Cells(CashRowName, 1) <> "" 
       CashName = Cells(CashRowName, CashColName).Value 

       If CashName = "" Or IsEmpty(CashName) Then 
        Exit Do 
       Else 
        MsgBox ShiftName 
        End If 
       CashRowName = CashRowName + 1 
      Loop 

      End If 
     ShiftRowName = ShiftRowName + 1 
    Loop 

End Sub 
+0

Ja, hör auf 'Select' und die' * .Active ... 'Eigenschaften zu verwenden. Sie sind von Natur aus unzuverlässig und auch langsam. – RBarryYoung

+0

@RBarryYoung was soll ich stattdessen verwenden? – stupidgal

+0

Sie sollten direkte Bereiche verwenden und Ihre Objektinstanzen in Variablen mit 'SET' speichern. – RBarryYoung

Antwort

4

Qualifizieren Ihr Bereich/Zellen Methoden:

statt

ShiftReason = Cells(ShiftRowName, ShiftColLeave) 

Verwendung

ShiftReason = Sheets("Shift Roster").Cells(ShiftRowName, ShiftColLeave) 

so Ihr Code kennt genau, welches Blatt Sie sich beziehen. Ohne die Bereiche zu qualifizieren, wird davon ausgegangen, dass Sie sich auf das Objekt ActiveSheet beziehen.

Verwandte Themen