Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
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

DateienOeffnen_VBAObjImportieren

DateienOeffnen_VBAObjImportieren
17.01.2023 11:42:54
Uwe
Hallo,
ich versuche gerade zwei VBA-Codes von Nepumuk zu kombinieren und zwar

Sub OpenFiles()
und

Sub Import1()
Hierbei sollen bei allen Excel Dateien *.xlsm im Verzeichnis "C:\GB_Im-und_ExPort\Import\" der VBA Code aus dem Verzeichnis "C:\GB_Im-und_ExPort\Export\" importiert werden. Lasse ich die beiden Makros von Nepumuk einzeln, an meine Bedingungen, angepasst, ablaufen so ergibt sich kein Fehler. Kombiniere ich beide Makros zu einem gibt es in der Zeile Dateiname = Dir$ die Fehlermeldung "Ungültiger Prozeduraufruf oder ungültiges Argument" Nachfolgend der kombinierte Code:

Option Explicit

Public vbc As Object, iCounter As Integer, sMacro As String, cType As String, StDateiname As String
Public pfad As String, Dateiname As String, iRow As Long

Sub DateienOeffnen_VBAObjImportieren()
'Import des Gesamten VBA-Codes
'aus dem Verzeichnis C:\GB_Im-und_ExPort\Export\
'in alle im Verzeichnis
Const pfad = "C:\GB_Im-und_ExPort\Import\"
'vorhandenen Exceldateien *.xlsm
Application.EnableEvents = False
Application.ScreenUpdating = False
Dateiname = Dir$(pfad & "*.xlsm")
Do While Dateiname  ""
Workbooks.Open Filename:=pfad & Dateiname
ActiveWindow.WindowState = xlMinimized
With Workbooks(Dateiname).VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With vbc.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
StDateiname = Dir("C:\GB_Im-und_ExPort\Export\" & "*.*")
Do While StDateiname  ""
If UCase(Right(StDateiname, 4)) = ".BAS" Or UCase(Right(StDateiname, 4)) = ".FRM" _
_
_
_
Or UCase(Right(StDateiname, 4)) = ".CLS" Then
.VBComponents.Import "C:\GB_Im-und_ExPort\Export\" & StDateiname
End If
StDateiname = Dir
Loop
For Each vbc In .VBComponents
If vbc.Type = 2 Then
If Left(vbc.Name, 5) = "Diese" Or Left(vbc.Name, 7) = "Tabelle" Then
.VBComponents(Left(vbc.Name, Len(vbc.Name) - 1)).CodeModule.InsertLines 1, _
_
_
_
vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines)
.VBComponents.Remove .VBComponents(vbc.Name)
End If
End If
Next vbc
End With
Workbooks(Dateiname).Save
Workbooks(Dateiname).Close
Dateiname = Dir$
Loop
Application.EnableEvents = True
End Sub
Über eine Hilfe würde ich mich sehr freuen.
Schonmal vielen Dank im voraus
Gruß
Uwe P

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DateienOeffnen_VBAObjImportieren
17.01.2023 12:06:32
Dirk
Hallo!
Versuch doch mal Dir(pfad & "*.xlsm") ohne das Dollar-Zeichen. Vielleicht liegt es daran?
Gruss
Dirk aus Dubai
AW: DateienOeffnen_VBAObjImportieren
17.01.2023 12:35:44
Nepumuk
Hallo Uwe,
du kannst Dir nicht verschachteln. Sammle im ersten Dir alle Dateinamen in einem Array und arbeiten das dann ab.
Gruß
Nepumuk
AW: DateienOeffnen_VBAObjImportieren
17.01.2023 12:36:38
volti
Hallo Uwe,
Du kannst den Dir-Befehl nicht in zwei Loops verschachteln, der kann immer nur einmal verwendet werden und dann erst wieder nach Abschluss des ersten.
An dem $-Zeichen liegt es nicht.
Gruß
Karl-Heinz
AW: DateienOeffnen_VBAObjImportieren
17.01.2023 17:12:37
Uwe
Hallo,
vielen Dank an alle für die Unterstützung. Am besten passte der Hinweis von Nepumuk.
Ich habe es jetzt folgend gelöst:
Option Explicit

Sub DateienZaehlen()
Dim sOrdner As String
Dim Anz As Integer
Dim Dateinamen() As String
Dim I As Integer
Dim Datnam As String
Const Pfad = "C:\GB_Im-und_ExPort\Import\"
sOrdner = "C:\GB_Im-und_ExPort\Import\" & "*.xlsm"
sOrdner = Dir(sOrdner)
sOrdner = "C:\GB_Im-und_ExPort\Import\"
Do While sOrdner  ""
Anz = Anz + 1
sOrdner = Dir()
Loop
ReDim Dateinamen(Anz - 1)
Datnam = Dir$(Pfad & "*.xlsm")
I = 0
Do While Datnam  ""
Dateinamen(I) = Datnam
I = I + 1
Datnam = Dir$
Loop
For I = 0 To Anz - 1
Workbooks.Open Filename:=Pfad & Dateinamen(I)
Application.EnableEvents = False
ActiveWindow.WindowState = xlMinimized
With Workbooks(Dateinamen(I)).VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With vbc.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
StDateiname = Dir("C:\GB_Im-und_ExPort\Export\" & "*.*")
Do While StDateiname  ""
If UCase(Right(StDateiname, 4)) = ".BAS" Or UCase(Right(StDateiname, 4)) = ".FRM" _
_
_
_
Or UCase(Right(StDateiname, 4)) = ".CLS" Then
.VBComponents.Import "C:\GB_Im-und_ExPort\Export\" & StDateiname
End If
StDateiname = Dir
Loop
For Each vbc In .VBComponents
If vbc.Type = 2 Then
If Left(vbc.Name, 5) = "Diese" Or Left(vbc.Name, 7) = "Tabelle" Then
.VBComponents(Left(vbc.Name, Len(vbc.Name) - 1)).CodeModule.InsertLines 1, _
_
_
_
vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines)
.VBComponents.Remove .VBComponents(vbc.Name)
End If
End If
Next vbc
End With
Workbooks(Dateinamen(I)).Save
Workbooks(Dateinamen(I)).Close
Next I
Application.EnableEvents = True
End Sub
Viel Grüße
Uwe
Anzeige
AW: DateienOeffnen_VBAObjImportieren
18.01.2023 07:26:14
Uwe
Hallo,
noch ein kleiner Nachtrag zu meinem Code.
Es müssen natürlich auch noch die Variablen
Dim vbc As Object
Dim StDateiname As String
deklariert sein

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige