Microsoft Excel

Herbers Excel/VBA-Archiv

Makro an neues Workbook übergeben | Herbers Excel-Forum


Betrifft: Makro an neues Workbook übergeben von: Berndi
Geschrieben am: 24.01.2010 23:11:11

Hallo Gemeinde !

Ich stehe eben etwas auf dem Schlauch.

Ich erzeuge über ein AddOn eine neue Excel-Arbeitsmappe mit einem Arbeitsblatt.
Jetzt möchte ich auf dieser neuen Arbeitsmappe ein Makro ausführen, weiß aber nicht, wie ich das anstellen soll.
Die Makros im AddOn lassen sich nicht auf die neue Mappe portieren ...

Weis jemand Rat ?

  

Betrifft: Da sehe ich schwarz, denn aus einem... von: Luc:-?
Geschrieben am: 25.01.2010 00:25:21

...geschützten AddOn/AddIn lässt sich nichts portieren, Bernd!
Und das wäre auch nicht nötig, wenn die Makros des AddOns mit beliebigen Mappen arbeiten können, was normalerweise auch der Fall sein sollte. Wenn das nicht so ist, wurde das AddOn kurzsichtig pgmiert. Bei einem AddIn wäre das zwingend, denn es bleibt außerhalb des VBEditors unsichtbar.
Da wir nicht wissen, wie das so bei dir aussieht und wir auch den eigentlichen Grund des Portierens nicht kennen, wird wohl kaum einer mehr dazu sagen können...
Gruß Luc :-?


  

Betrifft: AW: Da sehe ich schwarz, denn aus einem... von: Berndi
Geschrieben am: 26.01.2010 13:22:26

Oh, wieso geschützt ..?

Ich habe selbst ein AddIn Programmier, das ein Kalenderblatt erstellt.
Jetzt möchte ich auf eben diesem Kalenderblatt ein Makro ausführen, mir fällt aber nicht ein, wie ich das machen soll ...

Ok, vielleicht habe ich mich mit der Angabe "VBA gut" im Sinne dieses Forums etwas überschätzt ...

... gegenüber Anderen stimmt es aber wieder (nur so nebenbei).

Helft Ihr mir trotzdem ?

LG,
Berndi


  

Betrifft: Naja, wenn es sich um ein AddIn handelt,... von: Luc:-?
Geschrieben am: 26.01.2010 13:55:19

...das du selbst pgmiert hast, Bernd —
sehr schön, aber warum ist das nicht geschützt, soll da jeder drin rumfummeln können? — dann ist das ja auch nicht zu sehen (außer im VBE), wenn du IsAddIn auf True gesetzt hast. Wenn du so etwas hast, warum willst du dann noch irgendwelche Makros auf das mit Routinen des AddIns erstellte Kalenderblatt portieren? Das ist doch nur sinnvoll für Ereignisprozeduren und die kann man vom AddIn aus in den Dokumentklassenmodulen, wo sie auch hingehören, des Kalenderblattes erzeugen. Des weiteren machen ggf noch kurze Aufrufprozeduren in Normalmodulen Sinn. Aus diesen heraus wdn dann Subroutinen (Makros) im AddIn aufgerufen, entweder mit Call oder mit Run. Da das AddIn, wenn es denn unter xl installiert wurde, immer mitgestartet wird, reicht Call, das auch ganz entfallen kann (nachlesen!). Solche Prozeduren automatisch ins Kalenderblatt zu bringen, ist kein Thema. Du erzeugst sie einfach mit einer Subroutine des AddIns gleichzeitig mit dem Kalenderblatt. Dazu musst du das VBProject des Kalenderblattes und seine Eigenschaften wie VBComponents(...) und CodeModule benutzen und die entsprechenden Befehle (für Ereignisprozz unbedingt CreateEventProc benutzen!), die dir dann angezeigt wdn, auswählen (einfach mal alles ausprobieren → learning by doing). Bspp findest du auch im Herber-Archiv (meist klappt das besser von außerhalb als mit der internen Suchmaschine!). Du musst aber auf jeden Fall im AddIn einen Verweis auf die MS VBA Extensibility 5.3 (Stddbezeichngg abgekürzt!) setzen, sonst klappt das weder, noch wird was vom vbIntellisense angezeigt.
Gruß Luc :-?


  

Betrifft: AW: Naja, wenn es sich um ein AddIn handelt,... von: Berndi
Geschrieben am: 26.01.2010 14:01:55

Dazu musst du das VBProject des Kalenderblattes und seine Eigenschaften wie VBComponents(...) und CodeModule benutzen und die entsprechenden Befehle (für Ereignisprozz unbedingt CreateEventProc benutzen!), die dir dann angezeigt wdn, auswählen.
Danke für die Info !

Kannst Du mir vielleicht obige Vorgehensweise etwas genauer Erklären ? *schäm*


  

Betrifft: Das wird etwas mühevoll,... von: Luc:-?
Geschrieben am: 27.01.2010 13:05:39

...Bernd,
weil mir das WLAN ausgefallen ist und ich die Bspp nicht auf diesem PC habe. Also etwas Geduld bitte! Allerdings befinden sich entsprechende Bspp im Herber-Archiv (Alle Recherchen)...
Gruß Luc :-?


  

Betrifft: So, habe jetzt mal ein Stück PgmCode... von: Luc:-?
Geschrieben am: 27.01.2010 18:44:48

...aus einem PgmGenerator, der genau solche Prozeduren erzeugt, als Beispiel (!) kopiert, damit du nicht soviel suchen musst. Die VBE-Hilfe solltest du aber trotzdem lesen!

With ActiveWorkbook
    If bsx Then
        With .VBProject.VBComponents(1).CodeModule
            If .Find("Sub Workbook_Open", 1, 1, .CountOfLines, 1) Then
                If .Find("Protect", .ProcStartLine("Workbook_Open", vbext_pk_Proc), _
                         1, .ProcCountLines("Workbook_Open", vbext_pk_Proc), 1) Then
                    For i = .ProcStartLine("Workbook_Open", vbext_pk_Proc) To _
                            .ProcStartLine("Workbook_Open", vbext_pk_Proc) + _
                            .ProcCountLines("Workbook_Open", vbext_pk_Proc) - 1
                        If InStr(.Lines(i, 1), "Protect") > 0 And (pw = "" Or _
                                    InStr(LCase(.Lines(i, 1)), pw) = 0) Then
                            .ReplaceLine i, vbTab & "Rem ----- Line replaced by XXX " & _
                                Date & " -----" & vbLf & vbTab & "Me.Protect """ & pw & """"
                            Exit For
                        End If
                    Next i
                Else
                    For i = .ProcStartLine("Workbook_Open", vbext_pk_Proc) To _
                            .ProcStartLine("Workbook_Open", vbext_pk_Proc) + _
                            .ProcCountLines("Workbook_Open", vbext_pk_Proc) - 1
                        If InStr(.Lines(i, 1), "Sub ") > 0 Then
                            .InsertLines i + 1, vbTab & "Rem ----- Line inserted by XXX " & _
                                Date & " -----" & vbLf & vbTab & "Me.Protect """ & pw & """"
                            Exit For
                        End If
                    Next i
                End If
            Else: .ReplaceLine .CreateEventProc("Open", "Workbook") + 1, vbTab & _
                    "Rem ----- Procedure generated by XXX " & Date & " -----" & _
                    vbLf & vbTab & "Me.Protect """ & pw & """"
            End If
        End With
    End If
    With .VBProject.VBComponents
        .Add(vbext_ct_StdModule).Name = "xxModul"
        Set c = .Item("xxModul")
        With c.CodeModule
            .InsertLines .CountOfLines + 1, _
                "Rem ----- Module installed by XXX " & Date & _
                " © CyWorXxl.FXss -----" & vbLf
        End With
    End With
End With
Die Textplatzhalter XXX und Namen wirst du ja sicher individuell festlegen wollen. Ist ja alles nur ein Vorschlag/Bsp.
Gruß Luc :-?


  

Betrifft: AW: Makro an neues Workbook übergeben von: Hajo_Zi
Geschrieben am: 25.01.2010 08:50:11

Hallo Bernd,

warum lassen sich die nicht importieren? Den Zugrif auf das VBA Projekt hat Du bestimmt zugelassen.
Ich gebe keine Auskunft wie das geht, bei Gut sollte man es wissen und darunter sollte man es nicht machen.

GrußformelHomepage


Beiträge aus den Excel-Beispielen zum Thema "Makro an neues Workbook übergeben"