PDA

Vollständige Version anzeigen : Zeilen merken und automatisch übernemhmen


Torsten1
22.07.2012, 16:46
Hallo

Gibt es eine Möglichkeit (vermutlich JA) auf mehreren Blättern (alle gleich-auf einem Blatt nachzuschauen [reicht z.B. Blatt "Jan"])
per VBA "nachzuschauen", wieviele Zeilen eingeblendet sind,
sich die Zahl zu "merken" und wieder abzurufen ?

Konkretes Beispiel:
ich lege mehrere Blätter an.
Bei diesen Blättern blende ich bestimmte Zeilen (alle untereinander[Anzahl der Mitarbeiter]) ein/aus
im Beispiel (von 5 - 24) blende ich Bspws. die Zeilen 10-24 aus.

Nun wird ein Makro aufgerufen, dass alle Zeilen einblenden muss um einen
Kopiervorgeng durchzuführen.

Danach hätte ich gerne, dass nur die Zeilen wieder eingeblendet sind (Anzahl d. Mitarbeiter, die der Benutzer angelegt hat),
die zuvor (vor Makroausdführung) auch eingeblendet waren.

Um es kurz zu machen: (über mehrere Blätter - alle gleich) schauen,
wieviele Zeilen im Bereich 5-24 ausgeblendet sind, Zahl merken
und nach Makrobeendung diese (gemerke(n) Zahl/Zeilen) wieder einblenden/ausblenden !

Ich habe es schon hinbekommen, nur muss der Benutzer jedesmal wieder die Anzahl der Mitarbeiter angeben.
Das nervt und daher diese (für Euch vermutlich) belanglose Frage !

Geht das ?

Nette Grüße
Torsten

Ach ja - ich komme mit Arrays überhaupt nicht klar ! Das Array sollte von Jan - Dez laufen... nur so als Info ...
Das klingt natürlich so, als wollte ich eine Komplett-/Patentlösung .... toll Torsten ... so war's nicht gemeint ... ehrlich !

jeder mann
22.07.2012, 20:06
Hallo, Torsten,

wieso kommst Du auf die Idee, dass für die Lösung Arrays eingesetzt werden müssten? Es geht auch ohne, z.B. mit dem Bilden eines Bereiches - hier der Code als Ansatz für eine Tabelle,

Sub Thorsten()
Dim rngAusgeblendet As Range
Dim rngZelle As Range

'Durchlaufen der Zellen im Bereich A5:A25
For Each rngZelle In Range("A5:A25")
'ausgeblendete Zeilen haben eine Zeilenhöhe von 0
If rngZelle.Height = 0 Then
If rngAusgeblendet Is Nothing Then
Set rngAusgeblendet = rngZelle
Else
Set rngAusgeblendet = Union(rngAusgeblendet, rngZelle)
End If
End If
Next rngZelle

'Einblenden aller Zeilen
Range("A5:A25").EntireRow.Hidden = False
'da ich keinen weiteren Code laufen lasse, von dem ich nicht weiß, was er macht,
'wird an dieser Stelle der Code unterbrochen
Stop

'Ausblenden des gemerkten Bereiches
rngAusgeblendet.EntireRow.Hidden = True
Set rngAusgeblendet = Nothing

End Sub
Und um diesen Ansatz herum kann eine Schleife über die Tabellen der Mappe gelegt werden,. wobei Du bitte darauf achten solltest, dass sich ein Bezug des Bereiches zur Tabelle ergeben muss, da sonst immer nur die aktive Tabelle mit dem Bereich bearbeitet werden würde.

HTH.

GMG-CC
22.07.2012, 20:55
Hallo ihr beiden,

ich würde es auch mit einem Array lösen, ist transparenter im Code ...
Sub GMGCC()
Dim Ze As Integer, Tb As Integer, Anz As Integer, i As Integer
Dim aTbZe()

'Erst einmal Anzahl der Zeilen feststellen
Anz = 0
For Tb = 1 To Sheets.Count
For Ze = 1 To 25
If Sheets(Tb).Rows(Ze).EntireRow.Hidden Then
Anz = Anz + 1
End If
Next Ze
Next Tb

'Falls Zeilen versteckt sind -> Array
If Anz > 0 Then
ReDim aTbZe(Anz, 2)
Anz = 1
For Tb = 1 To Sheets.Count
For Ze = 1 To 25
If Sheets(Tb).Rows(Ze).EntireRow.Hidden Then
aTbZe(Anz, 1) = Sheets(Tb).Name
aTbZe(Anz, 2) = Ze
Anz = Anz + 1
End If
Next Ze
Next Tb
End If


'alle anzeigen lassen
For Tb = 1 To Sheets.Count
Sheets(Tb).UsedRange.EntireRow.Hidden = False
Next Tb
'irgend etwas machen
Stop
'und wieder verstecken
For i = 1 To Anz - 1
Sheets(aTbZe(i, 1)).Rows(aTbZe(i, 2)).EntireRow.Hidden = True
Next i
End Sub
... und es wäre schön gewesen, wenn du eine (anonymisierte) Mustertabelle eingestellt hättest, das erleichtert Helfern die Arbeit.

EarlFred
22.07.2012, 21:25
Hallo Torsten,

Gibt es eine Möglichkeit (vermutlich JA) auf mehreren Blättern (alle gleich-auf einem Blatt nachzuschauen [reicht z.B. Blatt "Jan"])
per VBA "nachzuschauen", wieviele Zeilen eingeblendet sind,
sich die Zahl zu "merken" und wieder abzurufen ?
Puh, das musste ich jetzt gefühlte 8mal lesen. Verstanden habe ich es aber immer noch nicht.

Nun wird ein Makro aufgerufen, dass alle Zeilen einblenden muss um einen Kopiervorgeng durchzuführen.
Man kann Daten auch aus Zeilen kopieren, die ausgeblendet sind (natürlich auch aus ausgeblendeten Spalten...). Ich denke, Du betreibst unnötigen Aufwand.

Ach ja - ich komme mit Arrays überhaupt nicht klar !
Hast Du Probleme mit Arrays oder hast Du Probleme damit, mehrere Blätter auf einmal / nacheinander anzusprechen? Bisher kenne ich Arrays aus Deinen Codes nur, um mehrere Blätter auf einmal festzulegen.
Aber anstelle dies immer und immer wieder zu betonen, schließ doch einfach mal Deine Wissenslücke was Arrays angeht und gönn Dir einen kleinen Grundkurs: Ich soll immer mal bei Online-Excel vorbeischauen! (http://www.online-excel.de/excel/singsel_vba.php?f=152)

So, und jetzt bitte noch einmal in Ruhe erklären, was Du vorhast. Unterstütze Deine Beschreibung mit einer aussagekräftigen Demodatei, dann wird's für alle leichter.

Grüße
EarlFred

Torsten1
27.07.2012, 12:55
Vielen Dank für die Antworten :top:

Ich bin gerade auf dem Sprung und habe noch keinen Code getestet (sorry - wird natürlich nachgeholt).

Aber um mein Problem zu konkretisieren:
Ich habe einen Schichtplan/Arbeitsnachweis erstellt.
Der Schichtplan bfindet sich in den Zeilen 1-34, der Arbeitsnachweis in den Zeilen 48-95 (auf den Blättern Jan-Dez).
Beim Schichtplan kann der Anwender die Anzahl der Mitarbeiter verändern
(von einem bis zu zwanzig Mitarbeiter - Zeilen 5-24).

Findet nun eine Umschaltung von Schichtplan auf Arbeitsnachweis (der sich
nur auf eine Person beschränkt und somit keine Mitarbeiterzahl geändert werden muss) statt,
werden die Zeilen 1-34 (also der Schichtplan) ausgeblendet.

Umgekehrt werden die Zeilen 48-95 ausgeblendet und die Zeilen 1-34 eingeblendet.

Es geht um die Umschaltung von Arbeitsnachweis auf Schichtplan.
Im Schichtplan hat der Anwender ja eine bestimmte Anzahl an Mitarbeitern
angegben (die nicht benutzten Zeilen wurden ausgeblendet).
Diese (vor der Umschaltung) sichtbaren Zeilen gilt es auch wieder herzustellen,
da der Benutzer (so mache ich es im Moment) sonst nach der Umstellung
von Arbeitsnachweis auf Schichtplan die Anzahl der Mitarbeiter erneut angeben muß.

Verstanden ? oder immernoch zu kompliziert ?

Nette Grüße
Torsten