Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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
VBA CommandButton Zeilen ausblenden
30.08.2023 17:09:47
DnlSfr
Hallo,

ich habe ein kleines Problem. Ich habe eine Excel-Datei mit einem Tabellenblatt. Das Tabellenblatt habe ich "Kosten" genannt.
In dieser Tabelle sind nun in Spalte "C" einige Daten drin (überwiegend Zahlen). Ich würde gerne alle Zeilen, welche in Spalte "C" die Anzahl "0" enthalten, mit einem Klick auf den CommandButton ausblenden lassen. Bei einem weiteren Klick sollen sie wieder sichtbar werden. Ich habe die Tabelle stark eingekürzt. Theoretisch gehen diese befüllten Zeilen/Spalten bis knapp Zeile 150.

Im Reiter Entwicklertools habe ich bereits ein ActiveX-Steuerelement hinzugefügt. Das Steuerelement habe ich unter den Eigenschaften unter Caption "Ausblenden" genannt.
Allerdings hört es hier schon bei mir auf. Ich habe bisher NIE mit VBA zu tun gehabt aber würde dies gerne ein wenig beherrschen. Der Sinn dahinter? Vor dem Druck der Tabelle würde ich gerne die unnötigen Nullzeilen ausblenden um die Tabelle bzw. das Ergebnis übersichtlicher zu haben.

Kann mir hier vielleichtjemand eine Hilfestellung oder ein paar nützliche Tipps geben?

Vorab vielen Dank
DnlSfr

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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA CommandButton Zeilen ausblenden
30.08.2023 17:22:04
daniel
Hi
für nen Anfänger erstmal das hier:

https://online-excel.de/excel/grusel_vba.php?f=6

wenn du keine Ahnung vom Programmieren hast, solltest du dir immer zuerst überlegen: wie löse ich die aufgabe ohne VBA mit Excel und dann programmiert man diesen Weg nach. Wenn du viele Excelmenüfunktionen nutzt, dann kannst du häufig den Makrorecorder verwenden.

in dem Fall würde ich einfach in Spalte C mit dem Autofilter nach "ungleich 0" filtern.

das gibt dann diesen Code, den du bei deinem Button einfügst:

Columns(3).Autofilter Field:=1, Criteria1:=">0"


Gruß Daniel
Anzeige
AW: VBA CommandButton Zeilen ausblenden
30.08.2023 17:52:41
Oberschlumpf
Hi,

hier auch noch meine Idee, probier mal
https://www.herber.de/bbs/user/162596.xlsm

Kleine "Besonderheit" bei mir:
Wenn auf dem Button "Ausblenden" steht, werden alle 0-Zeilen ausgeblendet, UND auf dem Button steht "Einblenden".
Ein erneuter Klick auf dem Button blendet wieder alle Zeilen ein, UND ändert wieder das, was auf dem Button zu lesen ist.

Hilfts?

Ciao
Thorsten
VBA CommandButton Zeilen ausblenden
30.08.2023 18:19:51
daniel
warum einfach, wenns auch komplizert geht.
das gleiche über Autofilter.

Private Sub CommandButton1_Click()

With Columns(3)
If .Cells.Count = .SpecialCells(xlCellTypeVisible).Cells.Count Then
.AutoFilter field:=1, Criteria1:=">0", visibledropdown:=False
CommandButton1.Caption = "Einblenden"
Else
.AutoFilter
CommandButton1.Caption = "Ausblenden"
End If
End With
End Sub
Anzeige
VBA CommandButton Zeilen ausblenden
31.08.2023 15:55:18
DnlSfr
@Oberschlumpf
Ich muss mich korrigieren. Es funktionieren nicht alle vier Varianten einwandfrei. Deine Variante (ich nenne Sie Variante 3) hat folgenden Fehler.
Wenn irgendwo in Spalte "C" eine Zahl wie z.B. "0,25" oder "0,75" bzw. "10" oder "30" oder gar "1056974" eingetragen ist, dann wird er auch diese Zeilen ausblenden!
Das betrifft also alles was irgendwo eine Null enthält. Das wollte ich dir nur mitteilen! Ich nutze aktuell die Variante 4 für die Tabelle.

Gruß
Daniel
VBA CommandButton Zeilen ausblenden
31.08.2023 16:12:27
daniel
Hi
das Problem ist hier die unzureichende Programmierung.
Thorsten nutzt um die Zeilen mit 0 zu finden, die Menüfunktion SUCHEN, in VBA dann FIND, und zwar in dieser Zeile:
 Set lrgFind = .Range("C:C").Find(0)

es fällt auf, dass er hier nur den Suchwert 0 angibt, aber keine weiteren Parameter, und jeder der in Excel schon mal die Menüfunktion SUCHEN verwendet hat, weiß dass man bei dieser Funktion noch eine ganze reihe weiterer Einstellungen machen kann, die dann das Suchergebnis beeinflussen, beispielsweise die Option "Gesamten Zellinhalt vergleichen", wenn diese angehakt ist, dann dann wird eine Zelle nur gefunden, wenn der Inhalt extakt "0" ist, ist der Haken nicht gesetzt, dann werden auch Zellen gefunden, die "0" an irgendeiner Stelle enthalten.
wie du siehst, ist diese Einstellung wichtig und offentsichtlich für dein Problem die Ursache.
wenn man jetzt in VBA diesen Parameter nicht explizit angibt, dann verwendet Excel die zuletzt gemachte Einstellung. Daher kann es sein, das Thorsten beim Testen dieser Fehler nicht aufgefallen ist.

aber um sicher zu gehen, sollte man die Parameter in VBA auch angeben, zumindest soweit sie notwendig sind.
in deinem Fall wäre das:
 Set lrgFind = .Range("C:C").Find(What:="0", LookAt:=xlwhole)

wie man sowas rausfindet:
Verwende den Makrorecorder um herauszufinden wie man Excelmenüfunktionen in VBA programmiert.

Gruß Daniel
Anzeige
Variante 3.1
31.08.2023 16:40:39
GerdL
Hallo
Option Explicit


Sub sbYesNo(ByVal ausein As String)

Dim lloRow As Long
Dim lrgFind As Range, lstrFirstAdr As String

With Sheets("Kosten") 'wenn Blattname im Original anders, dann hier anpassen
'wenn auf dem Button "Ausblenden" zu lesen ist...
If ausein = "Ausblenden" Then
'...wird "Ausblenden" in "Einblenden" geändert
.CommandButton1.Caption = "Einblenden"
'...in Spalte C wird nach dem Wert 0 gesucht
Set lrgFind = .Range("C:C").Find(0, LookIn:=xlFormulas, lookat:=xlWhole)
If Not lrgFind Is Nothing Then
lstrFirstAdr = lrgFind.Address
Do
'...alle Zeilen mit Wert 0 in C werden hier ausgeblendet
.Rows(lrgFind.Row).EntireRow.Hidden = True
Set lrgFind = .Range("C:C").FindNext(lrgFind)
If lrgFind Is Nothing Then Exit Do
Loop While lrgFind.Address > lstrFirstAdr
End If
'wenn auf dem Button NICHT "Ausblenden" zu lesen ist
Else
'...wird auf dem Button wieder "Ausblenden" zu lesen sein
.CommandButton1.Caption = "Ausblenden"
'...und alle ausgeblendeten Zeilen werden wieder eingeblendet
.Rows("5:" & .Cells(.Rows.Count, 8).End(xlUp).Row).EntireRow.Hidden = False
End If
End With

Set lrgFind = Nothing

End Sub

Gruß Gerd
Anzeige
VBA CommandButton Zeilen ausblenden
31.08.2023 14:33:33
DnlSfr
Also gehen tun natürlich alle vier Varianten.
Variante 1 blendet natürlich nur aus und man muss dann selbst wieder einblenden. Da sind die anderen drei Varianten schon komfortabler. Besonders gut gefällt mir, dass sich der Text des Buttons je nach Zustand ändert! Ich verstehe allerdings nicht wie und warum das nun funktioniert. Ich muss mich hier also definitiv genauer mit VBA und der "Sprache" beschäftigen. Ich würde mir solche Dinge nämlich künftig gerne selbst erarbeiten können... Ich will das verstehen und nicht nur Anwender sein.
Aber hierfür wurde weiter oben ja bereits eine informative Quelle genannt.

Vielen Dank nochmal für eure Hilfe!
Anzeige
AW: VBA CommandButton Zeilen ausblenden
30.08.2023 17:25:40
GerdL
Moin
Private Sub CommandButton1_Click()


Dim C As Range

For Each C In Range("C6:C149").Cells

If C.Text = "0" Then C.EntireRow.Hidden = Not C.EntireRow.Hidden

Next

End Sub

Gruß Gerd

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige