| |
| Xometry verstärkt sein Angebot für die Blechbearbeitung: Mehr Fertigungsoptionen und bessere Sofort-Angebote, eine Pressemitteilung
|
Autor
|
Thema: Alle Tabellennamen in Dropdown (20290 mal gelesen)
|
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 05. Mai. 2009 07:27 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich werd einfach nicht fündig. Ich suche eine Möglichkeit alle Tabellen in eine Kombobox einzufügen. Grund ist: Ich habe eine Date mit sehr vielen Tabellen, nun versuche ich in jede Tabelle ein Feld oder Steuerelemnt einzufügen, wo alle Tabellennamen gelistet sind. Hoffe Ihr könnt Helfen. Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 395 Registriert: 11.08.2007
|
erstellt am: 05. Mai. 2009 07:50 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hi Andreas, wenn du eine ComboBox aus der Formular-Symbolleiste verwendest, könntest du das mit diesem Code machen:
Code: Private Sub ComboBox1_DropButtonClick() Dim wsTabelle As Worksheet ComboBox1.Clear For Each wsTabelle In Worksheets ComboBox1.AddItem wsTabelle.Name Next wsTabelle End Sub
Damit werden alle Arbeitsblätter in die CombobBox eingelesen sobald der DropDown-Pfeil aktiviert wird.------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 05. Mai. 2009 07:58 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Guten Morgen Andreas, ich würd wahrscheinlich per Makro alle Blätter durchlaufen lassen und deren Namen in ein Array schreiben. Anschließend würd ich das Array an die ComboBox binden. Ist eben noch die Frage, wann das ganze durchgeführt werden soll. Es wäre sicherlich sinnvoll, bei Änderungen an den einzelnen Blättern das ganze erneut durchführen zu lassen, um die Liste der ComboBox aktuell zu halten. Vielleicht hilft der Schubs weiter! Grüße Tobias PS: Du kannst das ganze soweit ausbauen, dass beim Klick auf ein Item der ComboBox auch die entsprechende Tabelle geöffnet wird (ist bestimmt auch der Sinn der ganzen Aktion). [Edit] Ach, da war wieder mal einer um 8 Minuten schneller [/Edit] [Diese Nachricht wurde von MWN am 05. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 05. Mai. 2009 08:08 <-- editieren / zitieren --> Unities abgeben:
@beverlyDanke für die schnelle Antwort, der Ansitz ist super, nur... Zitat: Original erstellt von MWN: PS: Du kannst das ganze soweit ausbauen, dass beim Klick auf ein Item der ComboBox auch die entsprechende Tabelle geöffnet wird (ist bestimmt auch der Sinn der ganzen Aktion).
Das wäre das sogenannte I-Tüpfelchen. Und wie bewerkstellige ich nun das Ganze?? ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 05. Mai. 2009 08:26 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hallo Andreas, das wird wohl ein ziemlicher Aufwand werden, dass zu programmieren. Denn wenn du in jede deiner Tabelle eine ComboBox einfügst, musst du zum einen jede dieser Boxen füllen lassen und zum anderen dann auch für jede dieser Box die entsprechende Aktion (in deinem Fall das Change - Event) auswerten. Es wäre sicherlich komfortabler, die ComboBox beim Blattwechsel erstellen bzw. entfernen zu lassen. Damit ist gewährleistet, dass du nur "eine" Box hast, die du immer wieder verwendest. Vielleicht wäre dann folgender Schnipsel etwas für dich:
Code: Private Sub Workbook_SheetActivate(ByVal Sh As Object) If ActiveSheet.Name <> "Startseite" Then If ActiveSheet.Buttons.Count >= 1 Then ActiveSheet.Buttons.Delete End If Application.OnTime Now + TimeValue("00:00:01"), "Button_Hinzufuegen" End If End Sub Private Sub Button_Hinzufuegen() Dim MyButton As Button Set MyButton = ActiveSheet.Buttons.Add(411.75, 15.75, 132.75, 24) With MyButton .OnAction = "Startseite_Anzeigen" .Caption = "zurück zur Startseite" End With End Sub Sub Startseite_Anzeigen() ActiveSheet.Buttons.Delete ActiveWorkbook.Sheets(1).Activate End Sub
Der Hintergrund des Ganzen: ein einziger Event der ComboBox (Change - Event) der zu verwenden ist. Setzt du in jedes Blatt eine neue ComboBox musst du so viele Change-Events (für das springen auf das angewählte Blatt) bearbeiten, wie Blätter in deiner Mappe sind. Noch ein Schubs in Richtung iTüpfelchen: Der Change-Event der ComboBox gibt dir die Möglichkeit auf Änderungen in dieser zu reagieren. Damit kannst du auch auslesen, auf welchen Wert diese gesetzt wurde und erhälst damit den Namen des Blattes in der Mappe, welches selektiert werden soll. Dieses braucht nur noch zu selektieren und schon hast du dein iTüpfelchen! Alles klar? GrüßeTobias
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 05. Mai. 2009 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
|
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 05. Mai. 2009 08:37 <-- editieren / zitieren --> Unities abgeben:
@MWN: Klasse!!! Nun beötige ich nur noch eine ComboBox wo die Tabellennamen eingefügt werden. Das war mein eigendliches Problem, dass ich nicht weiß wie ich alle Tabbelln dort einbinden kann. Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette [Diese Nachricht wurde von AndreasBo am 05. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 05. Mai. 2009 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hi Andreas, das hat dir doch die Karin alias Beverly im 2. Fred von oben geschrieben. Dieser Schnipsel fügt dir alle Blattnamen in die ComboBox. Allerdings erst, wenn du die Box anklickst. Und den Schnipsel von mir nimmst du, um dir die Box auf jedem Blatt positionieren und beim Blattwechsel wieder löschen zu lassen. Steht doch alles da! Grüße Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 06. Mai. 2009 20:08 <-- editieren / zitieren --> Unities abgeben:
Guten Abend, ich hab mal etwas herumgespielt und Folgendes geändert. In ein Modul Code: Option ExplicitPrivate Sub Button_Hinzufuegen() Dim WKS As Worksheet Dim LST As ListBox Set LST = ActiveSheet.ListBoxes.Add(500, 1, 150, 70) LST.RemoveAllItems For Each WKS In Worksheets LST.AddItem WKS.Name Next WKS End Sub
In DieseArbeitsmappeCode: Option ExplicitPrivate Sub Workbook_SheetActivate(ByVal Sh As Object) If ActiveSheet.Name <> "Tabelle1" Then If ActiveSheet.Buttons.Count >= 1 Then ActiveSheet.Buttons.Delete End If ActiveSheet.Shapes.SelectAll Selection.Delete Application.OnTime Now + TimeValue("00:00:01"), "Button_Hinzufuegen" End If End Sub
Nun ist es so, dass immer wenn eine Tabelle außer Tabelle1 gewählt wird, dann wird eine ListBox erstellt mit den Namen der Tabellen. Das Funktionier schon mal.Wie bekomme ich nun Folgendes hin:
Beim Klick/Doppelklick soll die angewählte Tabelle geöffnet werde Die ListBox sortieren Das aktuelle Tabellenblatt soll auch automatisch in der Listbox selectiert sein Wenn Tabelle hinzu oder gelöscht Liste auch gleich aktualisierenIch hoffe ich könnt mir da mal weiterhelfen. Zum herumspielen gibt es die Datei im Anhang. Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 06. Mai. 2009 21:10 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hallo Andreas, nimm - wie vorher - kein Steuerelement, sondern ein ActiveX-Steuerelement, dann bist Du flexibler, wenn Du ohnehin mit VBA arbeitest. Ich würde dann einfach die Eigenschaft Visible zwischen True und False ändern, das geht fixer als das Löschen und neu erzeugen. Zuerst auf allen Blättern eine Cbo-Box erzeugen. Steuerung dergestalt: Box beim Aktivieren des Registers unsichtbar schalten, putzen, alle Register neu einlesen, sortieren, Box sichtbar schalten. Mach aus Application.OnTime Now + TimeValue("00:00:01"), Button_Hinzufuegen" ein Application.Run Button_Hinzufuegen" - wozu eine Sekunde mit der Ausführung warten? Gibt nur nerviges Flackern ;-). Wie oben schon erwähnt, kannst Du die Tabelle aus der ComboBox mit ThisWorkbook.Worksheets(ComboBox1.Value).Activate anwählen. ------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 07. Mai. 2009 07:31 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Guten Morgen Andreas, Guten Morgen Paulchen, das mit der 1 Sekunde warten hat durchaus seine Berechtigung, denn manchmal braucht es etwas länger, bis alle Elemente des Blattes dargestellt sind, bzw. das vorherige löschen aller Elemente durchgeführt wurde. Das kann dann meist dazu führen, dass sich zwei Boxen überlagen. Und das soll doch bestimmt nicht passieren! Andreas, du schreibst folgendes: Zitat: In DieseArbeitsmappe Code:Option Explicit Private Sub Workbook_SheetActivate(ByVal Sh As Object) If ActiveSheet.Name <> "Tabelle1" Then If ActiveSheet.Buttons.Count >= 1 Then ActiveSheet.Buttons.Delete End If ActiveSheet.Shapes.SelectAll Selection.Delete Application.OnTime Now + TimeValue("00:00:01"), "Button_Hinzufuegen" End If End Sub
Da du doch sowieso ein Modul verwendest, ist es doch einfacher, das Code - Fragment in eine eigene Sub im Modul zu schreiben und dann von jedem Blatt nur darauf zu verweisen! Das spart eine Unmenge an schreibarbeit. Aus diesem Grund gibt es in meiner Arbeitsmappe, in der ich das dynamische Erstellen des Buttons (bei dir ComboBox) nutze, noch folgendes Code-Fragment: Zitat: Beim Klick/Doppelklick soll die angewählte Tabelle geöffnet werde
Das geht am besten, wenn man das Change - Event der ComboBox abfängt. Wie wäre es dann mit Zitat: With MyButton .OnAction = "Startseite_Anzeigen" .Caption = "zurück zur Startseite" End With
? Wobei "Startseite_Anzeigen" bei dir eine Funktion wäre, der du den Names des anzuzeigenden Blattes mitgibst, den du wiederum vom selektierten Eintrag der ComboBox erhälst! So, nächstes Thema: Zitat: Die ListBox sortieren
Geht meines wissen nicht mit der ListBox sondern nur über einen Umweg, wie bereits in einer vorherigen Antwort geschrieben. Daten in ein Array schreiben, dann sortieren und anschließend der ListBox übergeben. http://www.herber.de/mailing/016598h.htmoder auch http://www.herber.de/mailing/133501h.htmSo, nun zu Zitat: Das aktuelle Tabellenblatt soll auch automatisch in der Listbox selectiert sein
Folgende vorgehensweise, würde ich bevorzugen: Name des aktuellen Tabellenblattes auslesen und dann in der ListBox selektieren lassen. Das ganze müsste mit Zitat: Wenn Tabelle hinzu oder gelöscht Liste auch gleich aktualisieren
Wenn du in deinem Modul sowieso mit einem globalen Array arbeitest - um die Einträge zu sortieren - dann kannst du dort auch gleich die Änderungen vornehmen lassen. Sprich: fügst du eine Tabelle hinzu, musst du deren Namen auch in dem Array einfügen und dieses neu sortieren lassen. Löschst du eine Tabelle, musst du deren Namen auch aus dem Array löschen lassen und dies eventuell nachher noch neu sortieren. Anschließend das Array dem Steuerelement neu zuweisen, bzw. das Steuerelement aktualisieren, damit es die Änderungen auch anzeigt. Es gibt z.B. für das Workbook ein Event der nennt sich "NewSheet". Ich denke mal, dass das für deinen Zweck funktionieren müsste. Andreas, was hälst du eigentlich davon, deine Tabell, natürlich ohne betriebsinterne Daten, mal hier online zu stellen? Ich bin mir sicher, dass es uns dann etwas leichter fallen wird, dir zu helfen. In dem Sinn: HTH Grüße Tobias [Edit]Sorry, hab in meinem Wahn die Zip übersehen...[/Edit] [Diese Nachricht wurde von MWN am 07. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 07. Mai. 2009 07:57 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Moin, da legt sich MWN ja mächtig ins Zeug! Noch ein Code-Schnipsel hierzu. Zitat: Das aktuelle Tabellenblatt soll auch automatisch in der Listbox selectiert sein
Das geht so, wie von Tobias angeregt: Code: 'In DieseArbeitsmappe Private Sub Workbook_SheetActivate(ByVal Sh As Object) If ActiveSheet.Name <> "Tabelle1" Then Application.Run "cbo_Hinzufuegen" End IfEnd Sub 'In ein Modul Private Sub Cbo_Hinzufuegen() Dim ws As Worksheet Dim cboBox As ComboBox Dim i As Integer 'Zaehler fuer Worksheets Dim j As Integer 'Listen-Eintrags-Nummer Application.ScreenUpdating = False Set cboBox = ActiveSheet.OLEObjects("ComboBox1").Object 'ComboBox1 MUSS auch tatsächlich auf JEDEM Blatt so heißen! i = 1 With cboBox .Visible = False .Clear For Each ws In Worksheets .AddItem ws.Name If ws.Name = ActiveSheet.Name Then j = i 'merken i = 1 + i Next .ListIndex = j - 1 'ListIndex beginnt bei 0 zu zaehlen! .Visible = True End With Application.ScreenUpdating = True End Sub
Die Anzahl der Tabellen scheint nicht fest zu sein - es können wohl welche hinzukommen oder gelöscht werden. Die Lösung über den Code im jeweiligen Sheet erscheint weniger geeignet?!------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 07. Mai. 2009 08:06 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hey Paulchen, irgendwie selbstverständlich. Schließlich bin ich auch jedes mal dankbar, wenn mir so geholfen wird und von daher möchte ich auch anderen auf diese Art und Weise helfen. Und ich weiß auch, wie schwierig es ist, mit VBA überhaupt erst einmal anzufangen und keiner hilft einem. Man weiß nicht so recht, wo man suchen soll, etc. Ich bin mir ziemlich sicher, dass auch du weißt, wovon ich rede. Grüße Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 07. Mai. 2009 09:26 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Och nö, nicht jetzt, wo wir so weit sind! Es soll ja durchaus Leute geben, die ihre eigene Lösung bevorzugen, um sie besser in den Kontext ihrer eigenen Anwendung einzubinden! Und immerhin bringts uns allen was... Grüße Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 07. Mai. 2009 10:30 <-- editieren / zitieren --> Unities abgeben:
DANKE! DANKE ! Zitat: Original erstellt von CADDoc: Auch wenn ich mich blamiere: wenn man 1000 Tabellenblätter hat zwischen welchen man hüpfen muß kann man unten links mit der Maus (rechte MT) ein Liste der Tabellen aufrufen und die gewünschte Tabelle ansteuern.
Blamieren tut sich nur einerd, der nichts zum thema beiträgt! Das mal nebenbei. Das mit der RMT hatt ich auch gefunde, nur ist es da das selbe Problem wie auch mit denn Reitern unten im Fenster, es werden nicht alle angezeigt, d.h. du musst wenn du von 1000 Tabellen die 768.te haben willst erst auf weitere anzeigen usw., also mehrmals klickern. Dies wollte ich umgehen. Ich hätte gern eine ListBox nicht ComboBox nähe rechten Rand, wo alle Tabellen aufgelistet sind und die durch drücken dann geöffnet werden. (siehe Anhang) Ich steh hier einfach aufm Schlauch! Gruß Andreas
------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 07. Mai. 2009 11:49 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hallo Andreas, hab mal wieder mein Excel hervorgekramt. Vielleicht hilft dir das weiter:
Code: Private Sub Worksheet_Activate() Dim ws As Worksheet ListBox1.Clear For Each ws In Worksheets ListBox1.AddItem (ws.Name) Next End Sub
und
Code: Private Sub ListBox1_Click() Dim Name As String Name = ListBox1.Value Call BlattAktivieren(Name) End Sub
Diese beiden Fragmente müssten in jedes Tabellenblatt eingefügt werden. Und in ein Modul fügst du folgendes ein:
Code: Sub BlattAktivieren(ByVal Name As String) Worksheets(Name).Activate End Sub
Verwende auch bitte die Listbox aus der Symbolleiste "Steuerelement - Toolbox"! Eigentlich müssten damit fast alle deine Wünsche abgedeckt sein, denn die Listbox wird jedes mal neu gefüllt, wenn du ein Blatt wechselst, was auch beim löschen, oder erstellen der Fall sein dürfte. Das einzige, wozu ich noch nicht so gekommen bin, ist das sortieren. Bin mir aber sicher, dass noch jemandem was dazu einfallen wird. Gib mal bitte ein Feedback, ob es so passt, oder noch nicht. GrüßeTobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 07. Mai. 2009 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Mahlzeit, Zitat: 1) Beim Klick/Doppelklick soll die angewählte Tabelle geöffnet werde 2) Die ListBox sortieren 3) Das aktuelle Tabellenblatt soll auch automatisch in der Listbox selectiert sein 4) Wenn Tabelle hinzu oder gelöscht Liste auch gleich aktualisieren
Zu 1) Das geht IMHO nur, wie MWN schon schreibt, wenn in JEDEM Register in VBA auch der Code: Private Sub ListBox1_Click() ThisWorkbook.Worksheets(ListBox1.Value).Activate End Sub
enthalten ist. Ich glaube kaum, dass das gewünscht sein kann? Damit ist das Hinzufügen/Entfernen von Registern recht aufwändig.Zu 4) Dafür müsste permanent ein Makro im Hintergrund laufen, dass die Anzahl der Register ermittelt. Performance? Zu 2) und 3) Nimm diesen Code. Code: 'DieseMappe: Private Sub Workbook_SheetActivate(ByVal Sh As Object) If ActiveSheet.Name <> "Tabelle1" Then Application.Run "lst_steuern" End IfEnd Sub 'Modul: Private Sub lst_steuern() Dim ws As Worksheet Dim lstbox 'As ListBox Dim i As Integer 'Zaehler fuer Worksheets Dim j As Integer 'Listen-Eintrags-Nummer Application.ScreenUpdating = False Set lstbox = ActiveSheet.ListBox1 'MUSS ListBox1 heissen! With lstbox .Visible = False .Clear For Each ws In Worksheets 'fuellen... .AddItem ws.Name Next ws SortListBox 'sortieren... 'Eintrag fuer aktuelles Register ermitteln: ' Debug.Print .ListCount For i = 0 To .ListCount - 1 'ListIndex beginnt bei 0 zu zaehlen! ' Debug.Print .List(i) If .List(i) = ActiveSheet.Name Then j = i Next i .ListIndex = j 'aktuelles Register in Liste markieren .Visible = True End With Application.ScreenUpdating = True End Sub Private Sub SortListBox() 'Quelle: http://www.herber.de/forum/archiv/648to652/t651080.htm Dim iLast As Integer, iNext As Integer Dim iTmp With ActiveSheet.ListBox1 For iLast = 0 To .ListCount - 1 For iNext = iLast + 1 To .ListCount - 1 If LCase(.List(iLast)) > LCase(.List(iNext)) Then 'erweitert fuer GROSS-/Kleinschreibung iTmp = .List(iLast) .List(iLast) = .List(iNext) .List(iNext) = iTmp End If Next iNext Next iLast End With End Sub
HTH Frederik------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 07. Mai. 2009 15:34 <-- editieren / zitieren --> Unities abgeben:
Alle beide Varianten funktioniern, nur habt Ihr da schon recht, dadurch das der Code in jede Tabelle eingefügt werden muss, wird diese dann unflexiebel. Ich werden mal sehen, ob mir noch eine andere Lösung einfällt. Bis dahinn kann/soll sich hier jeder zu diesem Thema austoben. Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 07. Mai. 2009 19:08 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Spielwiese? mag auch mit einem Hilfwert (M1) und den Schnipsel (Button hinzufügen) etwas aufgebohrt Code: Private Sub Button_Hinzufuegen() Dim WKS As Worksheet Dim LST As ListBox Set LST = ActiveSheet.ListBoxes.Add(500, 1, 150, 70) With LST .ListFillRange = "" .LinkedCell = "$M$1" .MultiSelect = xlNone .Display3DShading = False .OnAction = "Blattwechseln" End With For Each WKS In Worksheets LST.AddItem WKS.Name Next WKS End Sub
und in einem ModulCode: Sub Blattwechseln() If Not IsNumeric(Range("M1").Value) _ Or Range("M1").Value > Worksheets.Count _ Or Range("M1").Value = 0 Then Exit Sub End If Sheets(Range("M1").Value).Activate End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 08. Mai. 2009 08:23 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Ok, ihr habt's geschafft... mich dazu zu bringen, doch noch das VBA hervorzukramen! Ich habe dazu gleich mal die Idee von Thomas (vielen Dank) aufgegriffen und noch den Sortier - Algo mit eingebaut! Einfach das .txt am Ende des Anhangs entfernen und es sollte funktionieren. @Thomas: nicht wundern, ich hab das 2. Modul entfernt und den Code mit in das erste genommen, um auf mein Array zugreifen zu können! Ich denk, dass jetzt soweit alle Anforderungen von Andreas erfüllt sind, außer, dass das aktive Blatt in der Listbox selektiert sein soll. Irgendwie komme ich dort nicht weiter. Vielleicht fällt ja jemandem noch eine Lösung ein, die nicht in einer Endlosschleife endet! Grüße Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 08. Mai. 2009 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Na, das wird ja immer besser . Zitat: ...außer, dass das aktive Blatt in der Listbox selektiert sein soll.
Das geht auch. Nimm die Mappe aus dem letzten Post; im Modul, gegen Ende der Sub, diesen Code: ... For l = 0 To i - 1 LST.AddItem (Blattnamen(l)) Next'### Bis hierher bekannt - "neuer" Teil ### 'Eintrag fuer aktuelles Register ermitteln: With LST 'Debug.Print .ListCount For i = 1 To .ListCount 'Debug.Print .List(i) If .List(i) = ActiveSheet.Name Then j = i Next i .ListIndex = j 'aktuelles Register in Liste markieren End With End Sub
Jetzt gibt es (nur) noch die Komfort-Kleinigkeit, dass der Eintrag zwar selektiert - also "blau" hinterlegt -, aber noch nicht angezeigt wird: Der User muss scrollen. Hat da wer nen Vorschlag? BTW: Die Register heißen jetzt alle TabelleX. Was passiert, wenn ein Blatt "Schnitzel" heißt? [Edit: Gar nichts - läuft trotzdem ;-) /Edit] ------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 [Diese Nachricht wurde von Paulchen am 08. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 08. Mai. 2009 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Zitat: BTW: Die Register heißen jetzt alle TabelleX. Was passiert, wenn ein Blatt "Schnitzel" heißt? [Edit: Gar nichts - läuft trotzdem ;-) /Edit]
Na ja, dann würd ich noch ne Hopfenkaltschale dazu ordern und glücklich sein! SCNRTobias [Diese Nachricht wurde von MWN am 08. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2020
|
erstellt am: 08. Mai. 2009 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
|
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 08. Mai. 2009 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Zitat: Jetzt gibt es (nur) noch die Komfort-Kleinigkeit, dass der Eintrag zwar selektiert - also "blau" hinterlegt -, aber noch nicht angezeigt wird: Der User muss scrollen. Hat da wer nen Vorschlag?
Na ja, ich würd einfach die Listbox so hoch machen, dass alle Einträge ohne zu scrollen angezeigt werden. Und zwar einfach im Modul1 Code: Set LST = ActiveSheet.ListBoxes.Add(500, 10, 100, 70)
durch
Code: Set LST = ActiveSheet.ListBoxes.Add(500, 10, 100, (Worksheets.count - 1) * 11)
ersetzen und schon "wächst" die ListBox mit! GrüßeTobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 08. Mai. 2009 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Zitat: Jetzt gibt es (nur) noch die Komfort-Kleinigkeit, dass der Eintrag zwar selektiert - also "blau" hinterlegt -, aber noch nicht angezeigt wird...
Da zeigt sich wieder, dass Formular-Steuerelemente unflexibler sind als ihre ActiveX-Brüder. Hilfe gibts z. B. direkt von M$ >>klick<<: Mit .TopIndex = ZAEHLER wird die Liste bis zum (vorher) gewählten Eintrag gescrollt. Der ausgewählte Eintrag steht also ganz oben in der Liste - was nicht bedeutet, dass es sich dabei um den ersten Eintrag handelt. Ein Formular-Element ist dafür nicht ausgelegt. Im Gegenzug kennt das Formular die direkte Verknüpfung zu einem Makro (OnAction), wie von Thomas oben gezeigt. Die Höhe "anzupassen", ist natürlich eine schnell-und-dreckig Lösung . ------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 08. Mai. 2009 15:09 <-- editieren / zitieren --> Unities abgeben:
Ist ja toll was hier in kurzer Zeit passiert. Ich habe zwar gerade nicht die Möglichkeit zu testen dies wird aber schnellst möglich erfolgen. Ich hatte auch schon eine Idee das ganze von einer anderen Seite her zu testen. Seid nicht entäuscht wenn ich es erstmal selber versuchen möchte (bis nicht mehr weiter geht : ) ). Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 15. Mai. 2009 07:19 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hey Andreas, wir würden mal um eine Rückmeldung bitten, vielleicht hat demnächst der ein oder andere genau selbiges Problem und wird in voller Erwartung einer Lösung auf diesen "Fred" stoßen, ihn bis zum Ende lesen um dann in vollster Erwartung feststellen, dass der Fragesteller seine Lösung lieber für sich behält, anstatt die Community teilhaben zu lassen. Im übrigen, jetzt mal ein bisschen OT und ich bin mir sicher, dass jeder das Problem kenn, stelle ich immer mehr mit erschrecken fest, dass diese Phänomen mehr und mehr einzug hier im Forum hält. Man bemüht die Community um Hilfe und um kreative Gedanken, die es scheinbar auch gern macht, denn sonst gäbe es das Forum nicht, hat dann aber nicht mehr die Zeit, oder das Verlangen, die selbst, oder mit Hilfe der Community gefundene Lösung darzustellen. Nix für ungut, mal so am Rande erwähnt. Grüße Tobias
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 15. Mai. 2009 09:08 <-- editieren / zitieren --> Unities abgeben:
|
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 15. Mai. 2009 10:00 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hallo, jetzt hat's schon so viele Antworten hier, dann geb ich meinen Senf auch noch dazu. Im Anhang eine Mappe, welche eine Combobox in den Menüleisten anlegt über die navigiert werden kann. Irgendwie funktioniert der Up- / Dowmload nicht. Dann halt nur den Code. In das Modul "DieseArbeitsmappe": Code: Option ExplicitPrivate Sub Workbook_Activate() If Not objControl(1) Is Nothing Then objControl(1).Visible = True If Not objControl(2) Is Nothing Then objControl(2).Visible = True End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) If Not objControl(1) Is Nothing Then objControl(1).Delete Set objControl(1) = Nothing If Not objControl(2) Is Nothing Then objControl(2).Delete Set objControl(2) = Nothing End Sub Private Sub Workbook_Deactivate() If Not objControl(1) Is Nothing Then objControl(1).Visible = False If Not objControl(2) Is Nothing Then objControl(2).Visible = False End Sub Private Sub Workbook_NewSheet(ByVal Sh As Object) If Not objControl(1) Is Nothing Then prcAddSheets If Not objControl(2) Is Nothing Then prcAddSheets End Sub Private Sub Workbook_Open() prcCreateControl End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Not objControl(1) Is Nothing Then prcCheck End Sub
In ein Standarmodul: Code: Option ExplicitPublic objControl(1 To 2) As CommandBarComboBox Public Sub prcCreateControl() Set objControl(1) = CommandBars(1).Controls.Add(Type:=msoControlComboBox, Temporary:=True) Set objControl(2) = CommandBars(2).Controls.Add(Type:=msoControlComboBox, Temporary:=True) prcAddSheets With objControl(1) .Width = 180 .DropDownWidth = 162 .OnAction = "prcSelect" .Style = msoComboNormal End With With objControl(2) .Width = 180 .DropDownWidth = 162 .OnAction = "prcSelect" .Style = msoComboNormal End With End Sub Private Sub prcSelect() On Error Resume Next If CommandBars.ActiveMenuBar.Index = 1 Then Sheets(objControl(1).Text).Select _ Else Sheets(objControl(2).Text).Select If Err.Number <> 0 Then prcShowName End Sub Public Sub prcAddSheets() Dim intIndex As Integer With objControl(1) .Clear For intIndex = 1 To ThisWorkbook.Sheets.Count .AddItem Text:=Sheets(intIndex).Name Next .DropDownLines = ThisWorkbook.Sheets.Count End With With objControl(2) .Clear For intIndex = 1 To ThisWorkbook.Sheets.Count .AddItem Text:=Sheets(intIndex).Name Next .DropDownLines = ThisWorkbook.Sheets.Count End With prcShowName End Sub Public Sub prcCheck() Dim intIndex As Integer If ThisWorkbook.Sheets.Count = objControl(1).ListCount Then For intIndex = 1 To ThisWorkbook.Sheets.Count If objControl(1).List(intIndex) <> Sheets(intIndex).Name Then prcAddSheets: Exit For Next If intIndex > ThisWorkbook.Sheets.Count Then prcShowName Else prcAddSheets End If End Sub Public Sub prcShowName() objControl(1).Text = ActiveSheet.Name objControl(2).Text = ActiveSheet.Name End Sub
------------------ Gruß Nepumuk [Diese Nachricht wurde von Nepumuk am 15. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 15. Mai. 2009 10:07 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Nepumuk: Hallo,jetzt hat's schon so viele Antworten hier, dann geb ich meinen Senf auch noch dazu. Im Anhang eine Mappe, welche eine Combobox in den Menüleisten anlegt über die navigiert werden kann.
Dei Download geht nicht! Die Idee hatte ich auch schon getestet. Funktionierte auch! War aber nicht ganz das was ich wollte . ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 15. Mai. 2009 10:25 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 15. Mai. 2009 10:30 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
|
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 15. Mai. 2009 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hi, normalerweise achte ich sehr darauf keine Sonderzeichen außer dem Unterstrich und keine Leerzeichen in Dateinamen zu haben. Die ist irgendwie durchgerutscht. Ok, die ist auch aus dem Jahr 2003 da war ich noch nicht so pingelig. ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 15. Mai. 2009 11:18 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hallo Paulchen, wenn du ein Addin für 2007 haben willst, welches die selbe Funktion beinhaltest, dann kann ich dir so etwas schon machen. Die Ribbons sind nun wirklich kein Problem. Die gestalte ich per XML+VBA wie ich Lust habe. ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 15. Mai. 2009 12:25 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von runkelruebe: Und damit streichen wir auch AndreasBo von der Liste der Falscheingestellten ;-)
Was ist das den für eine Liste und was hatte ich da bloß zu suchen?? [rredit] Hi Andreas ich bezog mich auf Deine Aussage: "Dei Download geht nicht!" <- Lüge ;-) mit den richtigen Einstellungen im browser konnte man den auch vor der Umbenennung des files laden ;-) [/rredit]
------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 15. Mai. 2009 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Wow - das nenne ich mal angepasst! @Nepumuk: Nene, ich brauche kein Ribbon. Nur ist eben dass, was in xls <07 noch "benutzerdefinierte Symbolleisten" (und Menüs) waren, in 2007 ein klein wenig anders. Umso mehr hat mich erstaunt, dass die von Dir oben angehängte Datei genau das tut: Sie taucht in 07 unter Add-Ins als Menübefehl auf - mal eben fix aus dem Ärmel geschüttelt. Mich würde interessieren, wie AndreasBos Variante dazu aussieht. VBA und XML macht mich tatsächlich neugierig; nur weicht das dann recht stark vom Thema ab... ------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 15. Mai. 2009 16:11 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hallo Paulchen, damit würde ich auch das Forum sprengen. Da stecken knapp 1.000 Zeilen XML-Code und über 10.000 Zeilen VBA-Code dahinter. Dazu nochmal knapp 1.000 Zeilen VBA-Code zum erzeugen des XML- und des VBA-Codes. Das ist deswegen so aufwendig, weil ein Berechtigungskonzept mit 22 Stufen besteht welche unter anderem das Menü steuert. ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 19. Mai. 2009 07:07 <-- editieren / zitieren --> Unities abgeben:
Hier einmal meine Datei mit einer Symbolleiste! In DieseArbeitsmappe
Code: Option ExplicitPrivate Sub Workbook_Activate() Toolbar ReadSheets End Sub Private Sub Workbook_Deactivate() DeletMenuBars 'ausführen Makro aus Modul 'Statusbar wieder abschalten und alten Status wiedeherstellen Application.StatusBar = False End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) DeletMenuBars 'ausführen Makro aus Modul 'Statusbar wieder abschalten und alten Status wiedeherstellen Application.StatusBar = False End Sub Private Sub Workbook_Open() Toolbar ReadSheets End Sub Private Sub Workbook_NewSheet(ByVal Sh As Object) ReadSheets End Sub
In Modul1
Code: Option ExplicitPublic tbrTabellen As CommandBar Public cbxTabellen As CommandBarControl Sub Toolbar() On Error GoTo Fehler Set tbrTabellen = CommandBars.Add(Name:="Tabellen", Position:=msoBarFloating, Temporary:=True) 'Position:=msoBarTop With tbrTabellen Set cbxTabellen = .Controls.Add(Type:=msoControlDropdown, Before:=.Controls.Count + 1) cbxTabellen.Width = 200 cbxTabellen.OnAction = "SelectSheet" End With Fehler: CommandBars("Tabellen").Visible = True End Sub Sub ReadSheets() Dim tmpSheet Dim tmpSel cbxTabellen.Clear For tmpSheet = 1 To Sheets.Count cbxTabellen.AddItem Sheets(tmpSheet).Name If Sheets(tmpSheet).Name = ActiveSheet.Name Then tmpSel = tmpSheet Next cbxTabellen.ListIndex = tmpSel End Sub Sub SelectSheet() Sheets(cbxTabellen.List(cbxTabellen.ListIndex)).Select End Sub 'Menüleiste löschen Sub DeletMenuBars() On Error Resume Next CommandBars("Tabellen").Delete End Sub 'Ende Kontextmenü
Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette [Diese Nachricht wurde von AndreasBo am 19. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 19. Mai. 2009 07:20 <-- editieren / zitieren --> Unities abgeben:
Hier eine Variante mit einer ListBox in einer Userfom wo trotz geöffneter Userform in Excel gearbeitet wird. Wenn die Mappe ausgeblendet oder minimiert wird so wird die Userform ausgeblendet. Bei aktivierung der Mappe wird die UserForm wieder eingeblendet. In DieseArbeitsmappe
Code: Option ExplicitPrivate Sub Workbook_Activate() UserForm1.Show vbModeless End Sub Private Sub Workbook_Open() UserForm1.Show vbModeless End Sub Private Sub Workbook_NewSheet(ByVal Sh As Object) UserForm1.Show vbModeless End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) If UserForm1.Visible = False Then UserForm1.Show vbModeless End If Call ListBox1_Fill End Sub Private Sub Workbook_Deactivate() UserForm1.Hide End Sub
In Modul
Code: Option ExplicitPublic Sub ListBox1_Fill() Dim ws As Worksheet UserForm1.ListBox1.SetFocus 'soll angewählt sein UserForm1.ListBox1.Clear 'soll geleert werden With UserForm1.ListBox1 .Clear 'Liste Leeren For Each ws In Worksheets 'fuellen... .AddItem ws.Name 'Tabellen in Liste einfügen Next ws End With End Sub
In UserForm1
Code: Option ExplicitPrivate Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ThisWorkbook.Worksheets(Me.ListBox1.Value).Activate End Sub Private Sub UserForm_Activate() Application.ScreenUpdating = False 'Bildschirmaktualisierungen aus Call ListBox1_Fill 'Makro ausführen End Sub Private Sub UserForm_Initialize() Application.ScreenUpdating = False 'Bildschirmaktualisierungen aus Call ListBox1_Fill 'Makro ausführen End Sub Private Sub UserForm_Layout() 'Positionieren der Userform With UserForm1 .Left = Application.Width - .Width - 20 'Horizontale Pos. des UF .Top = Application.Height / 6 'Vertikale Position End With
End Sub
Gruß Andreas ------------------ Ich nutze Boardsuche | Google | Netiquette Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3858 Registriert: 15.10.2003
|
erstellt am: 17. Feb. 2010 18:43 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Guten Abend mit Interesse - und leider mit mangelnden Hintergrundkenntnissen - habe ich dieses Thema überflogen und habe mir aus dem vorigen Beitrag die Tabelle geladen. Bei mir mit Excel 2003 läuft diese Tabelle gut, und ich möchte die Funktion in eine bestehende Tabelle einbauen - damit bin ich derzeit am Ende angelangt. Schritt a: Ich habe den Code aus dem Forumsbeitrag in meine Tabelle kopiert. Da hat der Debugger reklamiert. Schritt b: Ich habe bas, frm und cls aus der Mustertabelle exportiert und in meine Tabelle importiert. Alles ist da, es ist aufrufbar - und Schluss: keine Reaktion, keine Anzeige, keine Fehlermeldung, ... Frage a: Ich vermute, dass der Code in der Tabelle identisch ist mit dem Code im Beitrag? Frage b: Wie bringe ich das zum Laufen? Danke im voraus Peter EDIT: Nachtrag - Das Fenster ist unverschiebbar - richtig? Oder mein Fehler?
------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) [Diese Nachricht wurde von Peter2 am 17. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 17. Feb. 2010 23:39 <-- editieren / zitieren --> Unities abgeben:
|
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3858 Registriert: 15.10.2003
|
erstellt am: 18. Feb. 2010 11:29 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Servus Andreas heute läuft es gut - danke. Aber ich muss nochmals bohren: Der Code mit der Symbolleiste anstelle der Listbox (anderes Posting oben) ist für mich besser, aber kann man es so codieren, dass - die Symbolleiste dort bleibt, wo man sie hingesetzt hat - die Dropdownliste länger wird (mehr Einträge ohne Scrollen aufweist)? Das wäre praktisch ... Danke Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) [Diese Nachricht wurde von Peter2 am 18. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 18. Feb. 2010 17:55 <-- editieren / zitieren --> Unities abgeben:
|
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3858 Registriert: 15.10.2003
|
erstellt am: 18. Feb. 2010 18:44 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Zitat: Original erstellt von AndreasBo: Hallo,also die Position kannst du hier ..
Wenn man das weglässt: ist es dann absolut "benutzerdefiniert" - oder unbrauchbar? Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 18. Feb. 2010 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Hallo zusammen, Zitat: - die Symbolleiste dort bleibt, wo man sie hingesetzt hat - die Dropdownliste länger wird (mehr Einträge ohne Scrollen aufweist)?
zu 1: Ja - einfach auskommentieren: In Excel - Alt+F11 --> VBA-Umgebung - Navigator anzeigen lassen ( Strg+R) - Formulare - UserForm1 wählen, dort den Code der Private Sub UserForm_Layout() komplett auskommentieren. zu 2: Ja. Schnell, einmalig und schmutzig: In besagter Userform die Form anklicken, unten (größer) ziehen, anschließend die ListBox vergrößern. Eleganter ließe sich das vielleicht über den Inhalt der ListBox "dynamisch" steuern?! @Peter: Wie viele Register willst Du denn auflisten? ------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3858 Registriert: 15.10.2003
|
erstellt am: 18. Feb. 2010 22:48 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
Zitat: Original erstellt von Paulchen: ....zu 2: Ja. Schnell, einmalig und schmutzig: In besagter Userform die Form anklicken, unten (größer) ziehen, anschließend die ListBox vergrößern. ...
Achtung - es geht nicht um die Variante mit der "Listbox in der Userform", sondern um die "Dropdownliste in der Symbolleiste" - ohne Userform (erster Beitrag oben vom 19.5.2009) Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 19. Feb. 2010 12:51 <-- editieren / zitieren --> Unities abgeben:
|
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3858 Registriert: 15.10.2003
|
erstellt am: 19. Feb. 2010 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasBo
|
AndreasBo Mitglied TZ & Konstruktion
Beiträge: 861 Registriert: 16.11.2006 ******** Wenn am Anfang alles schief geht, nenne es Version 1.0!
|
erstellt am: 19. Feb. 2010 17:55 <-- editieren / zitieren --> Unities abgeben:
|