Clever-Excel-Forum

Normale Version: VBA - Richtige Zelle wählen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich stehe vor einem problem und ich weiß nicht warum.

In meiner UF habe ich eine CheckBox, wird diese geklickt, soll im Arbeitsblatt "Workpackage Data" eine bestimmte Zelle grün markiert werden.
Mein Problem ist nun, dass es immer eine andere Zelle mit der Farbe gefüllt wird.

Hier mein Code:

Code:
' Beim aktivieren der Checkbox wird folgendes Makro aktiv:

Private Sub CheckBox1_Click()
    Call ProzCalc                          ' Hier funktioniert alles :)
    If CheckBox1.Value = True Then
        Call Color_Box(3, 12)
    End If
End Sub

' Im Makro Color_Box tritt das Problem auf:
Sub Color_Box(c As Integer, d As Integer)
    Dim Name As String
   Dim a As Integer, b As Integer
    Dim ws As Worksheet

   Name = Watch_Workpackage.WatchLabel
    
    Set ws = Worksheets("Workpackage Data")
    ws.Visible = xlSheetVisible
    ws.Activate

   a = 1
    Do
        If InStr(1, Name, a & "_1") Then
            b = 1
        ElseIf InStr(1, Name, a & "_2") Then
            b = 2
        ElseIf InStr(1, Name, a & "_3") Then
            b = 3
        ElseIf InStr(1, Name, a & "_4") Then
            b = 4
        End If
        a = a + 1
    Loop Until b <> 0
    

    a = 1
    Do
        If InStr(1, Name, "WKA" & a & "_" & b) Then             ' Bei diesem If besteht das Problem nicht
            ws.Columns("A:A").Select
            Set Cell = Selection.Find(What:="WKA" & a & "_" & b, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
            Cell.Select
            PCol = ActiveCell.Column + c
            PRow = ActiveCell.Row + d
            Cell(PRow, PCol).Select
            Cell(PRow, PCol).Interior.Color = RGB(0, 255, 0)
            Exit Do

        ElseIf InStr(1, Name, "WKS" & a & "_" & b) Then          ' Hier tritt das Problem auf.
            Columns("H:H").Select
            Set Cell = Selection.Find(What:="WKS" & a & "_" & b, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
            Cell.Select
            PCol = ActiveCell.Column + c
            PRow = ActiveCell.Row + d
            Cell(PRow, PCol).Select                              ' Hier wird nicht die richtige Zelle ausgewählt.
            Cell(PRow, PCol).Interior.Color = RGB(0, 255, 0)
            Exit Do
       End If
  Loop

End Sub

Geht das Makro durch die If InStr(1, Name, "WKA") dann funktioniert alles einwandfrei und es wird die richtige Zelle ausgewählt.
Geht das Makro aber durch das zweite If, dann wird eine ganz andere Zelle gewählt als die Vorgabe.

Gehe ich das zweite If-Statement mit F8 durch erhalte ich für ActiveCell.Column = 8 und ActiveCell.Row = 1, darauf folgt, dass PCol = 11 und PRow = 15. Im nächsten Schritte bei Cell(PRow, PCol).Select wird die Spalte "R" ausgewählt und nicht Spalte "K", die ja eigentlich den Wert 11 hat.

Die Werte für die UserForm aus dem Arbeitsblatt "Workpackage Date" für z.B. WKS befinden sich in Range("H1:M26"). Die CheckBoxen sollen, bei Aktivierung, die Zellen, in Range("K13:K18) und Range("M13:M18"), grün markieren.

Ich hoffe ich konnte mein Problem einigermaßen verständlich darstellen und jemand kann mir helfen dieses Problem zu lösen.

Danke


EDIT:

Okay, ich hab mittlerweile rausgefunden, da ich die Zelle "H1" markiere, dass diese Zelle dann den Wert Cell(1, 1) hat, daher frage ich mich wie kann ich das ändern, dass es immer von A1 ausgeht?
Dir ist schon klar, dass das ohne Datei eine reine Raterei wird?

Aber analysieren wir doch mal die betreffende Codezeile:
Code:
           PCol = ActiveCell.Column + c
           PRow = ActiveCell.Row + d
Ich kann in deinem ganzen Code nicht erkennen, was c und d sein soll. Also prüf doch einfach, welche Werte diese beiden Variablen annehmen (in den zwei unterschiedlichen Fällen) und du wirst vermutlich die Lösung haben.

BTW: Die ganzen .Select-Anweisungen sind schätzungsweise unnötig.
Hallo,

die Variable c und d sind feste werte ganz am Anfang des codes.

c=3
d =12

Ich würde die Variablen PCol und PRow überprüfen, ob diese auch den gleichen wert wie in der ersten if abfrage haben.

Gruß Flo
Hab jetzt einfach mal Cell(PRow, PCol).Select zu Cells(PRow, PCol) geändert. Scheint zu funktionieren.

Trotzdem vielen Dank für eure Antworten :D
(05.09.2018, 08:08)MisterBurns schrieb: [ -> ]BTW: Die ganzen .Select-Anweisungen sind schätzungsweise unnötig.

Die .Select-Anweisungen habe ich nur im Code, damit ich weiß wo ich mich befinde, wenn ich mit F8 durchgehe ;)