PDA

Vollständige Version anzeigen : Dynamisches Generieren und ausführen von VBA Makros!


borntoflybert
08.07.2014, 09:12
Hallo an alle Helferleins!

Folgender Code generiert mir richtig dynamischen Code bei untenstehenden Call-Prozedur-Befehlen. Leider habe ich auch dort das Problem, dass ich zur Laufzeit auch den Code nochmal Kompilieren muss.

Also, wenn ich das Makro im ersten Anlauf mit den ersten drei Calls starte, dann geht's, wenn das vierte auskommentiert ist und dann der zweite Start nur mehr die Prozedur erstelleObjekte alleine aufrufe, dann geht's!

Leider klappt das mit den Befehlen unten nicht! Gibt's da überhaupt eine Lösung?



Option Explicit
Public OBJD1 As New Klasse1
Public makroGestartet As Boolean

Public Sub init_Dia()

Dim objDiaCount As ChartObject 'Brauche ich um die Anzahl der Objekte zu bestimmen
Dim i, j, lngZaehler As Long
Dim varHelper As Long

' Ermöglicht den EinAusschaltmechanismus für das Makro
' Public makroGestartet ist mit der Deklaration auf false gesetzt
' wie praktisch - so braucht man es nur noch auf false abfragen ;)
If makroGestartet = False Then

MsgBox ("Das Makro wurde gestartet!")

lngZaehler = ActiveSheet.ChartObjects.Count

Call schreibeEventHandlerInKlasse(lngZaehler)
Call subloesche ' Zum Löschen, für den Fall dass in Mdl Variablen Müll ist
Call instanziereObjekte(lngZaehler)
'Application.Run erstelleObjekte
'Call erstelleObjekte() Alle vier Calls hintereinander aufgerufen lässt
'das Programm abschmieren, muss was mit dem dynamischen Generieren zur Laufzeit zu tun
'Meine Frage, wie kann ich kompilieren während der Laufzeit? Application.run funktionieret
'nicht und auch 'ThisWorkbook.VBProject.VBE.CommandBars.FindControl(msoControlButton, 578).Execute


'Lege den Schalter wieder um :)
makroGestartet = True
Else
MsgBox ("Das Makro wurde beendet!")
makroGestartet = False
Call destroy_Dia
End If

End Sub
Sub destroy_Dia()
Set OBJD1 = Nothing
End Sub

Danke für Eure Bemühungen!
mfg BorntoflyBert

BrunMi
08.07.2014, 09:28
Hallo,

Ich weiß dafür jetzt auch keine Lösung und kann dir auch nicht sagen ob es möglich ist oder nicht, aber ich hab da einen Link gefunden der dir vielleicht weiterhelfen könnte.

http://support.microsoft.com/kb/219905/de

LG
BrunMi

borntoflybert
08.07.2014, 09:35
Hallo ich habe mir diesen Beitrag schon angesehen!

Ich habe es jedenfalls nicht zum Laufen bekommen, bevor ich diesen Thread hier gepostet habe, leider, leider!

Hat es jemand schon geschafft, diesen MS-Code laut dem Link in Excel 2013 zum Laufen zu bringen?

LG

BorntoflyBert

R J
08.07.2014, 10:11
Hi Bert,

zunächst, VBA wird nicht wirklich kompiliert (s. hier (http://de.wikipedia.org/wiki/Visual_Basic_for_Applications)).
Das bedeutet, Du kannst auch zur Laufzeit noch Änderungen vornehmen. Zumindest bei den Objekten, die noch nicht erstellt wurden...
Als Zweites kann man Deine Klassenfunktionen nur erahnen. Aber wenn ich lese:
schreibeEventHandlerInKlasse(lngZaehler)
...dann frage ich mich schon, was das soll. Du erstellst eine Klasse und willst in der Klasse (die Charts darstellen soll) für jedes zu erstellende Objekt aus dieser Klasse einen eigenen Eventhandler?
Ich sehe zwar nicht, was in dieser Prozedur passiert, was ich vermute ist aber, dass Du das Prinzip von Klassen nicht verinnerlicht hast. Vielleicht solltest Du Dich vorher noch einmal damit beschäftigen...

borntoflybert
08.07.2014, 10:24
Hallo!

Vielleicht kann man da mal einen Blick darauf werfen!

Danke!

borntoflybert
08.07.2014, 13:08
Hallo habt Ihr vielleicht schon was gefunden zu meinem Problem?

LG

BorntoflyBert