Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - CommandButton mit Code hinzufügen
#1
Hallo Zusammen,

in meiner Excel Arbeitsmappe 1 habe ich einen CommandButton der mir eine neue Arbeitsmappe erstellt, in der ich gerne mit VBA einen CommandButton mit Code einfügen möchte. Allerdings erhalte ich immer die Fehlermeldung: "Laufzeitfehler 9: Index außerhalb des gültigen Bereichs".

Wie muss ich meine Code ändern damit das Funktioniert?

Code:
Sub New_Workbook_Click()
   Dim relativePath As String
   Dim btn1 As Object
   Dim Code As String

   ' Add New Workbook and save it in same Folder:
   Workbooks.Add
   relativeString = ThisWorkbook.Path & "\Test2"
   ActiveWorkbook.SaveAs Filename:=relativeString & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

   ' Add CommandButton:
   
   Set btn1 = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _    
       , DisplayAsIcon:=False, Left:=105, Top:=175, Width:=50, Height:=25)
   ActiveSheet.OLEObjects(1).Object.Caption = "Watch"
   btn1.Name = "Watch AZ"
   Code = "Sub Watch_Click()" & vbCrLf
   Code = Code & "Call Watch_AZ_Sheet" & vbCrLf
   Code = Code & "End Sub"    

   ' DIESER TEIL VERURSACHT DENN FEHLER:

   With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
       .insertlines .CountOfLines + 1, Code
   End With

End Sub

With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule --> Dieser Teil spuckt den Fehler aus.

Bei der Makro-Sicherheit habe "Zugriff auf das VBA-Projektobjektmodell vertrauen" aktiviert.

Ich hoffe jemand kann mir hierzu helfen. Danke

EDIT:

Konnte eine Lösung finden.

Mit With ActiveWorkbook.VBProject.VBComponents(Worksheet(ActiveSheet.Name).CodeName).CodeModule funktioniert es.
Antworten Top
#2
Moin!
Warum erstellst Du Dir nicht einfach eine Vorlage (.xltm) mit Button und Code.
In der .Add-Methode kannst Du dann den Pfad zur Vorlage angeben:

Workbooks.Add Template:="DeinPfad\Test.xltm"

Dann ersparst Du Dir den überflüssigen Zugriff auf das Objektmodell.
Übrigens wird dieser in vielen Unternehmen (berechtigt) rigoros gesperrt!

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
… und um Deine Frage zu beantworten:
Edit:
Du wirst die Zeilen wohl einzeln schreiben müssen.
Detaillierte Anweisungen siehst Du hier:
http://www.cpearson.com/excel/vbe.aspx
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#4
Konnte eine Lösung finden. Siehe oben bei EDIT:
Antworten Top
#5
Ändert absolut nichts an meiner Empfehlung aus #2.
Außerdem dürfte die Spende eines s vonnöten sein:
Worksheets(ActiveSheet.Name)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
(09.07.2018, 07:16)Mr.Invisible schrieb: Konnte eine Lösung finden. Siehe oben bei EDIT:

hast Du den erzeugten Button schon mal gestest? Smile

Gruß Uwe
Antworten Top
#7
Hallo, :19:

das kann nicht funktionieren:


Code:
btn1.Name = "Watch AZ"

Eine Sub mit Leerzeichen geht nicht. :21:

Wenn Du nicht möchtest, dass der Code des CommandButton in der Makroliste angezeigt wird, solltest Du ein "Private" davor setzten.


Code:
Code = "Private Sub WatchAZ_Click()" & vbCrLf
________
Servus
Case
Antworten Top
#8
(09.07.2018, 07:23)Kuwer schrieb: hast Du den erzeugten Button schon mal gestest? Smile

Gruß Uwe

Ja funktioniert einwandfrei  Blush
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste