Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Alternative für rekursiven Programmaufruf gesucht
#1
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
to top
#2
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 7 / Office 2007
to top
#3
Code:
Sub Unterprogramm()
ActiveCell.Offset(1, 0).Select  
If ActiveCell.EntireRow.Hidden Then Unterprogramm
End Sub
to top
#4
Hallo,

Du könntest auch direkt die sichtbaren Zellen ansprechen:

Code:
Sub SichtbareZellenMarkieren()
  ActiveCell.EntireColumn.SpecialCells(xlCellTypeVisible).Select
End Sub

Gruß Uwe
to top
#5
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?
to top
#6
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
to top
#7
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!
to top
#8
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
to top
#9
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!)
to top
#10
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-2016)
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Text spalten in alternative hisid1 5 170 12.09.2016, 12:27
Letzter Beitrag: steve1da
  DBMIN(?) Alternative? Travis5002 5 242 24.08.2016, 11:10
Letzter Beitrag: Travis5002
  Alternative zu Wenn und bzw oder Funktion Antihero 6 569 25.06.2016, 12:39
Letzter Beitrag: Ego
  Alternative zu WENN DANN Verschachtelung drarrr 7 622 12.04.2016, 14:07
Letzter Beitrag: drarrr
  Spiele zählen; ZÄHLENWENNS, oder Alternative!? basti1912 12 1.062 30.03.2016, 21:00
Letzter Beitrag: basti1912
  Alternative für After := ActiveCell bei der Suche in einem Range-Objekt ChristaRohn 14 1.064 17.03.2016, 19:43
Letzter Beitrag: RPP63
  Alternative Nummern anhand mehrerer Bedingungen Reismann 15 1.004 12.02.2016, 15:38
Letzter Beitrag: Reismann
  ActiveX - Alternative? guenther-st 5 1.331 11.10.2015, 11:19
Letzter Beitrag: guenther-st
  Alternative zu vlookup! cysu11 23 3.286 02.04.2015, 06:26
Letzter Beitrag: cysu11
  Summenprodukt Alternative floridarolf 12 2.821 02.02.2015, 16:48
Letzter Beitrag: Rabe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste