Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - Richtige Zelle wählen
#1
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?
Antworten Top
#2
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.
Schöne Grüße
Berni
Antworten Top
#3
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
Live is a Game Play it
Antworten Top
#4
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
Antworten Top
#5
(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 ;)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste