Supportnet / Forum / Tabellenkalkulation
Kniffeliges Makro zum Datei Öffnen
Frage
Guten Morgen ihr lieben Excel-Bastler,
ich bastle jetzt seit einigen Tagen an einem kleinen Programm und komme nicht mehr weiter.
Ziel ist es, eine Menüleiste in Excel zu erstellen, die verschiedene Dateien öffnet. Soweit eigentlich kein Problem.
Jetzt sind mir natürlich nicht die Dateien bekannt, die geöffnet werden sollen, da die Datei nicht für mich bestimmt ist.
In einem Sheet sollen die jeweiligen Benutzer den Pfad und Dateinamen eintragen, auf ein Knöpfchen drücken und das Ding soll laufen.
Mein Problem liegt darin, den Schaltflächen den Befehl zum Öffnen zu geben, da die Methode .OnAction nur den Namen eines Makros akzeptiert bzw. eine Variable, die einen solchen enthält.
Ich kann also nicht innerhalb einer Schleife den Befehl .OnAction=Workbooks.Open(Variable) eingeben.
Nachfolgend der Code.
[Code]
Dim KFMenue
Sub Menüleiste_FSJ_neu()
'Version 1.02
'Datum 25.10.2004
'Erstellt von Kevin Flödl
Application.CommandBars.Add(Name:="FSJ Dateimenü").Visible = True
Set KFMenue = CommandBars("FSJ Dateimenü")
With KFMenue
.Visible = True
.Position = msoBarBottom
End With
schalter_FSJMenue
End Sub
Sub schalter_FSJMenue()
'Version 1.05
'Datum 26.10.2004
'Erstellt von Kevin Flödl
'Spalte A enthält eine Lfd.Nr für die Gruppen
'Spalte B enthält die Gruppenbezeichnung für die Popups
'Spalte C enthält eine Berechnung über Anzahl der Befehle pro Popup
'D2 enthält die Anzahl der Gruppen
'D4 enthält die Anzahl der gesamten Befehle im Menü
'Spalte E enthält die Zuordnung der Befehle zu einer Gruppe
'Spalte F enthält die Bezeichnung der Datei
'Spalte G enthält den Pfad der Datei inkl. Dateinamen
Worksheets("Haupt").Activate
Anzahl_Gruppen = Range("D2").Value
Anzahl_Links = Range("D4").Value
'Sortiert die Spalten A bis C nach A
Columns("A:C").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Sortiert die Spalten E bis G nach E
Columns("E:G").Select
Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("C2").Select
For i = 1 To Anzahl_Gruppen
Set Popup = KFMenue.Controls.Add(Type:=msoControlPopup, before:=i)
Range("A1").Select
ActiveCell.Offset(i, 0).Activate
GruppenNr = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
cap = ActiveCell.Value
Popup.Caption = cap
For j = 1 To Anzahl_Links
Range("e1").Activate
ActiveCell.Offset(j, 0).Activate
If ActiveCell.Value = GruppenNr Then
Set neuButton = Popup.Controls.Add(Type:=msoControlButton, before:=j)
ActiveCell.Offset(0, 1).Activate
cap = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
act = ActiveCell.Value
With neuButton
.Caption = cap
.OnAction = act
End With
End If
Next j
Next i
End Sub
Sub Menueleiste_FSJ_Delete()
CommandBars("FSJ Dateimenü").Delete
End Sub
[/Code]
Vielleicht kann mir ja jemand den entscheidenden Tip geben. Würde mich freuen.
Bis dann
Nachtrabe
Antwort 1 von Nachtrabe
Hallo ihr lieben,
leider habe ich noch keine Lösung und werde wohl auf eine Wald-und-Wiesenprogrammierung zurückgreifen müssen. Falls jemand doch noch einen Hinweis hat, würde ich mich freuen.
Bis dann
Nachtrabe
leider habe ich noch keine Lösung und werde wohl auf eine Wald-und-Wiesenprogrammierung zurückgreifen müssen. Falls jemand doch noch einen Hinweis hat, würde ich mich freuen.
Bis dann
Nachtrabe
Antwort 2 von nighty
hi nachtrabe :)
ich koennte dir nur raten im vbeditor f8 zu benutzen,dann werden von einem makro pro druck auf f8 ein befehl abgearbeitet,die var sind einfach zu kontrollieren ,mit dem mousezeiger darueber und schon wird dessen wert angezeigt,so ist fehlerlokalisierung doch einfach :))
gruss nighty
ich koennte dir nur raten im vbeditor f8 zu benutzen,dann werden von einem makro pro druck auf f8 ein befehl abgearbeitet,die var sind einfach zu kontrollieren ,mit dem mousezeiger darueber und schon wird dessen wert angezeigt,so ist fehlerlokalisierung doch einfach :))
gruss nighty
Antwort 3 von Nachtrabe
Hi nighty,
lieb gemeint, und F8 ist in der Regel auch sehr nützlich.
Aber ich weiß ja wo der Fehler liegt, nur kenn ich die Lösung nicht.
Die Eigenschaft .OnAction verweist i.d.R. auf ein Makro. Durch meine Schleifen habe ich versucht, einer Variablen den Wert verschiedener Zellen zuzuordnen (in denen die Dateinamen und Pfade stehen). Nehme ich Makronamen, behält der jeweilige ControlButton den Wert. Bei Dateinamen brauche ich, um diese zu öffnen jedoch den Befehl "Workbooks.Open()" Und der verträgt sich nicht mit .OnAction !
Ich will jedoch nicht ein Makro mit x Variablen erstellen, wo jeder Zellwert einer Variablen zugeordnet wird. Das ist weder Sinnvoll (Was passiert bei X+1 eingetragenen Dateien...) noch schnell.
Aber trotzdem Danke
Nachtrabe
lieb gemeint, und F8 ist in der Regel auch sehr nützlich.
Aber ich weiß ja wo der Fehler liegt, nur kenn ich die Lösung nicht.
Die Eigenschaft .OnAction verweist i.d.R. auf ein Makro. Durch meine Schleifen habe ich versucht, einer Variablen den Wert verschiedener Zellen zuzuordnen (in denen die Dateinamen und Pfade stehen). Nehme ich Makronamen, behält der jeweilige ControlButton den Wert. Bei Dateinamen brauche ich, um diese zu öffnen jedoch den Befehl "Workbooks.Open()" Und der verträgt sich nicht mit .OnAction !
Ich will jedoch nicht ein Makro mit x Variablen erstellen, wo jeder Zellwert einer Variablen zugeordnet wird. Das ist weder Sinnvoll (Was passiert bei X+1 eingetragenen Dateien...) noch schnell.
Aber trotzdem Danke
Nachtrabe