Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wie kann ich ein Makro bei einer Dateiausgabe mit ausgeben?
#1
Hallo an alle hier im Forum.

Ich gebe mittels VBA Teile aus dem aktuellen Tabellenblatt in eine andere Datei aus.

Kann ich aber auch ein Makro mit in diese Ausgabe einbinden, damit es in der Ausgabe ausgeführt werden kann?

Gibt es dafür eine Lösung?

Danke für eure Hilfe.

Gruß
hziemer
Zitieren
#2
Hallo,

ja das geht. Wenn du deine Daten ins Windows Fenster der neuen Datei übergeben hast, kann man danach mit:

Code:
Sub NeuesModulUndProzedur()
    Dim VBComponenten As VBComponent
    Set VBComponenten = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
   
    With VBComponenten.CodeModule
        .InsertLines 1, "Sub MeineProzedur1()"
        .InsertLines 2, "' Es wird eine Textbox ausgegeben"
        .InsertLines 3, "     MsgBox ""Es funktioniert"" "
        .InsertLines 4, "End Sub"
    End With
End Sub
ein Modul mit der dazugehörigen Prozedur darin erzeugen. Anschließend den bisher verwendeten Code zu Ende laufen lassen.
Mit .InsertLines und Nummer wird jeweils eine weitere Codezeile erzeugt. Dies ist nur ein Beispiel.
ThisWorkbook bedeudet, dass das Windowsfenster der Zieldatei aktiviert sein muss, damit der Code auch da ausgeführt wird.

Gruß Uwe
Zitieren
#3
Hallo,

Anbei mal eine Beispieldatei.

Gruß Uwe


Angehängte Dateien
.xlsm   Mappe1 erzeugt Tabellenblätter und schreibt Makro in allgem.Modul und Tabellenmodul.xlsm (Größe: 27,21 KB / Downloads: 4)
Zitieren
#4
Hallo Uwe,

erst einmal vielen Dank für Deine Antwort.

Ich denke, das Deine Lösung nicht genau mein Problem umfasst.

Mit folgendem Code erzeuge ich die Ausgabe Datei:

Sub Speichern_mit_Datum()

Dim wkbName As String, wkbNeu As String, wksName As String

wkbName = ThisWorkbook.Name
wksName = ActiveSheet.Name
Workbooks.Add
wkbNeu = ActiveWorkbook.Name

Workbooks(wkbName).Sheets(wksName).Range("A1:h6").Copy Workbooks(wkbNeu).Sheets(1).Range("A1")
Workbooks(wkbName).Sheets(wksName).Range("A7:Z8000").Copy Workbooks(wkbNeu).Sheets(1).Range("A7")


Dim pfad As String, dateiname As String
pfad = "C:\Users\yyyy\Documents\Kunden\xxxx\"
dateiname = "Auswertung Heatmap täglich vom " & Range("ah7") & " bis " & Range("ah8") & ".xlsm" 'mit Makro
strDname = pfad & dateiname

With Application
 
      .ScreenUpdating = False
      .DisplayAlerts = False
  End With
           ActiveWorkbook.SaveAs strDname, FileFormat:=xlOpenXMLWorkbookMacroEnabled  'mit Makro
ActiveWorkbook.Close

End Sub


Es soll während der Ausgabe der Datei auch noch ein Makro mit abgespeichert werden.
Das kann der Kunde nachdem er das File bekommen ausführen.

Ist das  so machbar?

Danke für eine Antwort
hziemer
Zitieren
#5
Hallo,

Das was ich dir reingesetzt habe, ist eine Beispieldatei, welche aber alle Werkzeuge enthält, um ein Modul mit der Prozedur zu erzeugen/schreiben.
Da ich weder Zellinhalte noch die zu übertragende Prozedur kenne, teste diese Prozedur in einer Ausgangstabelle, welche die relevanten Daten in den für diese Prozedur benötigten Zellen enthält. 
Ab Line 20 kannst du nach diesem Schema deine Prozedur, welche im Modul des neu erzeugten Arbeitsblattes stehen, eintragen.
Achte auf die Verweisaktivierung in der Bibliothek.
Code:
Option Explicit

Sub NeuesWorkbookErzeugen()
    Dim Wb As Workbook, Mdl As VBComponent, WbName As String
    Dim wkbName As String, wkbNeu As String, wksName As String
    Dim pfad As String, dateiname As String, strDname$

    wkbName = ThisWorkbook.Name
    wksName = ActiveSheet.Name
    Set Wb = Workbooks.Add(1)
    wkbNeu = Wb.Name
    pfad = "C:\Users\yyyy\Documents\Kunden\xxxx\"
    dateiname = "Auswertung Heatmap täglich vom " & Range("ah7") & " bis " & Range("ah8") & ".xlsm" 'mit Makro

    ' Verweis aktivieren "Microsoft Visual Basic for Applications Extensibility 5.3-Bibliothek" erforderlich!
    Set Mdl = Wb.VBProject.VBComponents.Add(vbext_ct_StdModule)
   
    ' fügt Prozedur in neu erzeugtes Modul ein und benennt es um
    With Mdl.CodeModule
        .InsertLines 1, "Sub MeinModul()"
        .InsertLines 2, "'Durch eine Prozedur eingefügt"
        .InsertLines 3, "     MsgBox ""Das soll deine Prozedur sein"" "
        .InsertLines 4, "End Sub"
        .Name = "Mdl_Test"
    End With
    ' Übertragen der Datensätze in die neue Datei
    Workbooks(wkbName).Sheets(wksName).Range("A1:H6").Copy Workbooks(wkbNeu).Sheets(1).Range("A1")
    Workbooks(wkbName).Sheets(wksName).Range("A7:Z8000").Copy Workbooks(wkbNeu).Sheets(1).Range("A7")
    ' speichern
    strDname = pfad & dateiname
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
        ActiveWorkbook.SaveAs strDname, FileFormat:=xlOpenXMLWorkbookMacroEnabled  'mit Makro
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
    Set Mdl = Nothing
    Set Wb = Nothing
    ActiveWorkbook.Close
End Sub
Ich hoffe es hilft dir weiter.

Gruß Uwe


Angehängte Dateien
.xlsm   Mappe1 erzeugt Tabellenblätter und schreibt Makro in allgem.Modul und Tabellenmodul(1).xlsm (Größe: 27,35 KB / Downloads: 3)
Zitieren
#6
Hallo Uwe

Zuerst einmal ein großes Danke für Deine Mühe.

Aber: Wo bekomme ich die Microsoft Visual Basic for Applications Extensibility 5.3-Bibliothek her?
Ich habe das hier gefunden: VBA64-KB822150-X86-DEU.exe. 
Hier fehlt aber auch ein File wenn ich die EXE entpacke und versuche dann zu installieren.

Gibt es noch eine Möglichkeit an die Version 5.3 zu kommen?

Danke
hziemer
Zitieren
#7
Hallo,

- entweder wähle im VBA Editor unter Extras den Menüpunkt Verweise, oder im Befehl:
Zitat:Set Mdl = Wb.VBProject.VBComponents.Add(vbext_ct_StdModule)
- entferne nach Add "(vbext_ct_StdModule)"
- setzte eine neue Klammer nach Add uns wähle vbext_ct_StdModule aus bestätige die Abfrage zur Aktivierung der Bilbliothek
Zitat:Set Mdl = Wb.VBProject.VBComponents.Add    --> Set Mdl = Wb.VBProject.VBComponents.Add(
Das wars auch schon.

Gruß Uwe
Zitieren
#8
Hallo Uwe

So einfach geht es wenn man weiß wie es geht.

Danke für die Hilfe.

Dir noch eine schöne Woche.

Gruß
hziemer
Zitieren


Gehe zu:


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




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions