Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
552to556
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
552to556
552to556
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Sheetname auslesen für Array

Sheetname auslesen für Array
26.01.2005 10:24:35
Jörg
Hallo,
ich möchte gerne alle Namen der sichtbaren mappen auslesen
und in einen Array übergeben, wie kann ich sowas anstellen ,
damit ich nicht immer die Namen schreiben muss(z.b.: Sheets(Array("Tabelle1", "Tabelle2", ....)).select ).
Gruß Jörg

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sheetname auslesen für Array
u_

Sub SelectAllVisibleSheets()
Dim arrSheets As String, i As Integer
For i = 1 To Worksheets.Count
If Worksheets(i).Visible Then
arrSheets = arrSheets & Worksheets(i).Name & ","
End If
Next
arrSheets = Left(arrSheets, Len(arrSheets) - 1)
Worksheets(Split(arrSheets, ",")).Select
End Sub

Viel Spaß damit
AW: Sheetname auslesen für Array
26.01.2005 14:11:01
Jörg
Hi,
ich habe eine Frage zu Deinen Script?
Was bedeutet das Split in folgender Zeile:
Worksheets(Split(arrSheets, ",")).Select
Denn ich bekomme hier einen FEhler.
Gruß Jörg
AW: Sheetname auslesen für Array
Luc
Hi, das kann ich dir auch sagen: er hat aus den Namen eine Stringvariable gebildet, wobei er zwischen die Namen Kommas gesetzt hat. mit der Split-Fkt wandelt man eine Zeichenkette in ein array um. Dazu muss ein sog. Begrenzer (hier das Komma) angegeben werden. Die Anweisung, in der die Fkt verwendet wird, bewirkt die gleichzeitige Auswahl aller so ermittelten Tabellen.
Dass du das wolltest, hast du nicht geschrieben - deshalb habe ich in meinem Beitrag das array nur mit den Namen gefüllt, wobei mit Index 0 stets der Name der Arbeitsmappe eingetragen wird. Evtl kann man da die Anzahl der jew TabEinträge auch noch erfassen, indem man die Variable n auch als array n(m) redimmt. Du kannst natürlich auch u_'s Lösung für Worksheets in meinen Zyklus für Workbooks einbauen, falls du den brauchst.
Ahoi Luc
Anzeige
AW: Sheetname auslesen für Array
27.01.2005 08:39:12
Jörg
Hi Luc,
da Du mit einen Greenhorn redest ist Dein Text mit lauter
? gespickt.
Was ich machen wollte ist eigentlich alle sichtabren Seiten an einen
PDF-Drucker übergeben. Dafür müste ich erstmal alle Seiten selektieren.
Gruß Jörg
AW: Sheetname auslesen für Array
Luc
Morjn Jörg,
also den Zweck (nur Selektion) erfüllt u_'s Makro schon - bei mir funktioniert's. Alles weitere wirst du dann ja wohl ohnehin manuell machen. Wenn's bei dir nicht läuft, muss es an einem der Blattnamen liegen. Die Methode, eine Zeichenkette (String) aus den Namen (mit trennendem Komma) zu bilden, würde dann nicht richtig funktionieren, wenn einer der Blattnamen ein Komma enthält. Das dürfte aber eigentlich nicht sein, weil wohl das Komma eins der wenigen Zeichen ist, die in Blattnamen verboten sind. Mein Programm würde diesen Zweck auch erfüllen, wenn der Dateiname nicht mit in den Vektor(hier: Datenfeld=array) der zugeordneten Blattnamen aufgenommen wird und diese Variable dann anstelle der split-Konstruktion in die Select-Anweisung aufgenommen wird - "ThisWorkbook.Sheets(s).Select" (aber nur ohne das bisherige Element s(0)!). Das würde auf jedenfall Fehler, die bei split auftreten könnten, vermeiden.
Wenn du dir die Arbeit derart erleichtern willst, kommst du an VBA nicht vorbei. Da solltest du schon mal den Editor aufrufen und dort in der online-Hilfe die Sprachelemente nachschlagen. Sonst wirds so nichts und du musst dir das programmieren lassen.
Gruß Luc
Anzeige
AW: Sheetname auslesen für Array
Jörg
Thanks for help ,
mit Deinen Hinweis auf "ThisWorbook.Sheets.select hat es geklappt.
Das ganze schaut nun so aus:

Sub drucke_pdf()
Dim wks As Worksheet
Dim sPrinter As String
Application.Dialogs(xlDialogPrinterSetup).Show
sPrinter = Application.ActivePrinter
For Each wks In Worksheets
If wks.Visible = True Then
ThisWorkbook.Sheets.Select
End If
Next
Sheets("Tabelle1").Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=sPrinter
End Sub

