Registriert seit: 10.09.2014
Version(en): 2013
Hallo liebe VBA Gemeinde,
ich habe ein kleines Programm zum Navigieren in Excel-Zellen geschrieben. Ausgeblendete
Zeilen werden dabei durch rekursiven Programmaufruf mittels Verwendung eines GoTo Befehls beim Aufruf der Programmroutine Unterprogramm() übersprungen. Hat jemand eine Idee wie man so etwas besser, noch schneller lösen kann? Irgendeinen programmierbaren Einzeiler?
Code:
Sub Unterprogramm()
Nochmal:
ActiveCell.Offset(1, 0).Select
If ActiveCell.EntireRow.Hidden Then GoTo Nochmal
End Sub
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
mal ohne Sprungmarke und nur einmal wird selektiert (ist aber ungetestet). Ob es schneller ist? Keine Ahnung.
Code:
Sub Unterprogramm()
Dim lngZeile As Long
lngZeile = ActiveCell.Row
Do
lngZeile = lngZeile + 1
Loop While Rows(lngZeile).Hidden
ActiveCell.Offset(lngZeile - ActiveCell.Row, 0).Select
End Sub
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 10.09.2014
Version(en): 2013
Code:
Sub Unterprogramm()
ActiveCell.Offset(1, 0).Select
If ActiveCell.EntireRow.Hidden Then Unterprogramm
End Sub
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
Du könntest auch direkt die sichtbaren Zellen ansprechen:
Code:
Sub SichtbareZellenMarkieren()
ActiveCell.EntireColumn.SpecialCells(xlCellTypeVisible).Select
End Sub
Gruß Uwe
Registriert seit: 10.09.2014
Version(en): 2013
Hallo Uwe,
Dein Vorschlag würde mir schon super gefallen. Nur soll es ja so sein, das durch den Aufruf
Unterprogramm die nächste sichtbare Zeile ausgewählt wird. Wie und wo kriege ich
denn das Offset da rein oder wie baue ich deinen Einzeller sonstwie um?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
so aus dem Zusammenhang gerissen und als "Unterprogramm" für keine Ahnung was für ein Hauptprogramm
sehe ich auch keinen Sinn in meinem Vorschlag.
Gruß Uwe
Registriert seit: 10.09.2014
Version(en): 2013
Hallo Uwe,
ich formuliere nochmal anders. Ich habe die ganzen Code in einer Userform geschrieben, d.h.
1. mit ActiveCell.Offset(1,0).Select gehe ich eine Zeile vorwärts
2. da ich nun ausgeblendete Zeilen umgehen möchte mache ich ich so etwas durch Aufruf von Unterprogramm.
Sub Unterprogramm()
ActiveCell.Offset(1, 0).Select
If ActiveCell.EntireRow.Hidden Then Unterprogramm
End Sub
diese Routine löst die Angelegenheit dann durch rekursive Abarbeitung.
3. Jetzt die Preisfrage, gehts vielleicht nicht doch wenn man deine Programmzeile:
ActiveCell.EntireColumn.SpecialCells(xlCellTypeVisible).Select
irgendwie umbaut?
Das wäre dann ein schöner Einzeiler und noch eleganter!
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
schildere doch bitte einmal, was das Hauptprogramm macht / machen soll.
Wenn Du jedoch an der bisherigen Struktur mit Unterprogramm
festhalten willst, gibt es keinen Spielraum mehr.
Gruß Uwe
Registriert seit: 10.09.2014
Version(en): 2013
Hallo Uwe,
nein ich halte nicht an der kleinen Subroutine Unterprogramm fest.
Die Aufgabe ist einfach:
Es gibt in der Userform ein Textfeld und einen Commandbutton. Der CommandButton geht bei jedem Klick eine
Zeile vorwärts. Das TextFeld zeigt dann den Inhalt in der jeweilig selektierten ExcelZelle an.
(Diese simple Aufgabe wird natürlich hinterher in ein größeres Programm integriert, ist hier aber ohne Belang!)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
23.09.2014, 20:18
(Dieser Beitrag wurde zuletzt bearbeitet: 23.09.2014, 20:19 von schauan.)
Hallo julia,
mit diesem Ansatz gibt Dir Excel die Adressen der jeweils ersten sichtbaren Zelle aus. Beim Ausblenden ergeben sich für Excel intern sogenannte Areas, die man einzeln ansprechen kann.
Code:
Sub SichtbareBereiche()
'Variablendeklaration
'Integer
Dim iCnt%
'Mit den sichtbaren Zellen im Bereich A1:A10
With Range("A1:A10").SpecialCells(xlCellTypeVisible)
'Schleife ueber die einzelnen sichtbaren Bereiche
For iCnt = 1 To .Count
'Ausgabe der Adresse der ersten Zelle im Bereich
MsgBox .Areas(iCnt).Cells(1, 1).Address
'Ende Schleife ueber die einzelnen sichtbaren Bereiche
Next
'Ende Mit den sichtbaren Zellen im Bereich A1:A10
End With
End Sub
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)