Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kopieren und einfügen von VBA code per VBA

Kopieren und einfügen von VBA code per VBA
14.12.2016 09:42:07
VBA
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 Ist an meinem VBA code etwas fehlerhaft bzw. funktioniert dies überhaupt so?
Viele Grüsse
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren und einfügen von VBA code per VBA
14.12.2016 10:36:36
VBA
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
Anzeige
AW: Kopieren und einfügen von VBA code per VBA
14.12.2016 11:24:17
VBA
Hi Tino,
vielen Dank für Deine Rückmeldung.
Warum hast du SetVBACode in ein Sub ausgelagert?
Viele Grüsse
AW: Kopieren und einfügen von VBA code per VBA
14.12.2016 11:44:44
VBA
Hallo,
weil ich von dieser keine Rückgabe bekomme, daher brauche ich keine Function.
Gruß Tino
AW: Kopieren und einfügen von VBA code per VBA
14.12.2016 12:51:39
VBA
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA-Code kopieren und einfügen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Rechtsklicke auf "VBAProject (DeinArbeitsblattName)" und wähle Einfügen > Modul.
  3. Füge den Code ein:

    • Kopiere den folgenden Code in das Modul:
    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
  4. Führe das Makro aus:

    • Drücke F5, um das Makro auszuführen.
  5. Fehlerbehandlung:

    • Achte darauf, dass die Blattnamen korrekt sind. Andernfalls wird der Fehler "Runtime Error 9 - Subscript out of range" angezeigt.

Häufige Fehler und Lösungen

  • Fehler: Runtime Error 9 - Subscript out of range

    • Lösung: Überprüfe die Namen der Arbeitsblätter in deinem Excel-Dokument. Stelle sicher, dass die angegebenen Blätter existieren.
  • Funktioniert nicht im Debugmodus

    • Lösung: Wenn das Makro im Debugmodus funktioniert, aber nicht im normalen Betrieb, könnte es an der Zugriffseinstellung auf das VBA-Projekt liegen. Gehe zu Datei > Optionen > Vertrauensstellungscenter > Einstellungen für das Vertrauensstellungscenter > Makroeinstellungen und aktiviere die Option für den Zugriff auf das VBA-Projekt.

Alternative Methoden

Eine alternative Methode, um VBA-Code zu kopieren und einzufügen, ist die Verwendung von AddFromString. Hier ist ein Beispiel:

Public Sub AddCodeFromString()
    Dim code As String
    code = "Sub NeueSubroutine()" & vbCrLf & "MsgBox ""Hallo Welt!""" & vbCrLf & "End Sub"
    ThisWorkbook.VBProject.VBComponents("Modul1").CodeModule.AddFromString code
End Sub

Praktische Beispiele

Angenommen, du möchtest einen bestimmten VBA-Code von einem Arbeitsblatt auf ein anderes übertragen. Verwende den folgenden Code:

Sub KopiereUndFügeEin()
    Dim Code As String
    Code = GetVBACode("inputsheet")
    SetVBACode("outputsheet", Code)
End Sub

In diesem Beispiel wird der VBA-Code von inputsheet nach outputsheet kopiert.


Tipps für Profis

  • VBA-Projekt freigeben: Stelle sicher, dass das VBA-Projekt für den Zugriff freigegeben ist, wenn du von anderen Makros oder Benutzern darauf zugreifen möchtest.

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung innerhalb deiner VBA-Codes, um mögliche Probleme schneller zu erkennen.

  • Verwendung von Variablen: Nutze Variablen sinnvoll, um den Code lesbarer und wartungsfreundlicher zu gestalten.


FAQ: Häufige Fragen

1. Wie kann ich den VBA-Code in eine andere Excel-Datei einfügen?
Du kannst den gleichen Prozess verwenden, musst jedoch sicherstellen, dass die Zielarbeitsmappe geöffnet ist und du den korrekten Verweis auf das Ziel-VBA-Projekt verwendest.

2. Welche Excel-Versionen unterstützen diese Methoden?
Die beschriebenen Methoden sollten in Excel 2010 und höheren Versionen funktionieren. Achte darauf, dass die VBA-Projekt-Sicherheitseinstellungen korrekt konfiguriert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige