Das Archiv des Excel-Forums
Kopieren und einfügen von VBA code per VBA
Betrifft: Kopieren und einfügen von VBA code per VBA
von: Chris W.
Geschrieben am: 14.12.2016 09:42:07
Hallo zusammen,
ich habe folgende routine geschrieben:
Dim CodeLines() As String, size As Integer
Sub test()
GetVBACode("inputsheet")
SetVBACode("outputsheet")
End Sub
Public Function GetVBACode(NameInputCodeModule As String)
Dim i As Integer
With ThisWorkbook.VBProject.VBComponents(Worksheets(NameInputCodeModule).CodeName).CodeModule
size = .CountOfLines
ReDim CodeLines(size)
For i = 1 To size
CodeLines(i) = .Lines(i, 1)
Next i
End With
End Function
Public Function SetVBACode(NameOutputCodeModule As String)
Dim i As Integer
With ThisWorkbook.VBProject.VBComponents(Worksheets(NameOutputCodeModule).CodeName).CodeModule
For i = 1 To size
.InsertLines i, CodeLines(i)
Next i
End With
End Function
Im Debugmodus funktioniert auch alles prima. Wenn ich allerdings das Makro ohne Debugger ausführen lassen, bekomme ich eine -> Runtime Error 9 - Subscript out of range <- Meldung.
Ist an meinem VBA code etwas fehlerhaft bzw. funktioniert dies überhaupt so?
Viele Grüsse
Betrifft: AW: Kopieren und einfügen von VBA code per VBA
von: Tino
Geschrieben am: 14.12.2016 10:36:36
Hallo,
ich würde es evtl. so versuchen.
Sub test()
Dim InsertString As String
InsertString = GetVBACode("inputsheet")
Call SetVBACode("outputsheet", InsertString)
End Sub
Public Function GetVBACode(NameInputCodeModule As String)
With ThisWorkbook.VBProject.VBComponents(Worksheets(NameInputCodeModule).CodeName).CodeModule
If .CountOfLines > 0 Then
GetVBACode = .Lines(1, .CountOfLines)
End If
End With
End Function
Public Sub SetVBACode(NameOutputCodeModule As String, InsertString As String)
With ThisWorkbook.VBProject.VBComponents(Worksheets(NameOutputCodeModule).CodeName).CodeModule
If .CountOfLines > 0 Then
.DeleteLines 1, .CountOfLines
End If
If InsertString <> "" Then
.CodePane.CodeModule.AddFromString InsertString
End If
End With
End Sub
Gruß Tino
Betrifft: AW: Kopieren und einfügen von VBA code per VBA
von: Chris W.
Geschrieben am: 14.12.2016 11:24:17
Hi Tino,
vielen Dank für Deine Rückmeldung.
Warum hast du SetVBACode in ein Sub ausgelagert?
Viele Grüsse
Betrifft: AW: Kopieren und einfügen von VBA code per VBA
von: Tino
Geschrieben am: 14.12.2016 11:44:44
Hallo,
weil ich von dieser keine Rückgabe bekomme, daher brauche ich keine Function.
Gruß Tino
Betrifft: AW: Kopieren und einfügen von VBA code per VBA
von: Chris W.
Geschrieben am: 14.12.2016 12:51:39
Vielen Dank für deine Rückmeldung.
Ich habe das Problem lokalisieren können.
Diese Zeile
With ThisWorkbook.VBProject.VBComponents(Worksheets(NameOutputCodeModule).CodeName).CodeModule
hat die Fehlermeldung verursacht.
Durch folgenden Aufruf:
For Each objVBComponent In ActiveWorkbook.VBProject.VBComponents
If ActiveSheet.CodeName = objVBComponent.Name Then
With objVBComponent.CodeModule
If .CountOfLines > 0 Then
.DeleteLines 1, .CountOfLines
End If
End With
Exit For
End If
Next
funktioniert es tadellos.
Keine Ahnung warum dies so ist.
Besten Dank und viele Grüsse
Excel-Beispiele zum Thema "Kopieren und einfügen von VBA code per VBA"
Blätter in andere Arbeitsmappen kopieren |
 |
Module von Mappe zu Mappe kopieren |
 |
Arbeitsblatt 40 mal kopieren |
 |
Schriftgröße beim Kopieren verdoppeln |
 |
Beim Kopieren auch die Zeilenhöhe und Spaltenbreite übernehmen |
 |
Tabellencode nach Kopieren des Blattes löschen |
 |
Arbeitsmappe blitzschnell kopieren |
 |
VBE-Namen der Blattmodule beim Kopieren festlegen |
 |
Blattinhalt von einer zur anderen Arbeitsmappe kopieren |
 |
Formel bis zur letzten Zeile der Nebenspalte kopieren |
 |
Datei kopieren, wenn noch nicht vorhanden |
 |
Zeilenweise von Blatt zu Blatt kopieren |
 |
Erste Druckseite in eine neue Arbeitsmappe kopieren |
 |
Durch DoppelKlick Spalte in zweites Arbeitsblatt kopieren |
 |
Teilergebnisse einer Serie von Tabellen in anderes Blatt kopieren |
 |
Bei Eintrag in Spalte A aktuelle Zeile kopieren |
 |
Filtern und Kopieren |
 |
Zeile mit aktiver Zelle in anderes Blatt kopieren |
 |
Zeilen in Abhängigkeit des Wertes in Spalte A kopieren |
 |
Einen von einer Schlüsselziffer abhängigen Bereich kopieren |
 |
Vorgegebene Anzahl von Einträgen in 2. Blatt kopieren |
 |
Über InputBox festzulegenden Bereich kopieren |
 |
Passwortgeschützte Mappe öffnen, Daten kopieren, schliessen |
 |
Tabellenblatt kopieren und dreistellig fortlaufend numerieren |
 |
Jede zweite Zelle kopieren |
 |
Werte aus UserForm-ComboBox suchen und Fundstelle kopieren |
 |
Gruppe von Optionsfeldern kopieren und Makro zuweisen |
 |
Nicht zusammenhängenden Bereich in nächste Zeile kopieren |
 |
Wert aus UserForm-TextBox suchen und Fundstelle kopieren |
 |
Nur sichtbare Zellen in anderes Arbeitsblatt kopieren |
 |
Zeile in Abhängigkeit zur Eingabe in Blätter kopieren |
 |
Werte prüfen und kopieren |
 |
Bei Eintrag von X Zeile in andere Tabelle kopieren |
 |
Daten kopieren wenn kein Datum oder Datum > Heute |
 |
Blattinhalte dreier Blätter in neues Blatt kopieren |
 |
Kopieren und Umbenennen eines Blattes |
 |
Nur Zeilen mit bestimmtem Inhalt kopieren |
 |
Artikelnummern nach Kriterien suchen und Datensätze kopieren |
 |
Bild in zweites Blatt an gleiche Position kopieren |
 |
Alle Zeilen ohne Wert in vorgegebener Spalte kopieren |
 |
Bei Eintrag Zeile in 2. Blatt kopieren und Tabellen sortieren |
 |
Bildergruppe in anderes Blatt kopieren |
 |
Bei Eingabe Formel in der Nebenspalte nach unten kopieren |
 |
Auswahl in andere Arbeitsmappe kopieren, speichern, schließen |
 |
Begriff suchen und Fundzeilen in anderes Blatt kopieren |
 |
Aktive Zeile kopieren und löschen |
 |
Datensätze, die öfter als 3 mal vorkommen, kopieren |
 |
Den jeweils darüberliegenden Wert in Leerzellen kopieren |
 |
Alle Zeilen mit einem Suchbegriff in nächstes Blatt kopieren |
 |
Dateien listen und Blätter in neue Arbeitsmappe kopieren |
 |
Zeile einfügen und Formeln und Werte übernehmen |
 |
Datum in Fußzeile einfügen |
 |
Nach jedem 5. Zeichen ein Leerzeichen einfügen |
 |
Kommentare in geschützte Tabellen einfügen |
 |
Trennlinie in Kontextmenü einfügen |
 |
Zeilen oberhalb der markierten Zellen einfügen |
 |
Grafik einfügen, wenn Wert in A1 unter eine Grenze sinkt |
 |
Benutzerdefiniertes Symbol in neue Symbolleiste einfügen |
 |
Bei Doppelklick Textbox mit Text einfügen |
 |
Menüpunkte zum Einfügen und Löschen von Zeilen hinzufügen |
 |
Schaltflächen-Id-Nummer finden und Schaltfläche einfügen |
 |
Ordnernamen eines Verzeichnisses in Zelle einfügen |
 |
Ersten Absatz eines Word-Dokumentes in Tabelle einfügen |
 |
Wasserzeichen in Tabelle einfügen |
 |
Über Schaltfläche neues Blatt mit aktuellem Datum einfügen |
 |
Eingabe auf bereits vorhanden prüfen und, wenn nein, einfügen |
 |
Grafik in Abhängigkeit einer Zelleingabe einfügen |
 |
ComboBox für Monatsblattauswahl in Menüleiste einfügen |
 |
Über Doppelklick aus Preisliste in Bestellformular einfügen |
 |
Grafik nach Eingabe des Dateinamens einfügen |
 |
Zeilen einfügen, Werte und Bezüge zu den Werten eintragen |
 |
Wert der aktiven Spalte an nächste freie Position einfügen |
 |
Meldung nach Einfügen oder Löschen von Zeilen |
 |
Einfügen von Zeilen vor und nach Zellen mit Fettdruck |
 |
Mit ShortCut Textbaustein einfügen |
 |
Einfügen von Zeilen gem. Zellwerten |
 |
Einfügen eines Menüpunktes zum Erstellen eines Kommentars. |
 |
Einfügen von Werten in Abhängigkeit eines Blattnamens |
 |
Menüpunkt "Zellen einfügen..." im Kontextmenü deaktivieren |
 |
UserForm-TextBox-Inhalte mit Grafik-Hyperlinks einfügen |
 |
Vor dem Druck Zeilen einfügen und danach wieder löschen |
 |
Neuer Menüpunkt mit Kommentar-einfügen-Befehl |
 |
Überschriften gemäß Indizes in Tabelle einfügen |
 |
TextBox mit 12.000 Zeichen unterhalb einer Tabelle einfügen |
 |
Zahl suchen und an den Fundstellen Zeile einfügen |
 |
Seitenumbruch nach Zeilen mit bestimmtem Inhalt einfügen |
 |
Bei Gültigkeitsfeldauswahl Zeile einfügen |
 |
Nach Vergleich Kommentar einfügen |
 |
Neuer Menüpunkt zum Einfügen eines benutzerdefinierten Kommentars |
 |
Grafikdatei aus dem Internet downloaden und in Tabelle einfügen |
 |
Einfügen eines Sonderzeichens in einer UserForm-TextBox |
 |
Über InputBox zu ermittelnde Spaltenanzahl einfügen |
 |
Kopieren und Einfügen in UserForm ohne Excel-ShortCuts |
 |
Bei Doppelklick Grafik in Kommentar einfügen |
 |
Zeile einfügen, wenn 100er-Sprung |
 |