PDA

Vollständige Version anzeigen : Inhaltsverzeichnis auf Buttons oder Combobox verteilen?


kurze Frage
04.04.2012, 19:58
Hallo zusammen,

ich erzeuge mit

Private Sub CommandButton1_Click()
Dim Tabelle As Worksheet
Dim i As Integer
Worksheets("Stammblatt").Select
Columns("ai:ai").Select
Selection.ClearContents

i = 11
For Each Tabelle In ActiveWorkbook.Worksheets

If Tabelle.Name <> "Stammblatt" And Tabelle.Visible = True Then
Cells(i, 35).Value = Tabelle.Name
Tabelle.Hyperlinks.Add Anchor:=Cells(i, 35), _
Address:="", SubAddress:="'" & Tabelle.Name & "'" & _
"!A1", ScreenTip:="Hyperlink klicken", _
TextToDisplay:=Tabelle.Name
i = i + 1
End If
Next Tabelle

ein Inhaltsverzeichnis aller sichtbaren Tabellenblätter.
Erst sollte das in einem extra Tabellenblatt stehen, da gab es kein Problem.

Da sich jetzt aber abzeichnet, dass man immer in einem bestimmten Blatt (dem "Stammblatt" aus dem Code oben) arbeiten, kam mir die Idee, das Verzeichnis in das Blatt zu machen, um von dort aus springen zu können.

Das Problem ist, dass in dem Bereich, wo das Verzeichnis am sinnvollsten liegen sollte, die Zeilenhöhen unterschiedlich sind und sein müssen, so dass man manche Einträge nicht lesen kann und es generell unschön ist, wenn das Inhaltsverzeichnis nicht einheitlich ist.

2 Ideen hatte ich, komme aber nicht so richtig weiter.

1. ich kann Buttons Hyperlinks zuweisen, weiß aber nicht, wie ich in dem oberen Code dynamisch soviele Buttons mit der jeweiligen Beschriftung (und dem funktioniernden Hyperlink) erzeugen lassen müsste...

2. kann man die ermittelten Hyperlinks nicht "einfach" als dropdown in einer ComboBox anzeigen lasssen?

Fragmentversuch....

For
'each hyperlink
.AddItem
Next iCounter
.ListIndex = 1


Welches wäre die elegantere Lösung und wie müsste ich rangehen?

Danke!!

josef e
04.04.2012, 20:29
<div style="width:98%; margin-left:5px; margin-right:15px; text-align:justify;">
Hallo Claudia,

das geht z. B. so.

<div style="background-color:#F5F5F5; border-width:2px; border-style: groove; border-color:#ff9966; padding:4px;"><nobr><span style="font-family:Courier New,Arial; font-size:8pt ;" ><span style="color:#008000"; >' **********************************************************************</span><br /><span style="color:#008000"; >' Modul: Modul1 Typ: Allgemeines Modul</span><br /><span style="color:#008000"; >' **********************************************************************</span><br /><br /><span style="color:#0000FF"; >Option</span> <span style="color:#0000FF"; >Explicit</span><br /><br /><b><span style="color:#0000FF"; >Sub</span> createIndex()</b><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Dim</span> objSh <span style="color:#0000FF"; >As</span> Worksheet, objShp <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >Object</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Dim</span> dblLeft <span style="color:#0000FF"; >As</span> Double, dblTop <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >Double</span><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<span style="color:#0000FF"; >Const</span> cstrStartCell <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >String</span> = <span style="color:#808080"; >"B5"</span> <span style="color:#008000"; >'Adresse der Zelle in der die Buttons starten sollen</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Const</span> clngButtonHeight <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >Long</span> = 22 <span style="color:#008000"; >'H&ouml;he der Schaltfl&auml;chen</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Const</span> clngButtonWidth <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >Long</span> = 95 <span style="color:#008000"; >'Breite der Schaltfl&auml;chen</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Const</span> clngDistance <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >Long</span> = 3 <span style="color:#008000"; >'Abstand zwichen den Buttons</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Const</span> clngFontSize <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >Long</span> = 11 <span style="color:#008000"; >'Schriftgr&ouml;&szlig;e des Schaltfl&auml;chentextes</span><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<span style="color:#0000FF"; >With</span> Sheets(<span style="color:#808080"; >"Stammblatt"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >For</span> Each objShp In .Shapes<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >If</span> objShp.Name Like <span style="color:#808080"; >"INDEX_*"</span> <span style="color:#0000FF"; >Then</span> objShp.Delete<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >Next</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dblLeft = .Range(cstrStartCell).Left<br />&nbsp;&nbsp;&nbsp;&nbsp;dblTop = .Range(cstrStartCell).Top<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >For</span> Each objSh In ThisWorkbook.Worksheets<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >If</span> <span style="color:#0000FF"; >Not</span> objSh.Name = .Name <span style="color:#0000FF"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >Set</span> objShp = .Buttons.Add(dblLeft, dblTop, clngButtonWidth, clngButtonHeight)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >With</span> objShp<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Font.Size = clngFontSize<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Text = objSh.Name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.OnAction = <span style="color:#808080"; >"jump"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Name = <span style="color:#808080"; >"INDEX_"</span> & objSh.Index<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >End</span> <span style="color:#0000FF"; >With</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dblTop = dblTop + clngButtonHeight + clngDistance<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >End</span> <span style="color:#0000FF"; >If</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF"; >Next</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >End</span> <span style="color:#0000FF"; >With</span><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<span style="color:#0000FF"; >Set</span> objShp = <span style="color:#0000FF"; >Nothing</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Set</span> objSh = <span style="color:#0000FF"; >Nothing</span><br /><b><span style="color:#0000FF"; >End</span> <span style="color:#0000FF"; >Sub</span></b><br /><br /><br /><b><span style="color:#0000FF"; >Sub</span> jump()</b><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Dim</span> objShp <span style="color:#0000FF"; >As</span> <span style="color:#0000FF"; >Object</span><br />&nbsp;&nbsp;<span style="color:#0000FF"; >Set</span> objShp = Sheets(<span style="color:#808080"; >"Stammblatt"</span>).Shapes(Application.Caller)<br />&nbsp;&nbsp;<span style="color:#0000FF"; >On</span> <span style="color:#0000FF"; >Error</span> <span style="color:#0000FF"; >Resume</span> <span style="color:#0000FF"; >Next</span><br />&nbsp;&nbsp;Application.Goto Sheets(objShp.DrawingObject.Text).Range(<span style="color:#808080"; >"A1"</span>)<br />&nbsp;&nbsp;<span style="color:#0000FF"; >Set</span> objShp = <span style="color:#0000FF"; >Nothing</span><br /><b><span style="color:#0000FF"; >End</span> <span style="color:#0000FF"; >Sub</span></b><br /><br /></span></nobr></div>


</div>

<div style="width:100px; text-align:center; color:white; font-style:italic; font-size:0.8em; font-family:Tahoma; background-color:royalblue;margin-left:5px; margin-top:15px; padding:4px; border:3px double darkblue;">&laquo; Gru&szlig; Sepp &raquo;</div>

kurze Frage
04.04.2012, 20:34
ich probier es gleich aus... frag mich nur wie du das machst... hast du für alle meine Fragen fertige Bausteine, die du dann "nur noch" individualisiert?...
wow

kurze Frage
04.04.2012, 20:41
mehrere Fragen, da erstmal nix passiert ist:

heißt das,

- dein Code ist ganz anstelle von meinem, also meine "erzeugte Hyperlinkliste" wird nicht benutzt, richtig? (hatte gesucht, wo denn das nun eingelesen wird)
- die Combobox ist keine Idee statt der Buttons?
- die Buttons find ich nicht schlechter als das Dropdown - doofe Frage nur: wie "starte" ich denn den Code aus dem Klassenmodul - weiß ich das nem Button zu oder was muss ich tun, damit sich was tut?

josef e
04.04.2012, 21:20
<div style="width:98%; margin-left:5px; margin-right:15px; text-align:justify;">
Hallo Claudia,

dein Code wird nicht benutzt, das ist richtig.
Klar kann man auch eine ComboBox erstellen, oder eine ListBox, das musst du schon selber entscheiden, was die besser gefällt.
Der Code gehört nicht in ein Klassenmodul, sondern in ein "einfaches" allgemeines Modul. Und klar kannst du einem Button den Code zuweisen, oder in einfach so mit F5 im Modul starten.
Alternativ zu Schaltflächen kann man auch Formen verwenden, die könnten auch Grafisch etwas gefälliger gestaltet werden.

Man kann den Code auch durch das Activate-Ereignis von 'Stammblatt' starten, dann werden bei jedem Wechsel auf das Blatt die Buttons neu erstellt. Das hängt alles nur von deinen Ansprüchen/Gegebenheiten ab.
</div>

<div style="width:100px; text-align:center; color:white; font-style:italic; font-size:0.8em; font-family:Tahoma; background-color:royalblue;margin-left:5px; margin-top:15px; padding:4px; border:3px double darkblue;">&laquo; Gru&szlig; Sepp &raquo;</div>

Wolf38
05.04.2012, 06:04
Morgen Sepp,

habe deinen tollen Code grad gesehen und wollte dich fragen ob du mir nicht sagen kannst wie man das automatisiert. wenn ich ein neuen Tabellennamen erstelle das sich die Buttons(Tabellennamen) gleich aktuallisieren.

wäre super wenn du eine lösung für mich hättest.


Danke !

Gruss
Wolf

kurze Frage
05.04.2012, 07:53
Danke!!

Wer lesen kann ist klar im Vorteil.... ich habe es so gemacht wie du vorgeschlagen hast - on activate, dann braucht keiner von Hand das Verzeichnis aktualisieren, es ist immer up to date und man kann nix vergessen.

Und vor "for each worksheet" habe ich noch meine visible-Abfrage mit If eingebaut, damit es mir nur Buttons für die sichtbaren Blätter erzeugt.

Vielen Dank!!


PS: Wolf: wenn du es auch auf activate legst, aktualisiert es sich auch, sobald du eine Tabelle umbenennst oder eine neue einfügst

kurze Frage
05.04.2012, 10:45
Hallo Sepp, warum will denn der Button keine Farbeigenschaft annehmen?
:-(

wollte dem gerne die Registerfarbe über tab.ColorIndex geben... wäre nur ne nette Spielerei, aber er sagt Objekt unterstützt Eigenschaft nicht.

josef e
05.04.2012, 18:08
<div style="width:98%; margin-left:5px; margin-right:15px; text-align:justify;">
Hallo Claudia,

ganz einfach, weil eine solche Schaltfläche keine entsprechende Eigenschaft hat;-))

Das geht z. B. mit Formen.


</div>

<div style="width:100px; text-align:center; color:white; font-style:italic; font-size:0.8em; font-family:Tahoma; background-color:royalblue;margin-left:5px; margin-top:15px; padding:4px; border:3px double darkblue;">&laquo; Gru&szlig; Sepp &raquo;</div>

kurze Frage
15.01.2013, 13:59
Hallo Sepp,

ich habe dieses Thema nochmal ausgegraben.

Mit einem anderen Code will ich einzelne Tabellenblätter per Mail verschicken -

Sub Arbeitsblatt_Email()
Dim Blatt As Integer
'gekürzt...

Set objOL = CreateObject("Outlook.Application")
Set objMail = objOL.CreateItem(0)

'set Blatt
Blatt = InputBox("Welches Offerblatt soll gesendet werden?" & Chr(13) & _
"Bitte die Blattnummer des Offers auswählen")

dann kommt Sheets(Blatt).Copy etc., speichern als neue Datei mit Name aus zelle, Mail erzeugen, anzeigen, per hand senden, Zwischendatei mit dem Blatt löschen etc. - funtkioniert alles.

ABER: man muss die Blattnummer eingeben. Da die Datei recht groß ist, hab ich den Verzeichniscode einfach so geändert, dass auf dem Button Name und Nummer stehen
.Text = objSh.Index & " " & objSh.Name
blöderweise geht dann Jump nicht mehr, weil das ja auf den Name springen will und das Tabellenblatt die Nummer nicht dran hat.


Wie müsste ich Jump ändern, damit es wieder geht?
Oder die Tabellenblätter per Code auch mit Indexnummer versehen?
Oder im Mailsub "einfach" Blatt nicht als integer definieren, sondern string? Und dann den Blattnamen in die Box eingeben lassen?


Vielen Dank!!!
Claudia

kurze Frage
15.01.2013, 14:02
Ok, 3. hat es sofort gebracht. Das war ja einfach... vielleicht hilft es jemand anderem auch.

Kann gerne das komplette zur Verfügung stellen