Man ich werde die Programmsprache nie verstehen :-(
Gruß Jörg
AW: Sheetname auslesen für Array
27.01.2005 11:48:34
Jörg
Hi,
zu früh gefreut im Test lief das Makro aber in der eigentlichen
Datei bekomme ich nun einen
Laufzeitfehler"1004" Methode 'Select' für das Objekt 'Sheets' fehlgeschlagen
in der Zeile:
ThisWorkbook.Worksheets.Select
Warum geht das hier nicht?
Gruß Jörg
Anzeige
AW: Sheetname auslesen für Array
Luc
ganz einfach, weil du das, was du die sub vorher hast machen lassen, nachher nicht richtig anwendest. thisWorkbook.sheets.select wählt bei JEDEM sichtbaren Blatt stets ALLE Blätter (auch unsichtbare!) aus. Außerdem werden in der for-Schleife die Blätter nacheinander ausgewählt, nicht alle gleichzeitig. Du kommst nicht um das Anlegen eines Array's herum. So z.B.:
Dim wsn() As String, s as Integer
...
Rem im ff wird ein realer maxIndex f.wsn aufgebaut
s = -1 'wenn VBA auf 1.Index=0 eingestellt ist (Standard)
For Each wks In Worksheets
If wks.Visible Then
s = s + 1
End If
Next wks
Rem jetzt werden die Namen in das Array gespeichert
Redim wsn(s): s = 0
For Each wks In Worksheets
If wks.Visible Then
wsn(s) = wks.Name
s = s + 1
End If
Next wks
ActiveWorkbook.Sheets(s).Select
ActiveWindow.SelectedSheets.PrintOut ...
Ansonsten kann ich dir nachfühlen... dauert, aber wird noch!
Gruß Luc
Anzeige
AW: Sheetname auslesen für Array
27.01.2005 16:16:13
Jörg
Hi Luc,
hmm ich habs mal eingebaut und es sieht nun so aus:
.........
Dim wks As Worksheet
Dim wsn() As String, s As Integer
Dim sPrinter As String
Application.Dialogs(xlDialogPrinterSetup).Show
sPrinter = Application.ActivePrinter
Rem im ff wird ein realer maxIndex f.wsn aufgebaut
s = -1 'wenn VBA auf 1.Index=0 eingestellt ist (Standard)
For Each wks In Worksheets
If wks.Visible Then
s = s + 1
End If
Next wks
Rem jetzt werden die Namen in das Array gespeichert
ReDim wsn(s): s = 0
For Each wks In Worksheets
If wks.Visible Then
wsn(s) = wks.Name
s = s + 1
End If
Next wks
ActiveWorkbook.Sheets(s).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=sPrinter
.......
aber er bemängelt hier nun die Zeile :
ActiveWorkbook.Sheets(s).Select
Gruß Jörg
Anzeige
AW: Sheetname auslesen für Array
Luc
Ja Jörg, das habe ich beinahe befürchtet, dass das der Schwachpunkt sein könnte. Ich habs bisher auch nur mit der split-Methode versucht. Du hast 3 Möglichkeiten:
1. die u_Version mit anderem Begrenzer ausprobieren
2. in die obige Version zwischen Next und Select einen Variant sn = Join(s, "#") - das ist die Umkehrung von Split - einfügen und statt s in ...Sheets(s)... ...Sheets(Split(sn, "#"))... schreiben
3. ein Objektarray aus den zu druckenden Sheets bilden, wenn das geht (VBA-online-Hilfe). Mit Shapes ist das ja auch möglich.
Versuch erstmal 1+2. Könnte ja auch doch ein störender Blattname sein oder die Unsichtbaren geraten dazwischen und teile die anderen in zu viele "Teilpakete" oder es sind überhaupt zu viele oder...oder... Lies am besten noch mal genau nach!
Ich kann mich frühestens erst morgen am späteren NM oder abends weiter darum kümmern.
Luc
Anzeige
AW: Sheetname auslesen für Array
31.01.2005 08:10:13
Jörg
Hi Luc,
ich habe mal das ganze WE probiert und gemacht , aber es gab hierbei einige
Probleme. Nun hängt sich das Makro bei dem BEfehl Join auf.
In der Hilfe habe ich mal danach gesucht und rausgefunden , das es eigentlich nur für
SQL-Anwendungen gedacht ist.
Gruß Jörg
AW: Sheetname auslesen --> SubProzedur
Luc
Hallo Jörg,
wenn ich dich richtig verstanden habe, löst Folgendes wahrscheinlich dein Problem.
Bei mir funktionierts! Gruß Luc

Sub TabTitel()
Rem liefert ein Variablenarray (Variant) _
mit Namen aller sichtbaren Blätter (j) _
pro geöffneter Arbeitsmappe (i)
Dim b As Workbook, s As Worksheet, _
t() As Variant, w() As Variant, _
i As Integer, j As Integer, _
m As Integer, n As Integer
m = Workbooks.Count - 1
Rem -1 wenn Index bei 0 beginnt
ReDim w(m)
For Each b In Workbooks
n = b.Sheets.Count
ReDim t(n)
j = 0: t(0) = b.Name
For Each s In b.Sheets
j = j + 1
If s.Visible Then
t(j) = s.Name
End If
Next s
w(i) = t
i = i + 1
Next b
MsgBox w(0)(1) & Chr(10) & w(0)(2), vbOKOnly, w(0)(0)
Rem MsgBox ist nur TestBsp - hier dann zentrale Ausgabe- _
bzw Ablageanweisungen für w(i)(j) einfügen!
End Sub

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige