Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Leere Zellen durch Tastenkombination löschen

VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 12:09:13
marc4791
Userbild
Hallo liebe Helfende!
Ich bin Neuling in VBA und versuche mal mein Problem verständlich zu beschreiben.
Ich muss eine xlsm-Datei neu machen, weil die alte total zerschossen war.
Es soll eine Auswahl von Mitarbeitern für verschiedene Kurse über ein Drop-down-Menü erfolgen.
Also, ich wähle einen Kurs an, und aus der Liste der Mitarbeiter werden diejenigen ausgesucht, bei denen der Kurs angegeben wurde.
Es gibt 11 Kurse, in jedem sind andere Mitarbeiter und das Blatt soll für den Kurs-Leiter ohne Leerzeilen zwischen den Namen ausgedruckt werden. Hab mal ein Bild angehängt - Namen sind geschwärzt (Datenschutz usw.)
Nun habe ich die Ziel-Tabelle, in der in 4 Spalten (= 4 Arbeitsbereiche) die Namen der Mitarbeiter automatisch eingefügt werden.
Da die Quell-Tabelle 100 Zeilen umfasst (und NICHT geändert werden darf), aber nur ca 40 Mitarbeiter vorhanden sind, gibt es in der Ziel-Tabelle viele Leerzellen.
Die Ziel-Tabelle konnte in der alten Datei (2002 erstellt) durch drücken von Strg+O bereinigt werden, heißt, alle Mitarbeiter wurden untereinander sortiert und dann erst die Leerzellen. Also erst Name - frei - frei - Name - frei, dann Name - Name - frei - frei - frei.
Den Code habe ich aus der alten Datei kopiert (siehe unten) - und funktioniert nicht in der neuen. Im MS VBA-Editor komme ich über "Debuggen" - "Ausführen bis Cursor-Position" zwar an mein Ziel, ist aber nicht Sinn und Zweck.
Quasi sollen alle schwarzen Felder untereinander stehen und dann die Leerzeilen (wie in Spalte "LL KV BF")
Ich hoffe, es verständlich 'rüber gebracht zu haben.
Sub Makro3()
' Makro3 Makro
' Namen sortieren
' Tastenkombination: Strg+o
Range("D14:D33").Select
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Add Key:=Range( _
"D14"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Kurszettel").Sort
.SetRange Range("D14:D33")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("E14:E33").Select
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Add Key:=Range( _
"E14"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Kurszettel").Sort
.SetRange Range("E14:E33")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("F14:F33").Select
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Add Key:=Range( _
"F14"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Kurszettel").Sort
.SetRange Range("F14:F33")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("G14:G33").Select
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Add Key:=Range( _
"G14"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Kurszettel").Sort
.SetRange Range("G14:G33")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("H14:H33").Select
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Kurszettel").Sort.SortFields.Add Key:=Range( _
"H14"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Kurszettel").Sort
.SetRange Range("H14:H33")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 12:38:12
Werner
Hallo Marc,
du solltest vielleicht schon hier mitteilen, dass du auch noch in anderen Foren mit dem gleichen Thema unterwegs bist.
Sub Makro3()
'Tastenkombination Str+o
With Worksheets("Kurszettel")
If WorksheetFunction.CountA(.Range("D14:H33")) > 0 Then
.Range("D14:H33").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
End If
End With
End Sub
Makro in ein allgemeines Modul.
Dann in deinem Tabelleblatt auf den Menüpunkt Makros - Makro3 auswählen - Optionen - Tastenkombination vergeben.
Gruß Werner
AW: VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 20:05:19
marc4791
Userbild
Hallo Werner,
danke für deine Hilfe, aber es funktioniert noch nicht.
Fehlermeldung nach drücken von strg+o:
"Laufzeitfehler 1004
Keine Zellen gefunden"
Ich versteh's nicht...
Anzeige
AW: VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 20:19:56
Werner
Hallo Marc,
ändere bitte von > 0 auf > 1
If WorksheetFunction.CountA(.Range("D14:H33")) > 1 Then
Gruß Werner
AW: VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 20:25:18
Gerd
Moi Marc,
du hättest wegen des Flüchtigkeitsfehlers mal übersetzen können. :-)
Sub Makro4()
'Tastenkombination Str+o
Dim R As Range
Set R = Worksheets("Kurszettel").Range("D14:H33")
If WorksheetFunction.CountBlank(R) > 0 Then _
R.SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
Set R = Nothing
End Sub
Gruß Gerd
AW: VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 20:52:32
Werner
Hallo Marc,
eine Ergänzung wegen den Rahmen.
Sub Makro3()
'Tastenkombination Str+o
Application.ScreenUpdating = False
With Worksheets("Kurszettel")
If WorksheetFunction.CountA(.Range("D14:H33")) > 1 Then
.Range("D14:H33").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
End If
With .Range("D14:H33")
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
End With
End With
End Sub
Gruß Werner
Anzeige
Crossposting
05.11.2018 12:53:03
SF
Hola,
zur Info...
https://ms-office-forum.net/forum/showthread.php?t=355493
Gruß,
steve1da
AW: VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 22:05:36
marc4791
Userbild
Hallo Werner,
es funktioniert immer noch nicht.
Weiß auch nicht, ob ich die Codes richtig eingesetzt habe.
Kann ich für beide die gleiche Tastenkombi einsetzen?
AW: VBA - Leere Zellen durch Tastenkombination löschen
05.11.2018 22:13:53
Werner
Hallo Marc,
keine Ahnung was du machst. Laden mal deine Mappe hoch.
Gruß Werner
AW: VBA - Leere Zellen durch Tastenkombination löschen
06.11.2018 14:36:05
marc4791
https://www.herber.de/bbs/user/125198.xlsm
So habe die gesamte Datei angehängt.
Von Belang sind nur die Blätter "Teilnehmer" und "Kurszettel".
Ich hoffe, Du kannst was damit anfangen.
Anzeige
nein, im Moment nicht...
06.11.2018 14:56:14
Werner
Hallo Marc,
...weil ich im Moment keine Dateien mit Makros herunterladen kann. Bitte noch mal, aber als normale .xlsx ohne Makros.
Gruß Werner
AW: nein, im Moment nicht...
06.11.2018 15:11:31
marc4791
https://www.herber.de/bbs/user/125200.xlsx
In der Ursprungsdatei sind auch Formeln in den Zellen,
da funktioniert's aber mit dem langen Code.
Und noch 'ne Frage: oft kann ich Änderungen nicht rückgängig machen -
woran liegt das?
AW: nein, im Moment nicht...
06.11.2018 17:14:30
Werner
Hallo Marc,
hier:
Sub Makro3()
Dim i As Long
Application.ScreenUpdating = False
With Worksheets("Kurszettel")
For i = 4 To 8
.Range(.Cells(14, i), .Cells(33, i)).Sort Key1:=.Cells(14, i), _
Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom
Next i
End With
End Sub
Wie du dem Makro die Tastenkombi zum Starten zuweisen kannst ist dir ja jetzt bekannt.
Gruß Werner
Anzeige
AW: VBA - Leere Zellen durch Tastenkombination löschen
06.11.2018 12:37:24
Werner
Hallo,
dann gibt es im Bereich G14:H33 keine leeren Zellen, vermutlich hast du dort überall Formeln drin.
Dann geht das nur über Sortieren.
Gruß Werner
AW: VBA - Leere Zellen durch Tastenkombination löschen
06.11.2018 21:30:20
marc4791
Userbild
SUPER!!!
Fast haben haben wir's! Jetzt noch die Namen nach oben, und meine Kollegen haben nix mehr zu meckern!
Hab's probiert mit "Orientation:=xlBottomToTop" - hat nicht funktioniert,
und mit ".Range(.Cells(33, i), .Cells(14, i))" - war's auch nicht.
Noch 'ne Frage: kannst Du Fachliteratur in VBA für Anfänger empfehlen?
Und noch eine:
in Blatt "Teilnehmer" hätte ich gern die Möglichkeit, die Tabelle aus "Kurse" so
einzubauen, das sie mitwandert wie die beiden Textfelder.
Habe es mit einer Grafik hinbekommen, also Bildschirmdruck-Tabelle ausschneiden-als Grafik eingefügt.
Das Dumme ist - wenn in "Kurse" was geändert wird, kriegen die es nicht hin, eine neue Grafik wieder funktionierend einzubauen. Was gäbe es da für eine Alternative? Ich möchte auch nicht eine 20-zeilige Tabelle über fixieren immer sichtbar machen, dass würde den sichtbaren Bereich der Teilnehmer sehr einschränken.
Und damit ich Dir richtig auf die Nerven gehe:
das Drop-Down-Menü in "Teilnehmerzettel" weist ja leider auch jede freie Zelle aus der Quell-Tabelle aus. Kann man das so hinkriegen, das leere Zeilen nicht berücksichtigt werden und die Teilnehmer alphabetisch im Menü erscheinen?
Ich hoffe, Du magst mir da noch mal helfen, denn andere Foren und Websites waren nicht hilfreich.
Grüße
Anzeige
AW: VBA - Leere Zellen durch Tastenkombination löschen
07.11.2018 07:08:58
Werner
Hallo,
ändere mal
Order1:=xlAscending

um in
Order1:=xlDescending
Für das andere Problem/Probleme mach mal einen neuen Beitrag auf, bitte gleich mit Beispielmappe.
Habe die nächsten zwei Tage keine Zeit mir das anzuschauen.
Gruß WErner

349 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige