Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1768to1772
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
Inhaltsverzeichnis

dynamisch buttons erstellen

dynamisch buttons erstellen
09.07.2020 15:19:28
Steve
Moin Leute, ((Sorry, ich weiss - viel zu lesen - aber ich wollte möglichst präzise erklären))
ich hab ein wenig rcherchiert und möchte nur gerne wissen ob ich vielleicht was übersehen habe.
Vielleicht kann mir jemand sagen ob es doch noch eine andere gangbare Möglichkeit gibt.
Mein derzeitiger Wissensstand bzw. Fähigkeiten:
Ich kann per Button ein neues Sheet erstellen (Kopie eines MASTERSHEETS). Gleichzeitig wird ein Ordner mit dem Sheetnamen erstellt. Das Sheet enthält immer eine Liste mit Einträgen. Für jeden Eintrag wird ein Unterordner mit entsprechendem Namen erstellt und mit dem Namen in der Liste verlinkt.
Aber Hyperlinks sehen doof aus und der User muss sie beim anklicken auch gut treffen.
Nun meine Idee:
Meine Idee war, automatisch für jeden Eintrag in der Liste automatisch ein Button zu erstellen diese sauber untereinander zu sortieren und entsprechen der Namen mit den ebenfalls erstellten Unterordnern zu verbinden.
Das Problem: Die besagte Liste befindet sich in dem MASTERSHEET und KANN sich auch ändern - also weniger oder mehr Einträge.
Es ist aber nicht erforderlich die bereits existierenden Ordner abzuändern. Nur jeder neuer Vorgang - also neues Sheet soll dann halt die geänderten Parameter (Menge der Buttons und Bezeichnung) befolgen.
Meine Recherche:
Das alles soll aber wohl nicht sooo einfach sein, viel Können erfordern und wenn ich das richtig rausgelesen habe sehr fehleranfällig sein.
Ist das so korrekt?
Zwischenlösung:
Als Zwischenlösung überlegte ich mir, das ich einfach in dem MASTERSHEET, sagen wir mal 10Buttons vorbereite.
Wird dann ein neues Sheet erstellt, wird ja auch die Liste mit übernommen. Über eine Schleife werden dann Name und Verknüpfung mit den Unterordnern übernommen und zum Schluss die nicht benötigten Buttons gelöscht. Das beschränkt mich zwar auf die vordefinierten 10 Unterordner aber ich denke das ist immernoch flexibel genug.
Die Spalte mit den Hypelinks könnte ich dann ja entweder direkt mit dem Makro löschen (und mir damit auch den Code für die Hyperlinks sparen) oder einfach die Spalte ausblenden.
Es wäre schön jemand würde sein Wissen mit mir teilen und/oder seine Meinung dazu kundtun. Ich nehme auch gerne was zum lesen. Vielleicht hat ja auch jemand eine wesentlich bessere Idee.
Ich bin dankbar für jeden Input
Liebe Grüße
Steve

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dynamisch buttons erstellen
09.07.2020 15:45:38
Daniel
HI
würde ich nicht über Buttons machen.
Du kannst auch über das BeforeDoubleClick-Event erreichen, dass bei Doppelklick auf eine Zelle Makros oder Aktionen ausgeführt werden.
sowas lässt sich einfacher in der Anzahl variieren als echte Buttons.
Gruß Daniel
AW: dynamisch buttons erstellen
09.07.2020 16:02:47
Steve
Moin Daniel,
das würde auch schon reichen. Dann wäre ja die gesamte Zelle für den Mauszeiger zu "erreichen"
Bisher ist es nur nervig, das - jedenfalls bei kleiner Schriftgröße - das anwählen des hyperlinks fast ein Zielschießen ist.
Verstehe ich das richtig, das ein Dopplklick auf die Zelle dann den Hyperlink auslöst bzw. ein entsprechendes Makro?
Wo muss sowas rein? Nicht in "diese Arbeitsmappe" oder? Ich suche schon nach Erklärungen für diese Funktion, aber hab noch nichts gefunden das es mir so erklärt das ich es verstehe und für mich anpassen kann.
Liebe grüße
Steve
Anzeige
AW: dynamisch buttons erstellen
09.07.2020 16:39:02
Daniel
HI
normalerweise steht der Code im Modul des jeweiligen Tabellenblatts, bzw muss dort als Eventmakro über das DropDown rechts oberhalb des Codefensters erstellt werden.
In DieseArbeitsmappe würde es auch gehen, aber dann gilt das mit dem Doppelklick in allen Tabellenblättern der Mappe.
Im BeforeDoubleClick-Event ist dann in der Variable TARGET hinterlegt, welche Zellen angeklickt wurde.
das kannst du auswerten und damit bestimmen, was im Code gemacht werden soll.
Gruß Daniel
AW: dynamisch buttons erstellen
10.07.2020 12:40:52
Steve
Moin Daniel,
ich hab mich etwas eingelesen und herumprobiert.
Leider hat es nicht ganz geklappt. Ich nehme an ich habe einen Denkfehler.
Mein Code erstellt den Hyperlink. Aber ich möchte ja, das er diesen öffnet.
Irgendwie bekomme ich das aber nicht hin. Fehlt mir da vielleicht eine "Öffnen"-Befehl?
Ich sende dir mal meine Datei und meinen Code. Vielleicht kannst du dir das ja mal ansehen.
Ich danke dir für deinen Tipp. Grundsätzlich gefällt deine Idee mir sehr gut, denn mir kommt da noch eine weitere Idee.
Die Idee:
Es kommt manchmal vor, das sich herausstellt, das ein weiterer Ordner nicht schlecht wäre. Mit der Funktion könnte ich dann doch einfach unter der Liste einen neuen Eintrag machen. Dann doppelklick. Dann prüft die Funktion ob es den Ordner am Ziel schon gibt. Wenn nicht erscheint eine Abfrage ob der Ordner erstellt werden soll. Wenn ja, wird der Ordner erstellt und geöffnet. Wenn nein wird der letzte Eintrag gelöscht.
Sollte doch machbar sein? Oder möchte ich wieder einmal zu weit hinaus?
Hier mein bisheriger Code der leider den Hyperlink erstellen aber nicht öffnen kann.
Private Sub worksheet_beforedoubleclick _
(ByVal target As Excel.Range, cancel As Boolean)
Dim strpfad As String
strpfad = ThisWorkbook.Path
If Not Intersect(target, [N_NEU]) Is Nothing Then
cancel = True
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=strpfad & "\Ordner\" & target. _
Value, _
TextToDisplay:=target.Value
End If
End Sub
Meine Datei: https://www.herber.de/bbs/user/138935.zip
Liebe grüße
Steve
Anzeige
AW: dynamisch buttons erstellen
10.07.2020 13:03:58
Werner
Hallo,
bescheidene Frage:
Warum erstellst du überhaupt Hyperlinks wenn du anzweifelst, dass deine User den "treffen"?
Beiliegender Code (im Tabellenblattmodus) öffnet die Datei, deren Dateiname in Spalte B doppelt angeklickt wurde.
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim strPfad As String, strDatei As String
If Target.Column = 2 And Target.Row > 6 Then
If Target  "" Then
Cancel = True
strPfad = ThisWorkbook.Path & "\"
strDatei = Target & ".xlsx"
On Error GoTo Ausgang
Workbooks.Open (strPfad & strDatei)
Exit Sub
Else
Exit Sub
End If
End If
Ausgang:
On Error GoTo 0
MsgBox "Fehler: Die Datei " & Target & " existiert nicht."
End Sub
Gruß Werner
Anzeige
AW: dynamisch buttons erstellen
12.07.2020 20:17:45
Steve
Moin Werner,
Die Antwort ist einfach. Ich hielt es zunächst für eine gute Idee und wurde dann eines besseren belehrt.
Ich hab die Schriftgrösse recht klein und linksbündig gemacht. Ist nun das Wort auch noch kurz verändert sich der Mauszeiger (bei einer dynamischen Tabelle) in einen schwarzen Pfeil nach rechts. Das hat zu Folge das man nicht sauber den hyperlink verwenden kann.
Das fand ich bei den Tests sehr unbefriedigend und suchte fortan nach einer besseren Lösung.
Ich danke dir für deinen Beitrag (und das hinterfragen - etwas das immer sehr gut ist um seine eigene Ansicht auf den Prüfstand zu stellen)
Bei deiner Version wird ja schlussendlich eine Datei geöffnet aber ich möchte einen Ordner öffnen.
Aber das glaube ich, bekomme ich angepasst.
In dem unteren Bereich der Fehlerbearbeitung sollte ich dann ja eigentlich gut die Abfrage ob der noch nicht existierende Ordner erstellt werden soll, reinbekommen denke ich.
Das werde ich morgen mal ausprobieren und dann eine Rückmeldung geben.
Vielen lieben Dank und einen schönen Sonntag Abend.
Steve
Anzeige
AW: dynamisch buttons erstellen
12.07.2020 22:08:36
Steve
Moin Werner,
Die Antwort ist einfach. Ich hielt es zunächst für eine gute Idee und wurde dann eines besseren belehrt.
Ich hab die Schriftgrösse recht klein und linksbündig gemacht. Ist nun das Wort auch noch kurz verändert sich der Mauszeiger (bei einer dynamischen Tabelle) in einen schwarzen Pfeil nach rechts. Das hat zu Folge das man nicht sauber den hyperlink verwenden kann.
Das fand ich bei den Tests sehr unbefriedigend und suchte fortan nach einer besseren Lösung.
Ich danke dir für deinen Beitrag (und das hinterfragen - etwas das immer sehr gut ist um seine eigene Ansicht auf den Prüfstand zu stellen)
Bei deiner Version wird ja schlussendlich eine Datei geöffnet aber ich möchte einen Ordner öffnen.
Aber das glaube ich, bekomme ich angepasst.
In dem unteren Bereich der Fehlerbearbeitung sollte ich dann ja eigentlich gut die Abfrage ob der noch nicht existierende Ordner erstellt werden soll, reinbekommen denke ich.
Das werde ich morgen mal ausprobieren und dann eine Rückmeldung geben.
Vielen lieben Dank und einen schönen Sonntag Abend.
Steve
Anzeige
Hallo Werner, es klappt.....
13.07.2020 15:53:24
Steve
Hallo Werner,
vielen Dank für eure Hilfe (also Daniels schups in die richtige Richtung und dein Code).
Ich habe es, denke ich, hinbekommen.
Ich habe deinen Code versucht mit meinen bisherigen Kenntnissen umzuschreiben und zu erweitern.
Ich kann die Tabelle verschieben ohne das was passiert.
Man kann durch einen neuen Eintrag einen weiteren Ordner anlegen.
Und der Ordner wird wie gewünscht geöffnet wenn man Doppelklick auf die entsprechende Zelle macht.
Es wäre schön du könntest dir meinen Code eben anschauen und mir sagen ob ich den so lassen kann. Ich habe mitlerweile so viel von dir gelernt und ich würde mich freuen, wenn ich keine groben Schnitzer mehr drin habe.
Vielen Lieben Dank und eine schöne Woche.
Private Sub worksheet_beforedoubleclick(ByVal target As Range, cancel As Boolean)
Dim strpfad As String
Dim anlegen As Long
If Not Intersect(target, [N_NEU]) Is Nothing Then
cancel = True
strpfad = ThisWorkbook.Path & "\Ordner\"
On Error GoTo Ausgang
ChDir strpfad & target
Application.Dialogs(xlDialogOpen).Show
Exit Sub
Else
Exit Sub
End If
Ausgang:
On Error GoTo 0
anlegen = MsgBox(Prompt:="Soll der Ordner """ & target & """ angelegt werden?", _
Buttons:=vbYesNo + vbQuestion)
If anlegen = vbNo Then
Exit Sub
Else
MkDir (strpfad & target)
ChDir strpfad & target
Application.Dialogs(xlDialogOpen).Show
End If
End Sub
Steve
Anzeige
AW: Hallo Werner, es klappt.....
13.07.2020 21:55:24
Werner
Hallo,
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim strpfad As String
If Not Intersect(Target, [N_NEU]) Is Nothing Then
If Target  "" Then
Cancel = True
strpfad = ThisWorkbook.Path & "\Ordner\"
If Dir(strpfad & Target, vbDirectory)  "" Then
ChDir strpfad & Target
Application.Dialogs(xlDialogOpen).Show
ElseIf MsgBox(Prompt:="Soll der Ordner """ & Target & """ angelegt werden?", _
Buttons:=vbYesNo + vbQuestion) = vbYes Then
MkDir (strpfad & Target)
ChDir strpfad & Target
Application.Dialogs(xlDialogOpen).Show
End If
End If
End If
End Sub
Gruß Werner
Anzeige
AW: Hallo Werner, es klappt.....
14.07.2020 13:41:20
Steve
Ach Herrje,
da war ich ja umsonst stolz es hinbekommen zu haben. Junge, junge muss ich noch viel lernen.
Ich brauchte eine kleine Weile um zu verstehen warum da nirgendwo "Exit sub" steht.
Aber ich denke ich hab es begriffen. Wird eine Bedingung nicht erfüllt dann landet man direkt bei "End sub".
Erinnert mich an mehrfach verschachtelete, WENN Formeln.
Vielen Dank dafür
Steve
Gerne u. Danke für die Rückmeldung. o.w.T.
14.07.2020 15:22:31
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige