Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1812to1816
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Module löschen und neu importieren?

VBA Module löschen und neu importieren?
14.02.2021 18:36:53
Sergej
Hallo Leute,
was stimmt bitte in meinem Code (s. am Ende) nicht?
Ich bekomme diese Fehlermeldung: Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden.
Es sollen zwei Module gelöscht werden und aus einer Datei wieder importiert werden.
Ich darf nicht davor ThisWorkbook eintragen, weil der Code nicht in aktiver Datei sondern in zuvor ausgewählten Dateien durch das Makro "formatWithoutColor" ausgeführt werden soll.

Sub formatWithoutColor()
Dim varWB As Variant, intIndex As Integer
On Error GoTo ErrExit
GMS
varWB = Application.GetOpenFilename(Filefilter:="Excel (*.xls), *.xls", _
Title:="Bitte Datei(en) für Formatierung auswählen, Abbrechen beendet das Makro", _
MultiSelect:=True)
If IsArray(varWB) Then
For intIndex = 1 To UBound(varWB)
Application.StatusBar = "Datei " & Format(intIndex, "00") & " von " & Format(UBound( _
varWB), "00") & ": "
FormatSheets varWB(intIndex)
Next
Application.StatusBar = False
End If
ErrExit:
If Err.Number  0 Then MsgBox Err.Number & vbLf & Err.Description, vbExclamation, "Fehler"
GMS True
End Sub
Sub FormatSheets(ByVal FileName As String, Optional ByVal withColor As Boolean = False)
Dim wb As Workbook, objWB As Workbook, objWS As Worksheet
Dim rng As Range, rngDel As Range, strFirst As String, lngR As Long, blnWasOpen As Boolean
Dim objShp As Shape, lngLastRow As Long, lngLastCol As Long
Dim dblLeft As Double, aLinks As Variant, intI As Integer
For Each wb In Application.Workbooks
If wb.FullName = FileName Then
Set objWB = wb
blnWasOpen = True
Exit For
End If
Next
If objWB Is Nothing Then Set objWB = Workbooks.Open(FileName, UpdateLinks:=False)
aLinks = objWB.LinkSources(xlExcelLinks)
If Not IsEmpty(aLinks) Then
For intI = 1 To UBound(aLinks)
objWB.BreakLink aLinks(intI), xlLinkTypeExcelLinks
Next
End If
Application.StatusBar = Application.StatusBar & objWB.Name
If Not SheetExist("Massbild", objWB.Name) Then
objWB.Worksheets.Add After:=objWB.Sheets(objWB.Sheets.Count)
objWB.Sheets(objWB.Sheets.Count).Name = "Massbild"
End If
For Each objWS In objWB.Worksheets
With objWS
'Tabellenblat Einrichten
.Activate 'wegen Gitternetzlinien
'Das bestehende Modul1 zuerst umbenennen und dann mit diesem Namen löschen.
.VBProject.VBComponents("Modul1").Name = "Modul99"
.VBProject.VBComponents.Remove .VBProject.VBComponents("Modul99")
'Neues Modul importieren und umbenennen
.VBProject.VBComponents.Import ("D:\Daten\Modul1.bas")
.VBProject.VBComponents(.VBProject.VBComponents.Count).Name = "Modul1"
.VBProject.VBComponents("Modulo1").Name = "Modul88"
.VBProject.VBComponents.Remove .VBProject.VBComponents("Modul88")
'Neues Modul importieren und umbenennen
.VBProject.VBComponents.Import ("D:\Daten\Modul2.bas")
.VBProject.VBComponents(.VBProject.VBComponents.Count).Name = "Modul2"

Beste Grüße,
Sergej

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Module löschen und neu importieren?
14.02.2021 19:12:37
Nepumuk
Hallo Sergej,
1. Die Schleife über alle Tabellen macht keinen Sinn wen du Standardmodule löschen/importieren willst.
2. Ist das VBProject eine Eigenschaft des Workbook-Objektes nicht eines Worksheet-Objektes.
Also:
With objWB
    
    'Das bestehende Modul1 zuerst umbenennen und dann mit diesem Namen löschen.
    .VBProject.VBComponents("Modul1").Name = "Modul99"
    .VBProject.VBComponents.Remove .VBProject.VBComponents("Modul99")
    'Neues Modul importieren und umbenennen
    .VBProject.VBComponents.Import "D:\Daten\Modul1.bas"
    .VBProject.VBComponents(.VBProject.VBComponents.Count).Name = "Modul1"
    .VBProject.VBComponents("Modulo1").Name = "Modul88"
    .VBProject.VBComponents.Remove .VBProject.VBComponents("Modul88")
    'Neues Modul importieren und umbenennen
    .VBProject.VBComponents.Import "D:\Daten\Modul2.bas"
    .VBProject.VBComponents(.VBProject.VBComponents.Count).Name = "Modul2"
    
End With

Bist du dir sicher dass du da mit dem löschen und neu benennen von Modulen nicht durcheinander gekommen bist?
Wenn das auf anderen als deinem Rechner laufen soll, muss auf jedem Rechner die Option "Zugriff auf das VBA-Projektobjektmodell vertrauen" gesetzt sein.
Gruß
Nepumuk
Anzeige
AW: VBA Module löschen und neu importieren?
14.02.2021 19:30:41
Sergej
Hallo Nepumuk,
ich bin nicht durcheinander gekommen. :-)
Ich starte das Makro "formatWithoutColor", wähle eine oder mehrere Exceldateien aus, die verarbeitet werden sollen. Dort sollen die erwähnte Module umbenannt, gelöscht und aus der BAS-Datei (aktualisierte Fassung) importiert werden.
Ich habe dein Vorschlag getestet und bekomme jetzt Meldung 9: "Index außerhalb des gültigen Bereichs"
Beste Grüße,
Sergej
AW: VBA Module löschen und neu importieren?
14.02.2021 19:34:55
Nepumuk
Hallo Sergej,
das bedeutet dass du ein Objekt ansprichst welches es nicht gibt.
Gruß
Nepumuk
AW: VBA Module löschen und neu importieren?
14.02.2021 20:52:49
Luschi
Hallo Sergej,
ich betreibe den Code-Austausch per Vba-AddIn intensiv und verstehe nicht, warum Du ein Modul
- erst umbenennst
- und dann löscht
- das ist doch überflüssig
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA Module löschen und neu importieren?
14.02.2021 21:32:32
Sergej
Hallo Luschi,
mit welchem VBA-Addin tauschst du bitte den Code aus?
Beste Grüße,
Sergej
AW: VBA Module löschen und neu importieren?
15.02.2021 08:13:40
Luschi
Hallo Sergej,

mit welchem VBA-Addin tauschst du bitte den Code aus?
Das habe ich selbst zusammengefummelt mit den Tipps von h i e r und d o r t und weiteren Quellen aus dem I-Net.
Mache doch mal ein praktisches Beispiel, wie Du Dir das vorstellst und stelle es hier rein.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA Module löschen und neu importieren?
15.02.2021 15:46:52
Sergej
Hallo Luschi,
ich habe 434 Dateien. Mit dem Makro "MultiSelectFile" kann ich eine oder mehrere Datei auswählen.
In den ausgewählten Dateien soll dateiweise alle VBA Module gelöscht und zwei aktuelle Module (D:\Daten\Modul1.bas und D:\Daten\Modul2.bas) importieren werden. Danach die Datei speichern. Die aktuelle Module können von mir aus auch in der Masterdatei sein.
Sub MultiSelectFile()
Dim varWB As Variant, intIndex As Integer
varWB = Application.GetOpenFilename(Filefilter:="Excel (*.xls), *.xls", _
Title:="Bitte Datei(en) für Formatierung auswählen, Abbrechen beendet das Makro", _
MultiSelect:=True)
If IsArray(varWB) Then
For intIndex = 1 To UBound(varWB)
Application.StatusBar = "Bearbeite Datei " & Format(intIndex, "00") & " von " & Format( _
UBound(varWB), "00") & ": "
'Makro für VBA Module
Next
Application.StatusBar = False
End If
End Sub
Beste Grüße,
Sergej
Anzeige
AW: VBA Module löschen und neu importieren?
15.02.2021 16:09:56
Nepumuk
Hallo Sergej,
teste mal:
Option Explicit

Public Sub MultiSelectFile()
    
    Dim vntWB As Variant, lngIndex As Long
    Dim objWorkbook As Workbook
    Dim objVBComponent As Object
    
    vntWB = Application.GetOpenFilename(Filefilter:="Excel (*.xls), *.xls", _
        Title:="Bitte Datei(en) für Formatierung auswählen, Abbrechen beendet das Makro", _
        MultiSelect:=True)
    
    If IsArray(vntWB) Then
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        For lngIndex = LBound(vntWB) To UBound(vntWB)
            
            Application.StatusBar = "Bearbeite Datei " & Format$(lngIndex, "00") & _
                " von " & Format$(UBound(vntWB), "00")
            
            Set objWorkbook = Workbooks.Open(Filename:=vntWB(lngIndex))
            
            With objWorkbook
                
                For Each objVBComponent In .VBProject.VBComponents
                    
                    If objVBComponent.Type = 1 Then _
                        Call .VBProject.VBComponents.Remove(objVBComponent)
                    
                Next
                
                Call .VBProject.VBComponents.Import("D:\Daten\Modul1.bas")
                Call .VBProject.VBComponents.Import("D:\Daten\Modul2.bas")
                
            End With
            
            Call objWorkbook.Close(SaveChanges:=True)
            
        Next
        
        Set objWorkbook = Nothing
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
            .StatusBar = False
        End With
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA Module löschen und neu importieren?
15.02.2021 23:08:13
Sergej
Hallo Nepumuk,
vielen herzlichen Dank. Es hat alles perfekt funktioniert.
Beste Grüße,
Sergej
AW: VBA Module löschen und neu importieren?
14.02.2021 20:52:49
Luschi
Hallo Sergej,
ich betreibe den Code-Austausch per Vba-AddIn intensiv und verstehe nicht, warum Du ein Modul
- erst umbenennst
- und dann löscht
- das ist doch überflüssig
Gruß von Luschi
aus klein-Paris
AW: VBA Module löschen und neu importieren?
14.02.2021 19:39:23
onur
Sorry, aber ich verstehe nicht, warum immer ausgerechnet VBA-Anfänger per VBA-Code am VBA-Code herumpfuschen wollen, und dann auch noch in anderen Dateien.
Ich persönlich habe noch nie den Fall gehabt, dass ich glaubte, per VBA den Code verändern zu müssen.
Anzeige
AW: VBA Module löschen und neu importieren?
14.02.2021 20:48:52
Luschi
Hallo Onur,
ich arbeite mit einem Kompagnon zusammen. wobei er die Excel-Oberfläche/Formeln/Logik organisiert und ich den Vba-Teil. Da dies parallel passiert, verwende ich den Code-Austausch per Vba-AddIn, um meine Lösungen in seine Arbeitsmappe zu impfen.
Da wir auch mit 2 unterschiedlichen _Excel-Versionen arbeiten, passiert es öfters, daß
- der Code in E_2016 nicht läuft
- wenn er in Excel_2019 entwickelt und getestet wurde
- das liegt aber nicht an Programmierfehler
- sondern an Intoleranz-Problemen zwischen beiden Versionen
- deshalb kopiere ich den Code auf die Festplatte
- öffne die E_2016-Datei
- tausche den Vba-Code aus
- schließe die Datei wieder und schicke sie per eMail an den Partner
- ohne noch mal zu testen - das hat sich bewährt!
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA Module löschen und neu importieren?
14.02.2021 20:58:30
onur
Hallo Luschi,
Bei dir kann ich das ja auch verstehen.
Aber 9 von 10 Anfragen in VBA-Foren, bei denen es um Code-Manipulationen per VBA geht, stammen von VBA-Anfängern, die sich meistens so in ihre "Lösungsansätze" verstrickt haben, dass sie glauben, Code-Manipulation per VBA wäre die einzige Lösung ihrer Probleme. Ich würde doch erst mal überhaupt richtig programmieren lernen wollen, bevor ich mich an "High-End"-Programmieraufgaben traue.
Gruß
Onur
AW: VBA Module löschen und neu importieren?
14.02.2021 21:30:53
Sergej
Hallo Onur,
ich habe genauer 434 Excel-Dateien die zwei VBA Module beinhalten, die ausgetauscht werden müssen.
Diese wollte ich nicht per copy / paste durchführen. Daher auch die Frage, wie ich in einem bestehenden Makro diese Ergänzung erweitern kann.
Gruß,
Sergej
Anzeige
AW: VBA Module löschen und neu importieren?
14.02.2021 22:32:40
onur
Hallo Sergej,
WENN das immer die selben Makros in den 434 sind, hätte ich sie entweder als Add-In geschrieben oder die beiden Module in eine Masterdatei eingebaut, die dann die Dateien öffnet und sie mittels der Makros verarbeitet.
In beiden Fällen müsste ich die Makros/Module nur EIN MAL auszutauschen/verändern.
Gruß
Onur

88 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige