Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Schleife

Forumthread: VBA: Schleife

VBA: Schleife
20.07.2020 10:16:47
Hris
Hallo Leute,
Ich habe folgende Schleife Programmiert:
lSpa = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
zspa = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For o = 1 To lSpa
If Cells(zspa, o) = "" Then
Columns(o).Select
Selection.EntireColumn.Hidden = True
End If
Next o
Es passiert aber nicht das was soll. Was ich benötige:
Ich hätte gerne, dass er die letzte benutzte Zeile einer Spalte ermittelt und dann diesen bereich kontrolliert, ob er komplett leer ist und wenn ja, dann die spalte ausblendet.
Also zum bleistift:
Spalte A ist von Zeile 2 (Startzeile für überprüfung) bis Zeile 6 Gefüllt. Jetzt wird zeile 2 bis 6 spaltenweise im ganzen überprüft ob alle zeilen dieser Spalte leer sind. Wenn ja dann ausblenden.
Danke im Vorraus
Anzeige

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Schleife
20.07.2020 10:24:44
Hajo_Zi
Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue.Ich baue keine Datei nach.
Sollte die Datei verlinkt werden?
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
änderrn.
Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
Select, Activate usw. ist in VBA zu 99,8% nicht notwendig.
Der Cursor ist kein Hund der überall rumgeführt werden muss.
Hinweise zu select usw. Hajo-Excel.de
Hinweise zu select usw. Online-Excel.de
Hinweise zu select usw. Online-Excel.de
Der Cursor ist kein Hund, der überall rum geführt werden muss.

Anzeige
AW: VBA: Schleife
20.07.2020 10:41:21
Luschi
Mensch Hajo,
hast Du das nötig, Dich hier so bloß zu stellen:
- keine Info zum Problem
- nur bla-bla-bla mit importierten Html-Textbausteinen
Und Deinen Hund solltest Du mal zügeln, wenn es um das Html-Projekt zur Darstellung von 'Excel-Tabellen im Web' geht - da ist doch '.Select' sehr präsent.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA: Schleife
20.07.2020 10:32:11
Luschi
Hallo Hris,
lSpa und zspa repräsentieren je die letzte Spalten-Nr.:
- lSpa von der Zeile 1
- zspa vom gesamten benutzen Bereich (UsedRange)
Diesen Wert setzt Du aber in Cells(zspa, o) ein, doch laut Excel-Vba-Hilfe wird innerhalb von 'Cells' der 1. Wert für die Zeilen-Nr. ausgewertet!
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA: Schleife
20.07.2020 10:37:39
Hris
Hallo Luschi,
du meinst also ich sollte die beiden Tauschen?
AW: VBA: Schleife
20.07.2020 10:49:19
Werner
Hallo,
so richtig eindeutig ist das nicht. Teste mal:
Public Sub Spalten_ausblenden()
Dim loZeile As Long, loSpalte As Long
Dim i As Long, raWeg As Range
With Worksheets("Tabelle1")
loZeile = .Cells(.Rows.Count, "A").End(xlUp).Row
loSpalte = .Cells(2, .Columns.Count).End(xlToLeft).Column
For i = 2 To loSpalte
If WorksheetFunction.CountA(.Range(.Cells(2, i), .Cells(loZeile, i))) = 0 Then
If raWeg Is Nothing Then
Set raWeg = .Cells(1, i)
Else
Set raWeg = Union(raWeg, .Cells(1, i))
End If
End If
Next i
If Not raWeg Is Nothing Then
raWeg.EntireColumn.Hidden = True
End If
End With
Set raWeg = Nothing
End Sub
Gruß Werner
Anzeige
AW: VBA: Schleife
20.07.2020 10:50:58
Luschi
Hallo Hris,
eine kleine, streßfreie Demodatei von Dir mit den wichtigen Indizien wird mehr Aufschluß bringen als rein theoretisch durchgespielte Gedankengänge.
Gruß von Luschi
aus klein-Paris
AW: VBA: Schleife
20.07.2020 11:16:07
Hris
In diesem sehr simpel gehaltenen Beispiel:
Es sind Werte in Spalten Vorhanden. A wird immer Werte beinhalten, kann also als zähler der benutzten Zellen Dienen. Ein paar spalten sind partiell gefüllt und zwei gar nicht. Ich möchte, dass nur die komplett leeren Zeilen ausgeblendet werden. Das ganze darf im original aber erst ab zeile 2 losgehen.
Bisher hatte ich es nur geschafft, dass er die aktuell benutzte Zeile als referenz nimmt und in dieser zeile nach leeren zellen sucht und diese dann ausblendet.
https://www.herber.de/bbs/user/139174.xlsm
Anzeige
AW: VBA: Schleife
20.07.2020 13:05:52
Hris
Hoffe das geht mit diesem Beispiel
AW: VBA: Schleife
20.07.2020 13:47:27
peterk
Hallo

Option Explicit
Sub Ausblenden()
Dim lSpa As Long
Dim zSpa As Long
Dim o As Long
lSpa = ActiveSheet.Cells(2, ActiveSheet.Columns.Count).End(xlToLeft).Column
zSpa = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
With ActiveSheet
For o = 2 To lSpa
If WorksheetFunction.CountA(.Range(.Cells(2, o), .Cells(zSpa, o))) = 0 Then
.Columns(o).EntireColumn.Hidden = True
End If
Next o
End With
End Sub

Anzeige
AW: VBA: Schleife
20.07.2020 14:47:52
Hris
Hallo peterk,
dein Code funktioniert an sich wunderbar. Seltsamerweise macht er in der originaldatei nur fast alle leeren Spalten weg. Ein teil bleibt stehen. Ich hab nachgeschaut und keine formeln oder dergleichen drin gefunden. Hast du sonst noch eine erklärung dafür?
AW: VBA: Schleife
20.07.2020 14:59:48
peterk
Hallo
Vielleicht ist ein Leerzeichen enthalten. Markiere die Spalte, STRG-F, "Suche Nach" gib ein Leerzeichen ein ...
Anzeige
AW: VBA: Schleife
20.07.2020 15:06:05
Hris
Gute idee war es aber leider nicht. Ich Kopiere A1:AZ1 worin manche leere enthalten sind. Kann es daran liegen?
das Problem hättest du...
20.07.2020 15:12:12
Werner
Hallo,
...mit meinem Code wahrscheinlich nicht, aber der interressiert dich ja nicht.
Gruß Werner
AW: das Problem hättest du...
20.07.2020 15:15:34
Hris
Hi Werner, stimmt dir hatte ich ganz vergessen zu antworten. Bei deinem Code kamen reihenweise objektfehler und so. Habs nicht auseinanderklamüsert bekommen woran es lag. Dein ansatz war aber auch sehr interessant. einige elemente konnte ich anderer Stelle gut verwenden. Danke dafür
Anzeige
Korrektur
20.07.2020 17:30:05
Werner
Hallo,
diese Aussage muss ich zurückziehen.
Warum auch immer hatte ich da plötzlich das Löschen der Spalten und die Problematik, dass dann die Schleife rückwärts laufen muss, auf dem Schirm - keine Ahnung warum.
Es geht ja aber um das Ausblenden von Spalten und dann hat das damit mal sowas von gar nichts zu tun.
@peterk: Und das hättest du dann auch entsprechend angepasst.
Ich vermute, wie du wohl auch, irgendwelche versteckte Steuerzeichen in den Spalten.
Gruß Werner
Anzeige
AW: VBA: Schleife
20.07.2020 15:14:52
peterk
Hallo
Kopiere deine "leere" Spalte in ein neues Excel-File und lade es hoch.
Peter
AW: VBA: Schleife
20.07.2020 15:20:59
Hris
Die spalten bleiben stehen, obwohl sie sich nicht von anderen die geschlossen wurden unterscheiden. Also augenscheinlich :)
Anzeige
AW: VBA: Schleife
20.07.2020 15:33:30
peterk
Hallo
In Deiner Beispielmappe ist nicht mein Code!
Bitte die Zeile:
lSpa = ActiveSheet.Cells(2, ActiveSheet.Columns.Count).End(xlToLeft).Column
auf
lSpa = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column
ändern
AW: VBA: Schleife
20.07.2020 15:37:22
Hris
Hat am ausgang leider nichts verändert
Anzeige
AW: VBA: Schleife
20.07.2020 15:39:34
peterk
Hallo
Kannst Du mir eine augenscheinlich leere Spalte schicken?
AW: VBA: Schleife
20.07.2020 15:42:12
Hris
Ich glaube ich verstehe nicht richtig. Soll ich die nochmal die Spalte kopieren und zuschicken?
AW: VBA: Schleife
20.07.2020 15:44:46
Werner
Hallo,
ach ja, und welche Fehler denn?
Nur mal so am Rande:
Deine erste Beispielmappe hat nicht wirklich viel mit der jetzt hochgeladenen Mappe zu tun. Mein Code kann nicht funktionieren, da (anhand deiner ersten Beispielmappe) die letzte belegte Spalte in Zeile 2 ermittelt wird.
In deiner jetzigen Mappe sind aber in Zeile 1 Überschriften und ansonsten ist alles leer. Also muss die letzte belegte Spalte in Zeile 1 ermittelt werden und nicht in Zeile 2.
Public Sub Spalten_ausblenden()
Dim loZeile As Long, loSpalte As Long
Dim i As Long, raWeg As Range
With Worksheets("Tabelle1")
loZeile = .Cells(.Rows.Count, "A").End(xlUp).Row
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Column
For i = 2 To loSpalte
If WorksheetFunction.CountA(.Range(.Cells(2, i), .Cells(loZeile, i))) = 0 Then
If raWeg Is Nothing Then
Set raWeg = .Cells(1, i)
Else
Set raWeg = Union(raWeg, .Cells(1, i))
End If
End If
Next i
If Not raWeg Is Nothing Then
raWeg.EntireColumn.Hidden = True
End If
End With
Set raWeg = Nothing
End Sub
Gruß Werner
Anzeige
AW: VBA: Schleife
21.07.2020 06:33:23
Hris
Ah das erklärt es doch. deswegen hat er die nicht verdeckt. ok danke dir
Gerne u. Danke für die Rückmeldung und..
21.07.2020 09:58:21
Werner
Hallo,
...zukünftig einen Beitrag, der gelöst ist, nicht auf offen, also ungelöst, setzen.
Gruß Werner
AW: VBA: Schleife
20.07.2020 13:54:06
Werner
Hallo,
du solltest vielleicht einfach mal alle Beiträge lesen.
Gruß Werner
Anzeige
AW: VBA: Schleife
20.07.2020 22:34:36
GerdL
Moin
Sub Unit()
Dim C As Range, X As Range
Application.ScreenUpdating = False
For Each C In Cells(1, 1).CurrentRegion.Columns
If WorksheetFunction.CountA(C) 

Gruß Gerd
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige