Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

wsQ.Cells erweitern


Betrifft: wsQ.Cells erweitern von: Birgit
Geschrieben am: 19.09.2019 14:20:42

Hallöchen,

wie baue ich das "wsQ.Cells(5, 1).ClearContents" so um, dass von Zelle "A5:A99999" der Inhalt gelöscht wird?

Danke und Gruß
Birgit

  

Betrifft: Sollte einfach so gehen, ... von: 1713909.html
Geschrieben am: 19.09.2019 14:34:19

…Birgit:
wsQ.Cells(5, 1).Resize(99995, 1).ClearContents
Gruß, Luc :-?

„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

  

Betrifft: Vielen Dank :) erledigt ^^ von: 1713910.html
Geschrieben am: 19.09.2019 14:36:38

:)

  

Betrifft: AW: Vielen Dank :) erledigt ^^ von: 1713922.html
Geschrieben am: 19.09.2019 14:46:36

Hallo Birgit,

oder auch so:
With wsQ
   .Range(.Cells(5, 1), .Cells(5, 99995)).ClearContents
End With

Gruß von Luschi
aus klein-Paris

PS: Man sollte sich immer eine 2. Meinung einholen und dann abwägen - aber Luc's Schweizer-Taschen-Messer-Lösung ist wohl unschlagbar!

  

Betrifft: AW: Vielen Dank :) erledigt ^^ von: 1713923.html
Geschrieben am: 19.09.2019 14:54:32

Hallo Luschi,

du hast wohl recht :) Ich habe es eingebaut und es macht was es soll, aaaaaber ...
Wenn ich es hier einbaue

or Each Zelle In rng
If Zelle = "x" Then
letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Next Zelle

dann funktioniert das Makro nicht mehr gänzlich.

Hilfe? :)

  

Betrifft: AW: Vielen Dank :) erledigt ^^ von: 1713928.html
Geschrieben am: 19.09.2019 15:04:25

Hallo Birgit,

damit dann funktioniert das Makro nicht mehr gänzlich wird hier jetzt aber kaum jemand etwas anfangen können.

Kein Mensch weiß, wie du das "eingebaut" hast. Kein Mensch weiß was dann funktioniert das Makro nicht mehr gänzlich bedeutet.

Weiterhin weiß niemand, wie dein ganzer Code eigentlich aussieht, du postest ja wohl nur einen Ausschnitt davon. So weiß z.B. auch niemand wie deine Range "rng" aussieht.

Mir stellt sich jetzt sowieso die Frage, was der Eingangsbeitrag (Leeren eines Zellbereiches in Spalte A) mit dem hier jetzt gezeigten Makro zu tun hat. Spalte A wird da in keinster Weise tangiert.

Zudem würde ich, falls es sich um größere Datenmengen (Zeilen) handelt auf eine Schleife verzichten. In dem Fall würde ich da die entsprechende Spalte nach "x" filtern und das Filterergebnis in einem Rutsch kopieren.

Gruß Werner

  

Betrifft: zweiter Versuch :) von: 1713936.html
Geschrieben am: 19.09.2019 15:34:00

Da hab ich nun aber auf die Finger bekommen ... verständlich, aber schade :)

Ok, das ist das ganze Makro

Private Sub CommandButton1_Click()
             
             Application.ScreenUpdating = False
                     
             Dim wsQ As Worksheet, wsZ As Worksheet
             Dim Zelle As Range, rng As Range
             Set wsQ = ThisWorkbook.Sheets("LWGU 1,5_2554")
             Set wsZ = ThisWorkbook.Sheets("Projektplanung")
             
             Dim letzteQ As Long, letzteZ As Long, zaehler As Long
             letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
             
             
             Set rng = wsQ.Range("A5:A" & letzteQ)
             
             For Each Zelle In rng
                 If Zelle = "x" Then
                     letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
                     wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
                     wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
                     Application.CutCopyMode = False
                 End If
             Next Zelle
             
             End Sub
Funktioniert nicht gänzlich bedeutet: Sobald ich die vorgeschlagene Lösung nach "wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy" einbaue, wird in der ersten Spalte ("A") nach "X" gesucht und gelöscht. Allerdings werden die Zellinhalte ab Zelle B (wie im Makro beschrieben) nicht mehr in die Projektplanung übernommen.

Deshalb sage ich "es macht was es soll.... aber".

Was ich nun benötige innerhalb des aktuellen Makros ist die Aktion "finde das x in der ersten Spalte und lösch es nach dem kopieren raus".

Hoffe es ist nun deutlicher :)

VG
Birgit
  

Betrifft: AW: zweiter Versuch :) von: 1713938.html
Geschrieben am: 19.09.2019 15:41:17

Hallo Birgit,

da die Range ja schon gesetzt ist

Set rng = wsQ.Range("A5:A" & letzteQ)

Kannst du diese am Ende des Makros dann problemlos bereinigen. Du willst ja alle x loeschen. Und das ist ja das einzige was in Spalte A steht.
            Private Sub CommandButton1_Click()
            
            Application.ScreenUpdating = False
                    
            Dim wsQ As Worksheet, wsZ As Worksheet
            Dim Zelle As Range, rng As Range
            Set wsQ = ThisWorkbook.Sheets("LWGU 1,5_2554")
            Set wsZ = ThisWorkbook.Sheets("Projektplanung")
            
            Dim letzteQ As Long, letzteZ As Long, zaehler As Long
            letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
            
            
            Set rng = wsQ.Range("A5:A" & letzteQ)
            
            For Each Zelle In rng
                If Zelle = "x" Then
                    letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
                    wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
                    wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
                    Application.CutCopyMode = False
                End If
            Next Zelle
            
            rng.ClearContents
            
            End Sub
            
Gruss Torsten
  

Betrifft: AW: zweiter Versuch :) von: 1713943.html
Geschrieben am: 19.09.2019 16:05:04

Vielen Dank, hat geklappt.

Wie baue ich es nun ein, dass eventuell vorhandene Filter vor dem löschen des "x" entfernt werden?
Denn aktuell löscht es nur die "x" aus dem sichtbaren Teil der Spalte. Sobald in einer anderen Spalte ein Filter gesetzt wurde, löscht es die "unsichtbaren" x nicht mehr raus.

Danke :)

  

Betrifft: AW: zweiter Versuch :) von: 1714024.html
Geschrieben am: 20.09.2019 08:27:39

Hallo Birgit,

dann so:

          Private Sub CommandButton1_Click()
          
          Application.ScreenUpdating = False
                  
          Dim wsQ As Worksheet, wsZ As Worksheet
          Dim Zelle As Range, rng As Range
          Set wsQ = ThisWorkbook.Sheets("LWGU 1,5_2554")
          Set wsZ = ThisWorkbook.Sheets("Projektplanung")
          
          Dim letzteQ As Long, letzteZ As Long, zaehler As Long
          letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
          
          
          Set rng = wsQ.Range("A5:A" & letzteQ)
          
          For Each Zelle In rng
              If Zelle = "x" Then
                  letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
                  wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
                  wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
                  Application.CutCopyMode = False
              End If
          Next Zelle
          
          If wsQ.FilterMode Then wsQ.ShowAllData
          rng.ClearContents
          
          End Sub
          

Gruss Torsten
  

Betrifft: AW: zweiter Versuch :) von: 1714025.html
Geschrieben am: 20.09.2019 08:33:02

Ich hatte ein bisschen rumgebastelt und habe es so gelöst

Sheets("LWGU 1,5_2554").ShowAllData


Private Sub CommandButton1_Click()
         
         Application.ScreenUpdating = False
         Sheets("LWGU 1,5_2554").ShowAllData
         Dim wsQ As Worksheet, wsZ As Worksheet
         Dim Zelle As Range, rng As Range
         Set wsQ = ThisWorkbook.Sheets("LWGU 1,5_2554")
         Set wsZ = ThisWorkbook.Sheets("Projektplanung")
         
         Dim letzteQ As Long, letzteZ As Long, zaehler As Long
         letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
         
         
         Set rng = wsQ.Range("A5:A" & letzteQ)
         
         For Each Zelle In rng
             If Zelle = "x" Then
                 letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
                 wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
                 wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
                 Application.CutCopyMode = False
             End If
         Next Zelle
         
         rng.ClearContents
         
         End Sub

Gibt es einen signifikanten Unterschied zwischen unseren beiden Lösungen?

Gruß
Birgit
  

Betrifft: AW: zweiter Versuch :) von: 1714029.html
Geschrieben am: 20.09.2019 08:54:55

Hallo Birgit,

ja das ist ok, solange wirklich ein Filter gesetzt ist. Wenn nicht, kommt es zur Fehlermeldung. Deshalb die IF Abfrage bei mir. Erst pruefen, ob Filter gesetzt, wenn ja ausschalten.

Gruss Torsten

  

Betrifft: AW: zweiter Versuch :) von: 1714039.html
Geschrieben am: 20.09.2019 09:43:04

Hallo Torsten,

das macht absolut Sinn ;-)

Mir ist nun folgendes in dem ganzen Prozess aufgefallen.

In dieser Datei kann ich nach verschiedenen Kategorien filtern. Als Beispiel:
- Apfel
- Birne
- Orange
- Zitrone

Der Filter ist vom System her alphabetisch angeordnet.

Nun das Problem mit meinem Makro:
Wenn der Filter auf "Birne" steht, bei "Zitrone" allerdings ein "x" gesetzt wurde, dann kopiert das Makro lediglich von "Apfel" bis "Birne" und ignoriert "Orange" bis "Zitrone".
Setze ich den Filter allerdings auf "Zitrone", dann funktioniert das Makro einwandfrei und kopiert alles beginnend ab "Apfel" ...

Wie kann man das Problem lösen? :)

Gruß
Birgit

  

Betrifft: AW: zweiter Versuch :) von: 1714046.html
Geschrieben am: 20.09.2019 10:09:00

Hallo Birgit,

du hebst doch den Filter (nach deinem Makro) vor dem Kopiervorgang auf. Dann sollte doch alles kopiert werden, oder nicht?

  

Betrifft: AW: zweiter Versuch :) von: 1714056.html
Geschrieben am: 20.09.2019 10:39:51

Hallo Torsten,

nach meinem Makro ja. Allerdings fand ich deinen Einwand äußerst einleuchtend und hab deine Variante verwendet. Und genau da komme ich dann an das beschriebene Problem.

Oder muss ich einfach nur deine Variante weiter nach oben setzen, da wo ich meines hatte?

Tut mir leid wenn ich so Fragen stelle, aber VBA ist für mich noch ein wenig Neuland und ich bin gerade erst dabei zu lernen :)

Gruß
Birgit

  

Betrifft: AW: zweiter Versuch :) von: 1714059.html
Geschrieben am: 20.09.2019 10:56:23

Genau so. Aber du kannst die Variable wsQ verwenden, indem du den Befehl wie ich ihn hatte direkt vor der For Schleife, aber nach dem Setzen der wsQ Variablen, setzt. Also so:

    Private Sub CommandButton1_Click()
    
    Application.ScreenUpdating = False
            
    Dim wsQ As Worksheet, wsZ As Worksheet
    Dim Zelle As Range, rng As Range
    Set wsQ = ThisWorkbook.Sheets("LWGU 1,5_2554")
    Set wsZ = ThisWorkbook.Sheets("Projektplanung")
    
    Dim letzteQ As Long, letzteZ As Long, zaehler As Long
    letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
    
    Set rng = wsQ.Range("A5:A" & letzteQ)
    
    If wsQ.FilterMode Then wsQ.ShowAllData
    For Each Zelle In rng
        If Zelle = "x" Then
            letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
            wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
            wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
            Application.CutCopyMode = False
        End If
    Next Zelle
    
    rng.ClearContents
    
    End Sub
    

  

Betrifft: AW: zweiter Versuch :) von: 1714061.html
Geschrieben am: 20.09.2019 11:11:54

Hallo Torsten,

genau so habe ich es auch umgesetzt. Ich lade mal die Beispieldatei hoch.

Wenn du nun auf "CommandButton1" drückst und in das Blatt Projektplanung wechselst wirst du sehen, dass alles bis "Birne" kopiert wurde, der Rest allerdings nicht.

https://www.herber.de/bbs/user/132129.xlsm

Gruß
Birgit

  

Betrifft: AW: zweiter Versuch :) von: 1714066.html
Geschrieben am: 20.09.2019 11:43:51

OH Mann, wie dusselig. Das Problem ist die Feststellung der letzten benutzten Zeile im Quellsheet. Die habe ich gemacht bevor der Filter aufgehoben wird. Dann ist natuerlich die letzte benutzte Zeile die der sichtbaren Zeilen. Also arbeitet die Schleife auch nur bis zu dieser Zeile. So doof.
Also hier der naechste Versuch. So sollte es funktionieren.
Manchmal ist die falsche Reihenfolge im Code so schwerwiegend.

  Private Sub CommandButton1_Click()
  
  Application.ScreenUpdating = False
          
  Dim wsQ As Worksheet, wsZ As Worksheet
  Dim Zelle As Range, rng As Range
  Set wsQ = ThisWorkbook.Sheets("Obst")
  Set wsZ = ThisWorkbook.Sheets("Projektplanung")
  
  Dim letzteQ As Long, letzteZ As Long
  
  If wsQ.FilterMode Then wsQ.ShowAllData
  letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
  Set rng = wsQ.Range("A5:A" & letzteQ)
  For Each Zelle In rng
      If Zelle = "x" Then
          letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
          wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
          wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
          Application.CutCopyMode = False
      End If
  Next Zelle
  
  rng.ClearContents
  
  End Sub
  

Gruss Torsten
  

Betrifft: AW: zweiter Versuch :) von: 1714069.html
Geschrieben am: 20.09.2019 12:05:58

:-) Top, einfach top.

Herzlichen Dank für deine Mühe und vor allem Geduld :)

  

Betrifft: nochmals ... gerne von: 1714072.html
Geschrieben am: 20.09.2019 12:10:38

schoenes WE

Beiträge aus dem Excel-Forum zum Thema "wsQ.Cells erweitern"