Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
776to780
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
776to780
776to780
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ausgewählte Tabellennamen auflisten

ausgewählte Tabellennamen auflisten
01.07.2006 11:44:14
Fritz
Hallo VBA-Experten,
wer kann mir helfen?
Ich möchte in einer Tabelle in der Spalte F ab Zeile3 alle "Tabellennamen" eintragen, die in der Mappe enthalten sind und deren Tabellenname nur aus einer Zahl besteht. Die Tabellennamen (Zahlen) sollten aufsteigend eingetragen werden und jeweils beim Öffnen der Tabelle "aktualisiert" werden.
Ich hoffe, dass ich meine Vorstellungen nachvollziehbar beschrieben habe und ihr mir helfen könnt.
Bereits an dieser Stelle allen Helfern vielen Dank.
Gruß
Fritz

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ausgewählte Tabellennamen auflisten
01.07.2006 12:07:56
Josef Ehrensberger
Hallo Fritz!
Angenommen, die Blätter sollen in Tabelle1 aufgelistet werden.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Open()
Tabelle1.Worksheet_Activate
End Sub


' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Public Sub Worksheet_Activate()
Dim objWs As Worksheet
Dim lngR As Long

lngR = 3

For Each objWs In Me.Parent.Worksheets
  If IsNumeric(objWs.Name) Then
    Cells(lngR, 6) = objWs.Name
    Me.Hyperlinks.Add Anchor:=Cells(lngR, 6), Address:="", SubAddress:= _
      "'" & objWs.Name & "'!A1"
    lngR = lngR + 1
  End If
Next

Range(Cells(3, 6), Cells(lngR - 1, 6)).Sort Key1:=Cells(3, 6), order1:=xlAscending, header:=xlNo

End Sub


Gruß Sepp
Anzeige
AW: ausgewählte Tabellennamen auflisten
01.07.2006 12:38:42
Fritz
Hallo Sepp,
vielen Dank!!
Dass man gleichzeitig mit einem Mausklick auf den eingefügten Tabellennamen in die jeweilige Tabelle wechseln kann, einfach super!
Dennoch würde ich noch gerne etwas ändern wollen, wenn das möglich ist.
Die Eintragungen sollte in der Tabelle1 in Spalte F jeweils immer erst ab Zeile 3 beginnen.
Mit einem gesonderten Makro würde ich gerne die aufgeführten Tabellen "nach Wunsch" in eine neue Datei entweder kopieren oder verschieben. Dateiname und Pfad sollte gewählt werden können. Dieses Makro würde ich dann über eine Schaltfläche in der Tabelle1 ausführen lassen.
Wäre das möglich.
Auf jeden Fall hast Du mir bereits jetzt schon sehr geholfen.
Gruß
Fritz
Anzeige
@Josef Ehrensberger
01.07.2006 14:22:16
Fritz
Hallo Sepp,
einfach toll, die Beispieldatei. Hervorragende Umsetzung meiner Vorstellung.
Ich habe die UserForm und die beiden Module in meine Datei integriert, die UserForm öffnet sich jedoch nicht beim Aktivieren der Tabelle.
Im Übrigen habe ich noch ein Problem, das ich erst nach dem Wiederöffnen der Datei bemerkt habe. Da ich bereits in "DieseArbeitsmappe" eine Workbook_Open Prozedur eingebaut habe, hatte ich einfach die Anweisung "Tabelle1.Worksheet_Activate" zusätzlich eingebaut. Offensichtlich funktioniert das nicht, wenn über die Workbook_Open Prozedur bereits eine weitere Tabelle aktiviert werden soll.
Gibt es hierfür eine Lösung? Hat diese Problematik damit zutun, dass sich bei mir die UserForm nicht öffnet?
Nochmals vielen Dank für Deinen immensen Einsatz und die "Hundsgeduld" mit uns Anfängern.
Gruß
Fritz
Anzeige
AW: @Josef Ehrensberger
01.07.2006 14:34:54
Fritz
Hallo Sepp,
das Problem mit der UserForm hab ich hingekriegt. Typischer Anfängerfehler, ich hatte vergessen, der Schalfläche das entsprechende Makro zuzuweisen. Ich hab vor lauter Wald die einzelnen Bäume nicht mehr gesehen.
Es steht also nur noch Problem mit der Workbook_Open Prozedur im Raum.
Gruß
Fritz
AW: @Josef Ehrensberger
01.07.2006 15:02:08
Josef Ehrensberger
Hallo Fritz!
Wie lautet den der bisherige Code in der "Open" prozedur?
Gruß Sepp
AW: @Josef Ehrensberger
01.07.2006 15:27:30
Fritz
Hallo Sepp,
Nachstehend ist der gesamte Code aus "Diese Arbeitsmappe" wiedergegeben.
Da ich diesen Code aus diesem Forum nach und nach "zusammengetragen" habe, befürchte ich, dass sich da etwas "in die Quere" kommt. Beim Öffnen der Datei kommt eine Fehlermeldung und es wird nicht mehr die Tabelle "Hauptmenu" aktiviert. Es wäre schön, wenn das ohne Fehlermeldung wieder möglich wäre und dennoch die mit deiner Hilfe mögliche Auflistung der "Dateien mit Zahlen" (in Tabelle1) und deren Verschieben/Kopieren möglich wäre.
Das funktioniert aus der Datei mittlerweile bestens (nochmals: eine Super-Lösung, die Du hochgeladen hast!).
Danke!!!
Gruß
Fritz
Option Explicit

Private Sub Workbook_Open()
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:="XXX"
Tabelle1.Worksheet_Activate
'ActiveSheet.Protect Password:="XXX"
PlayWave
Worksheets("Hauptmenu").Activate
ActiveSheet.Unprotect Password:="XXX"
Range("C2").Activate
Application.ScreenUpdating = True
ActiveSheet.Protect Password:="XXX"
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Dim WS As Worksheet
For Each WS In ThisWorkbook.Sheets
With WS
.Protect Password:="XXX"
End With
Next
End Sub


Private Sub Workbook_SheetDeactivate(ByVal sh As Object)
Dim rng As Range, r As Range
Dim bCheck As Boolean
With sh
If TypeName(sh) = "Worksheet" Then
.Unprotect "XXX"
On Error Resume Next
Set rng = .UsedRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not rng Is Nothing Then
For Each r In rng
On Error Resume Next
bCheck = r.FormatConditions(1).Formula1 <> ""
On Error GoTo 0
If bCheck Then
If Not r.Locked And r.Interior.ColorIndex = 36 And Len(r) > 0 Then
r.Locked = True
ElseIf r.Interior.ColorIndex = 36 And Len(r) = 0 Then
r.Locked = False
End If
End If
Next
End If
.Protect "XXX"
End If
End With
End Sub

Anzeige
AW: @Josef Ehrensberger
01.07.2006 17:41:18
Josef Ehrensberger
Hallo Fritz!
Sag mir noch, wie die Tabelle mit der Auflistung genau heist.
Gruß Sepp
AW: @Josef Ehrensberger
01.07.2006 17:47:29
Fritz
Hallo Sepp!
Die Tabelle mit der Auflistung heißt "Tabelle1", deshalb hab ich als dritte Zeile bei der Prozedur Private Sub Workbook_open() die folgende Anweisung eingefügt:
Tabelle1.Worksheet_Activate
Diese Anweisung fehlte früher.
Gruß
Fritz
AW: @Josef Ehrensberger
01.07.2006 18:03:57
Josef Ehrensberger
Hallo Fritz!
Probier's so
Private Sub Workbook_Open()
Application.ScreenUpdating = False

Sheets("Tabelle1").Worksheet_Activate

PlayWave

With Worksheets("Hauptmenu")
  .Activate
  .Range("C2").Select
End With

Application.ScreenUpdating = True

End Sub


und ändere diesen Code so.
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Public Sub Worksheet_Activate()
Dim objWs As Worksheet
Dim lngR As Long

With Me
  .Unprotect "XXX"
  lngR = 4
  .Range("F4:F65536").Clear
  For Each objWs In .Parent.Worksheets
    If IsNumeric(objWs.Name) Then
      .Cells(lngR, 6) = objWs.Name
      .Hyperlinks.Add anchor:=.Cells(lngR, 6), Address:="", SubAddress:= _
        "'" & objWs.Name & "'!A1"
      lngR = lngR + 1
    End If
  Next
  
  .Range(.Cells(4, 6), .Cells(lngR - 1, 6)).Sort Key1:=.Cells(4, 6), order1:=xlAscending, header:=xlNo
  
  .Protect "XXX", UserInterfaceOnly:=True
End With
End Sub


Gruß Sepp
Anzeige
Funktioniert! Ganz herzlichen Dank! o.w.T.
01.07.2006 18:49:29
Fritz
AW: Funktioniert! Ganz herzlichen Dank! o.w.T.
01.07.2006 19:45:37
Fritz
Hallo Sepp!
Wenn man später noch an der Tabelle "herumbastelt" bleibt das bei VBA leider nicht ohne (nachteilige) Folgen. Dies war bei mir der Fall. Kann den Code beim besten Willen nicht selbst anpassen, deshalb bitte ich Dich erneut um Hilfe:
Ich habe den Bereich, in den die Tabellennamen in der Tabelle1 geschrieben werden, auf F2:F31 geändert. Den Code im "Tabellenblatt" der Tabelle1 hab ich insoweit noch anpassen können. Doch nun werden mir nicht mehr alle Tabellen in der UserForm korrekt angezeigt, da sie die Tabellennamen erst ab Zeile 4 berücksichtigt. Wie kann ich das ändern? Wenn man das ändert, könnte man auch veranlassen, dass in die UserForm auch die Werte aus Spalte G der Tabelle1 (zusätzlich) eingelesen werden? Der Code im Tabellenblatt "Tabelle1" sollte deswegen nicht geändert werden.
Danke!
Gruß
Fritz
Anzeige
AW: Funktioniert! Ganz herzlichen Dank! o.w.T.
01.07.2006 19:58:26
Josef Ehrensberger
Hallo Fritz!
Kein Problem!
Ändere den Code im UF.
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub cmdCancel_Click()
Unload Me
End Sub


Private Sub cmdOk_Click()
Dim intC As Integer, intI As Integer
Dim vList() As Variant

If TextBox1 = "" Then
  MsgBox "Bitte zuerst ein Verzeichnis auswählen!", 64, "Hinweis"
  Exit Sub
End If

If TextBox2 = "" Then
  MsgBox "Bitte zuerst einen Dateinamen angeben!", 64, "Hinweis"
  Exit Sub
End If

For intC = 0 To ListBox1.ListCount - 1
  If ListBox1.Selected(intC) Then
    Redim Preserve vList(intI)
    vList(intI) = ListBox1.List(intC, 0)
    intI = intI + 1
  End If
Next

If intI > 0 Then
  If optMove Then
    Sheets(vList).Move
  Else
    Sheets(vList).Copy
  End If
  With ActiveWorkbook
    .SaveAs TextBox1.Text & "\" & TextBox2.Text
    .Close
  End With
Else
  MsgBox "Keine Tabellen ausgewählt!", 64, "Hinweis"
  Exit Sub
End If

Unload Me
End Sub


Private Sub Image1_Click()
TextBox1 = BrowseForFolder("Zielverzeichnis auswählen", TextBox1, 0, , , True, False)
End Sub


Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If InStr(1, TextBox2, ".") = 0 Then
  TextBox2 = TextBox2 & ".xls"
End If
End Sub


Private Sub UserForm_Activate()
Dim intC As Integer, intL As Integer

intL = Sheets("Tabelle1").Cells(Rows.Count, 6).End(xlUp).Row

If intL < 2 Then Exit Sub

For intC = 2 To intL
  With ListBox1
    .ColumnCount = 2
    .AddItem Sheets("Tabelle1").Cells(intC, 6)
    .List(.ListCount - 1, 1) = Sheets("Tabelle1").Cells(intC, 7)
    .Selected(.ListCount - 1) = True
  End With
Next

End Sub


Gruß Sepp
Anzeige
Noch ein Wunsch perfekt erfüllt!
01.07.2006 21:29:47
Fritz
Hallo Sepp,
ich kann mich hier nur wiederholen, aber das muss sein: Ganz herzlichen Dank!
Alles wie gewünscht!
Gruß
Fritz
@ Josef Ehrensberger - Userform erweitern
02.07.2006 20:30:37
Fritz
Hallo Sepp,
ich hoffe, dass es Dich nicht nervt, zumal mir noch einmal ein Erweiterungswunsch kommt.
Aber deine Lösung ist so gut und eben vielseitig verwendbar.
Ich würde gerne die UserForm so erweitern, dass neben Verschieben und Kopieren der Tabellennamen aus Zahlen, diese Dateien auch gedruckt und gelöscht werden können.
Gruß
Fritz

Die Datei https://www.herber.de/bbs/user/34803.xls wurde aus Datenschutzgründen gelöscht

Anzeige
AW: @ Josef Ehrensberger - Userform erweitern
02.07.2006 23:16:24
Josef Ehrensberger
Hallo Fritz!
Keine Sorge, du nervst überhaupt nicht.
Probier mal.
https://www.herber.de/bbs/user/34808.xls
Gruß Sepp
AW: @ Josef Ehrensberger - Userform erweitern
03.07.2006 05:31:57
Fritz
Hallo Sepp!
Getestet: Einfach super!
Besten Dank.
Gruß
Fritz
AW: ausgewählte Tabellennamen auflisten
01.07.2006 12:34:12
Horst
Hallo,
Nur noch ein kleiner Tip am Rande.
Wenn Du in der unteren Leiste (bei den Registern mit den Tabellennamen) mit der rechten Maustaste auf die Pfeile ganz links drückst, bekommst Du automatisch alle Tabellenblätter
angezeigt.
Diese Funktion kennen viele meiner Bekannten nicht, sie ist aber oftmals nützlich.
Nicht ganz was Du willst, aber das hat ja der Josef beschrieben.
Gruß Horst
Anzeige
AW: ausgewählte Tabellennamen auflisten
01.07.2006 12:45:04
Fritz
Hallo Horst,
ich bin für jeden Hinweis dankbar. Ich will schließlich gerne etwas dazulernen und das gelingt mir in diesem Forum vorzüglich dank vieler freundlicher Helfer.
Gruß
Fritz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige