Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Wenn Spalte A leer, dann... (VBA)
26.04.2023 08:45:22
KKeller

Hallo in die Runde,

Ich möchte in zwei Bereichen A9:M36 & A41:M67 dass, wenn Spalte A leer ist (bzw. geleert wird) die Spalten D & M ebenfalls geleert werden und in den Spalten E:L "¨" eingetragen wird. ("¨" = leeres Kästchen in Wingdings).

Ich habe es mit folgenden Code probiert:
(allerdings erstmal nur mein Vorhaben für E:L, als kleine Anmerkung: A:C sind verbundene Zellen)


Dim rngZelle As Range
If Not Intersect(Target, Range("A9:A36")) Is Nothing Then
If Target.Cells(1) = "" Then
For Each rngZelle In Intersect(Target, Range("A9:A36"))
Union(Range(Cells(rngZelle.Row, 5), Cells(rngZelle.Row, 6)), Cells(rngZelle.Row, 7), Cells(rngZelle.Row, 8), Cells(rngZelle.Row, 9), Cells(rngZelle.Row, 11), Cells(rngZelle.Row, 12)).Value = "¨"
Next rngZelle
End If
End If
End Sub


Das klappt soweit eigentlich auch schon...
Jedoch ändert sich die Zellen E:L erst, wenn ich in die leere Spalte A nach dem Löschen abwähle und wieder anklicke.

Ich wäre für eure Hilfe sehr dankbar...

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
zeig bitte mal die 1. Zeile des Subs (owT)
26.04.2023 08:46:52
Pierre


AW: zeig bitte mal die 1. Zeile des Subs (owT)
26.04.2023 08:49:46
KKeller
Sorry, ein Kopierfehler...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngZelle As Range
If Not Intersect(Target, Range("A9:A36")) Is Nothing Then
If Target.Cells(1) = "" Then
For Each rngZelle In Intersect(Target, Range("A9:A36"))
Union(Range(Cells(rngZelle.Row, 5), Cells(rngZelle.Row, 6)), Cells(rngZelle.Row, 7), Cells(rngZelle.Row, 8), Cells(rngZelle.Row, 9), Cells(rngZelle.Row, 11), Cells(rngZelle.Row, 12)).Value = "¨"
Next rngZelle
End If
End If
End Sub


AW Change.
26.04.2023 09:27:18
hary
Moin
Nimm Change.
Private Sub Worksheet_Change(ByVal Target As Range)
gruss hary


Anzeige
AW: AW Change.
26.04.2023 09:30:52
KKeller
Ja, so klappt das... Danke schonmal. 🙂
Wie kann ich jetzt noch ergänzen, dass dazu noch D & M geleert werden? Da komm ich wirklich überhaupt nicht weiter...


AW: AW Change.
26.04.2023 09:46:30
hary
Moin
Mit Resize spart man Schreibarbeit. ;-) Erweitert die Zelle um Zeile(1 = gleich Zeile) und Anzahl der Spalten.
Bei Resize faengt der Bereich immer incl. der ersten Zelle an.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range
  If Not Intersect(Target, Range("A9:A36")) Is Nothing Then
    If Target.Cells(1) = "" Then
      For Each rngZelle In Intersect(Target, Range("A9:A36"))
        Cells(rngZelle.Row, 5).Resize(, 1, 8).Value = "¨"
        Cells(rngZelle.Row, 4).ClearContents
        Cells(rngZelle.Row, 13).ClearContents
      Next rngZelle
    End If
  End If
End Sub
gruss hary


Anzeige
AW: Korrektur
26.04.2023 09:52:26
hary
Moin nochemal
Da hat sich ein Komma eingeschlichen.
Resize(, 1, 8)
bitte aendern in:
Resize(1, 8)
Erste Komma entfernen.
gruss hary


AW: Korrektur
26.04.2023 09:56:08
KKeller
Das hatte ich schon gefunden, aber trotzdem danke. 😉


AW: AW Change.
26.04.2023 09:55:10
KKeller
Mega... so klappt das... zumindest fast 😅 Bei Spalte M
Cells(rngZelle.Row, 13).ClearContents
meckert er noch, da M:O auch verbundene Zellen sind und daher nicht möglich. Kannst du mir da bitte noch kurz helfen?

Und wie kann ich bei
If Not Intersect(Target, Range("A9:A36")) Is Nothing Then
noch einen zweiten Bereich (A41:A67) auswählen?


Anzeige
AW: AW Change.
26.04.2023 10:26:17
hary
Moin
Cells(rngZelle.Row, 13).Resize(1, 3).ClearContents
und
 If Not Intersect(Target, Range("A9:A36,A41:A67"))
gruss hary


AW: AW Change.
26.04.2023 11:53:28
KKeller
Traumhaft!

Funktioniert einwandfrei... 😎👌

Jetzt hab ich noch was. (Ich weiß... kleiner Finger, ganze Hand... tut mir leid 😂)
Ich möchte gerne noch, dass wenn A beschrieben ist und D noch leer ist, in D "K?" geschrieben wird.
Könntest du mir da bitte noch kurz helfen. 😊


AW: AW Change.noch weiter optimiert
26.04.2023 11:55:35
Daniel
Hi
und mit Union und Intersect kann man noch mehr Schreibarbeit und vor allem die Schleife sparen:
außerdem gehst schneller, wenn man Zellen im Block und nicht einzeln berabeitet
Weiterhin sollte man noch die Events ausschalten, damit das Makro sich nicht selber aufruft.
Die endlosschleife wird zwar durch die Prüfung verhindert, aber so ist es besser:

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngBereich As Range
    Set rngBereich = Range("A9:A36,A41:A67")
      If Not Intersect(Target, Bereich) Is Nothing Then
        If Target.Cells(1) = "" Then
          Application.EnableEvents = False
          With Intersect(rngBereich, Target)
              Intersect(.EntireRow, Range("D:D,M:M")).ClearContents
              Intersect(.EntireRow, Range("E:I",K:L")).Value = "¨"
          End with
          Application.EnableEvents = True
        End If
      End If
    End Sub
Gruß Daniel


Anzeige
AW: AW Change.noch weiter optimiert
26.04.2023 13:47:22
KKeller
Ja, so geht es auch... danke.

Musste es nur noch ein bisschen anpassen, da er sonst einen Fehler ausgegeben hat:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
    Set rngBereich = Range("A9:A36,A41:A67")
      If Not Intersect(Target, rngBereich) Is Nothing Then 'hier
        If Target.Cells(1) = "" Then
          Application.EnableEvents = False
          With Intersect(rngBereich, Target)
              Intersect(.EntireRow, Range("D:D")).ClearContents 'hier
              Intersect(.EntireRow, Range("M:O")).ClearContents 'hier
              Intersect(.EntireRow, Range("E:L")).Value = "¨" 'und hier
          End With
          Application.EnableEvents = True
        End If
      End If
End Sub
Habe noch folgendes Vorhaben...
Ich möchte gerne noch, dass wenn A beschrieben ist und D noch leer ist, in D "K?" geschrieben wird.
Könntest du mir da bitte noch kurz weiterhelfen. 🙂


Anzeige
AW: Wenn Spalte A leer, dann... (VBA)
26.04.2023 17:42:59
GerdL
Hallo,
probier mal.

Private Sub Worksheet_Change(ByVal Target As Range)

      Dim rngBereich As Range
    
      Set rngBereich = Range("A9:A36,A41:A67")
      If Not Intersect(Target, rngBereich) Is Nothing Then 'hier
        Application.EnableEvents = False
        If Target.Cells(1) > "" Then
           If Cells(Target.Row, "D") = "" Then
              Cells(Target.Row, "D") = "K?"
           End If
       ElseIf Target.Cells(1) = "" Then
           With Intersect(rngBereich, Target)
              Intersect(.EntireRow, Range("D:D")).ClearContents 'hier
              Intersect(.EntireRow, Range("M:O")).ClearContents 'hier
              Intersect(.EntireRow, Range("E:L")).Value = "¨" 'und hier
           End With
          
        End If
        Application.EnableEvents = True
      End If
End Sub
Wie erzeugst du die Pünktchen für E:L auf der Tastatur?

Gruß Gerd


Anzeige
AW: Wenn Spalte A leer, dann... (VBA)
27.04.2023 15:47:23
KKeller
Vielen Dank... so funktioniert das! 😉

Ich habe meine eigenen Checkboxen simuliert... da die Anzahl meiner Steuerelemente zu hoch war und die Tabelle somit viel zu langsam.
Die Pünktchen stehen schon drin und werden durch Mausklick auf die Zelle gesetzt bzw. geändert.

Hier mal mein ganzer Code:

Private Sub Worksheet_Activate()
Range("E4").Select
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then
ActiveCell.Select
Else
If Not Intersect(Target, Range("E9:L36,E41:L67")) Is Nothing Then
Target.Value = IIf(Target.Value = "ý", "¨", "ý")
Cancel = True
Cells(ActiveCell.Row, 1).Select
End If
End If

If Range("E4").Value = "" Then
Range("E4").Value = "'-Bitte eingeben!-"
End If
If Range("E5").Value = "" Then
Range("E5").Value = "'-Bitte auswählen!-"
End If

Dim rngBereich As Range
    
      Set rngBereich = Range("A9:A36,A41:A67")
      If Not Intersect(Target, rngBereich) Is Nothing Then
        Application.EnableEvents = False
        If Target.Cells(1) > "" Then
           If Cells(Target.Row, "D") = "" Then
              Cells(Target.Row, "D") = "K?"
           End If
       ElseIf Target.Cells(1) = "" Then
           With Intersect(rngBereich, Target)
              Intersect(.EntireRow, Range("D:D")).ClearContents
              Intersect(.EntireRow, Range("M:O")).ClearContents
              Intersect(.EntireRow, Range("E:L")).Value = "¨"
           End With
          
        End If
        Application.EnableEvents = True
      End If
  
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rngBereich As Range
    
      Set rngBereich = Range("A9:A36,A41:A67")
      If Not Intersect(Target, rngBereich) Is Nothing Then
        Application.EnableEvents = False
        If Target.Cells(1) > "" Then
           If Cells(Target.Row, "D") = "" Then
              Cells(Target.Row, "D") = "K?"
           End If
       ElseIf Target.Cells(1) = "" Then
           With Intersect(rngBereich, Target)
              Intersect(.EntireRow, Range("D:D")).ClearContents
              Intersect(.EntireRow, Range("M:O")).ClearContents
              Intersect(.EntireRow, Range("E:L")).Value = "¨"
           End With
          
        End If
        Application.EnableEvents = True
      End If
      
    If Target.Address = "$E$4" Then
      MsgBox "Bitte Schicht auswählen!", vbOKOnly, "Info"
      Range("E5").Select
    End If
    If Target.Address = "$E$5" Then
      Range("A9").Select
    End If
    
End Sub
Sicherlich noch nicht ganz perfekt... aber so zumindest ausreichend. 😁
Wenn Interesse besteht kann ich auch mal die File uploaden.

Anzeige

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige