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.
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)
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)
Top
#4
Konnte eine Lösung finden. Siehe oben bei EDIT:
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)
Top
#6
(09.07.2018, 08:16)Mr.Invisible schrieb: Konnte eine Lösung finden. Siehe oben bei EDIT:

hast Du den erzeugten Button schon mal gestest? Smile

Gruß Uwe
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
Top
#8
(09.07.2018, 08:23)Kuwer schrieb: hast Du den erzeugten Button schon mal gestest? Smile

Gruß Uwe

Ja funktioniert einwandfrei  Blush
Top


Gehe zu:


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