Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
644to648
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
644to648
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Module und UserForm von A nach B mit 1300 Dateien

Module und UserForm von A nach B mit 1300 Dateien
01.08.2005 14:17:50
A


      
'Hallo Zusammen

'Habe ein fast fertiges Problemchen, welches für Euch sicher ein leichtes ist.

'Mit einem Makro scanne ich alle Verzeichnisse in einem&nbsp
'vordefinierten Pfad und öffne anschliessend jede der gefundenen Dateien in einem Loop.
'Nun zum Problem die nun aktiv geöffnete Datei im
'Loop sollte ein Update aller Module erhalten, also auch die User Form 's sollten ersetzt werden.
'Nochmals die Logik:

'Sub Problem () 
'Scan Verzeichnisse (dies ist kein Problem)

'Offne Datei (auch dieses Problem ist gelöst)

'Do while letzte Datei_erreicht (no Problem)

'            allModulsCopy (da habe ich die Knacknuss)

'aktuelle Loop Datei schliessen (das würde auch wieder laufen)

'Loop (kein Problem
'End Sub

'Den folgenden Code habe ich aus dem Forum, weiss aber nicht genau wie ich den in mein Modul einsetzen muss, damit es funzt.

'**************************************************
'Die zu kopierenden Module und User Forms sind in der folgenden Datei
'H:\Vorlagen\Allgemeine_Vorlage.xlt
'wie muss ich den Code umschreiben, damit die Master Datei mit den
'Modul- und UserForm vorlagen nur einmal geöffnet werden muss?
'denke mal das auslesen der Module ist vor dem Loop zu bewerkstelligen.

Private Sub allModulsCopy()
Dim strPath As String, strNewBookName As String
Dim vbc As Object
   
strPath = Application.Path & "\"
On Error GoTo Errorhandler
Workbooks.Add
strNewBookName = ActiveWorkbook.Name
ThisWorkbook.Activate
With ActiveWorkbook.VBProject
    
For Each vbc In .VBComponents
            
        
' Wenn Type = 1 dann ist es ein Standardmodul.
        ' Wenn Type = 3 dann ist es ein Userform
        If vbc.Type = 1 Or vbc.Type = 3 Then
            vbc.Export strPath & vbc.Name & ".txt"
            Workbooks(strNewBookName).VBProject.VBComponents.Import strPath & vbc.Name & ".txt"
            Kill strPath & vbc.Name & ".txt"
        
End If
    
Next vbc
End With
MsgBox "Module wurde kopiert!"
Exit Sub
' Bei Fehlernummer 1004, diese Meldung ausgeben.
Errorhandler:
    
If Err.Number = 1004 Then
        MsgBox "Das kopieren des VBA Moduls ist fehlgeschlagen!" & vbCr & _
           "Bitte überprüfen Sie folgende Einstellung! " & vbCr & _
           "EXTRAS -> MAKRO -> SICHERHEIT -> Vertrauenwürdige Quellen." & vbCr & _
           "'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ", vbCritical, _
           " Meldung vom Makro Module exportieren!"
    
Else
        MsgBox "Err.Number = " & Err.Number & ".   " & Err.Description, vbCritical
    
End If
    
' Fehlernummer löschen.
    Err.Clear
End Sub
Danke für Eure Mithilfe
Manhartm 


31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 09:17:04
Modulen
Hallo Zusammen
Ich denke das meine Frage etwas zu ungenau gestellt wurde, deshalb ein neuer Anlauf.
Wie muss ich das im Haupt Tread beigefügte Script welches ich im Forum gefunden habe anpassen, damit es in eine Schlaufe eingebunden werden kann.
Folgende Optionen sing erforderlich:
- Trägerdatei der Module und Userforms:= 'H:\Vorlagen\Allgemeine_Vorlage.xlt
- ist es möglich, dass alles also auch die Userform mitkopiert werden?
- Der Loop geht über ca. 1300- 1400 Dateien
Hier nochmals der Script der in den Loop eingebunden werden sollte.
Ich kriegs einfach nicht hin.

Private Sub allModulsCopy()
Dim strPath As String, strNewBookName As String
Dim vbc As Object
strPath = Application.Path & "\"
On Error GoTo Errorhandler
Workbooks.Add
strNewBookName = ActiveWorkbook.Name
ThisWorkbook.Activate
With ActiveWorkbook.VBProject
For Each vbc In .VBComponents
' Wenn Type = 1 dann ist es ein Standardmodul.
' Wenn Type = 3 dann ist es ein Userform
If vbc.Type = 1 Or vbc.Type = 3 Then
vbc.Export strPath & vbc.Name & ".txt"
Workbooks(strNewBookName).VBProject.VBComponents.Import strPath & vbc.Name & ".txt"
Kill strPath & vbc.Name & ".txt"
End If
Next vbc
End With
MsgBox "Module wurde kopiert!"
Exit Sub
' Bei Fehlernummer 1004, diese Meldung ausgeben.
Errorhandler:
If Err.Number = 1004 Then
MsgBox "Das kopieren des VBA Moduls ist fehlgeschlagen!" & vbCr & _
"Bitte überprüfen Sie folgende Einstellung! " & vbCr & _
"EXTRAS -> MAKRO -> SICHERHEIT -> Vertrauenwürdige Quellen." & vbCr & _
"'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ", vbCritical, _
" Meldung vom Makro Module exportieren!"
Else
MsgBox "Err.Number = " & Err.Number & ".   " & Err.Description, vbCritical
End If
' Fehlernummer löschen.
Err.Clear
End Sub

Besten Dank für Eure kompetente Mithilfe
Martin
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 10:24:33
Modulen
Hallo Martin,
vielleicht kann ich dir helfen, da der Code eh von mir ist.
Vorweg aber ein paar Fragen:
Willst du nur Userforms und Module kopieren, keinen Code in Tabellenblättern oder in DieseArbeistmappe?
Sind in den 1300 Tabellen schon userforms und Module vorhanden, sprich müssen die vorher gelöscht werden?
Kommt der Code den du kopieren willst aus der Mappe in der auch der Code zum kopieren (also ThisWorkbook) steht?
Wie heißt denn deine Variable in der die Mappennamen in der Schleife abgearbeitet werden.
Hast du schon Code, für die Schleife, den du hier einstellen könntest?
Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 11:16:28
Modulen
Hallo Heiko
Danke für deine Antwort.
Hier meine Antworten auf deine Fragen:
Frage1:
Willst du nur Userforms und Module kopieren, keinen Code in Tabellenblättern oder in DieseArbeistmappe?
Antwort1:
Du hast recht, auch den Code in den Tabellenblätter und diese Arbeitsmappe.
Frage2:
Sind in den 1300 Tabellen schon userforms und Module vorhanden, sprich müssen die vorher gelöscht werden?
Antwort2:
Du hast schon wieder recht, es handelt sich um ein Update der Module und Forms ich
dachte die werden dabei überschrieben wenn die gleich heissen. (ich dummerchen)
Frage3:
Kommt der Code den du kopieren willst aus der Mappe in der auch der Code zum kopieren (also ThisWorkbook) steht?
Antwort3:
Nein der Core steht in der Vorlagendatei (H:\Vorlagen\Allgemeine_Vorlage.xlt), den Updateprozess würde ich gerne aus einer neuen Masterdatei starten.
Frage4:
Wie heißt denn deine Variable in der die Mappennamen in der Schleife abgearbeitet werden.
Hast du schon Code, für die Schleife, den du hier einstellen könntest?
Antwort4:
den Pfad habe ich in der Variable - pfad2
den Dateinamen habe ich in der Variable - name1
Damit Du nicht einen Kopfstand aufgrund meiner Quellcode Aufstellung machen musst
hier ein Ausschnitt aus dem ganzen Code.
'öffner der Datei
Workbooks.Open Filename:=pfad2 & name1, ReadOnly:=True, UpdateLinks:=0
If Workbooks(name1).Sheets(1).Range("T1").Value "Meldeblatt Aktionen/EinAusl" Then
' falls kein Aktionexcel gleich wieder schliessen
' Workbooks.Close
Workbooks(name1).Close (False)
Else
'Hier kommt der neue Code für die Module, Userforms und den Code aus den Arbeitsmappen.
Loop
Wenn Du dennoch den ganzen Code willst, unten den ganzen Code.
Er recht umfangreich weil damit eigentlich eine Zusammenzugstabelle aus den 1300 Dateien damit generiert wird, den Code für die Übersichtserstellung habe ich entfernt und möchte jetzt das Update-Script einfügen.
Gruss
Martin
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 11:34:22
Modulen
Hallo Martin,
noch zwei Fragen:
1. Wie sind den die Daten in den Tabellen organisiert, immer gleich (also z.B. gleiche Anzahl Tabellenblätter) oder völlig unterschiedlich?
Ich frage wegen einer zweiten Möglichkeit der Umsetzung. Und zwar anlegen einer Masterdatei mit Code und Userforms (scheinst du ja schon zu haben) öffnen der Datendateien und rüberkopieren der Daten aus den Sheets in die Masterdatei, danach diese unter dem alten Namen abspeichern ...
2. Wenn das nicht geht, wie gut ist denn VBA GUT bei dir ?
Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 12:10:00
Modulen
Hallo Heiko
Frage1:
Wie sind den die Daten in den Tabellen organisiert, immer gleich (also z.B. gleiche Anzahl Tabellenblätter) oder völlig unterschiedlich?
Ich frage wegen einer zweiten Möglichkeit der Umsetzung. Und zwar anlegen einer Masterdatei mit Code und Userforms (scheinst du ja schon zu haben) öffnen der Datendateien und rüberkopieren der Daten aus den Sheets in die Masterdatei, danach diese unter dem alten Namen abspeichern ...
Die Datei enthält immer nur zwei Tabellenblätter,
wobei nur das Worksheets("Meldeblatt") die Bewegungsdaten enthällt.
Das Worksheets("Querry") wird nur für die QuerryTables verwendet und bleibt immer unverändert.
Die Idee mit dem Kopieren der Werte klingt sehr gut, das wäre natürlich eine Variante die sehr logisch erscheint.
Es ist aber etwas komplex.
Spielen wir diese Variante einmal durch,
1. öffnen der Datei nr.xxxx
2. kopieren des Tabellenblatt mit dem Namen "Meldeblatt"
3. öffnen einer neuen Volage
4. einfügen der Daten aus Datei Nr.xxxx (hier könnte ein Problem entstehen, da einige
Zellen einen Scriptgeschützten Überschreibenschutz enthalten und dieser darf nicht
verloren gehen also wenn kopieren, dann nur Werte)
5. schliessen der Datei Nr. xxxx
Jetzt besteht eine Datenbankanbindung die die Daten mittels SQL-Script aus einer DB2 Datenbank Aufgrund der Artikelnummer einfügt.
Damit der User nicht jedesmal wenn er die Datei öffnet nach der "Aktualisierung" abgefragt wird, habe ich in der Vorlage eine SecurSave Procedure eingerichtet welche beim Speichern die DB2 Anbindung (QuerryTables)entfernt. Diese Darf jedoch nur nach einer Aktualisierung der Stammdaten entfernt werden.
Anschliessend wird die Datei gespeichert.
6. speichern der Vorlage mit dem Namen der Datei Nr.xxxx
Wie Gut ist Gut für mich?
Na ja ich lerne sehr schnell, wenn mir etwas neues durch Profis beigebracht wird, ich schreibe alle Scrips eigentlich immer selber (also ohne Recorder der macht mir zu viel des Guten).
Aber immer wenn etwas total neu ist bin ich wohl eher ein Anfänger so wie jetzt wieder, leider steht die Option Beginner oder VBA Basics nicht zur Auswahl, gibt ja nur VBA nein, VBA gut usw..
Gruss
Martin
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 12:10:11
Modulen
Hallo Heiko
Frage1:
Wie sind den die Daten in den Tabellen organisiert, immer gleich (also z.B. gleiche Anzahl Tabellenblätter) oder völlig unterschiedlich?
Ich frage wegen einer zweiten Möglichkeit der Umsetzung. Und zwar anlegen einer Masterdatei mit Code und Userforms (scheinst du ja schon zu haben) öffnen der Datendateien und rüberkopieren der Daten aus den Sheets in die Masterdatei, danach diese unter dem alten Namen abspeichern ...
Die Datei enthält immer nur zwei Tabellenblätter,
wobei nur das Worksheets("Meldeblatt") die Bewegungsdaten enthällt.
Das Worksheets("Querry") wird nur für die QuerryTables verwendet und bleibt immer unverändert.
Die Idee mit dem Kopieren der Werte klingt sehr gut, das wäre natürlich eine Variante die sehr logisch erscheint.
Es ist aber etwas komplex.
Spielen wir diese Variante einmal durch,
1. öffnen der Datei nr.xxxx
2. kopieren des Tabellenblatt mit dem Namen "Meldeblatt"
3. öffnen einer neuen Volage
4. einfügen der Daten aus Datei Nr.xxxx (hier könnte ein Problem entstehen, da einige
Zellen einen Scriptgeschützten Überschreibenschutz enthalten und dieser darf nicht
verloren gehen also wenn kopieren, dann nur Werte)
5. schliessen der Datei Nr. xxxx
Jetzt besteht eine Datenbankanbindung die die Daten mittels SQL-Script aus einer DB2 Datenbank Aufgrund der Artikelnummer einfügt.
Damit der User nicht jedesmal wenn er die Datei öffnet nach der "Aktualisierung" abgefragt wird, habe ich in der Vorlage eine SecurSave Procedure eingerichtet welche beim Speichern die DB2 Anbindung (QuerryTables)entfernt. Diese Darf jedoch nur nach einer Aktualisierung der Stammdaten entfernt werden.
Anschliessend wird die Datei gespeichert.
6. speichern der Vorlage mit dem Namen der Datei Nr.xxxx
Wie Gut ist Gut für mich?
Na ja ich lerne sehr schnell, wenn mir etwas neues durch Profis beigebracht wird, ich schreibe alle Scrips eigentlich immer selber (also ohne Recorder der macht mir zu viel des Guten).
Aber immer wenn etwas total neu ist bin ich wohl eher ein Anfänger so wie jetzt wieder, leider steht die Option Beginner oder VBA Basics nicht zur Auswahl, gibt ja nur VBA nein, VBA gut usw..
Gruss
Martin
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 12:10:14
Modulen
Hallo Heiko
Frage1:
Wie sind den die Daten in den Tabellen organisiert, immer gleich (also z.B. gleiche Anzahl Tabellenblätter) oder völlig unterschiedlich?
Ich frage wegen einer zweiten Möglichkeit der Umsetzung. Und zwar anlegen einer Masterdatei mit Code und Userforms (scheinst du ja schon zu haben) öffnen der Datendateien und rüberkopieren der Daten aus den Sheets in die Masterdatei, danach diese unter dem alten Namen abspeichern ...
Die Datei enthält immer nur zwei Tabellenblätter,
wobei nur das Worksheets("Meldeblatt") die Bewegungsdaten enthällt.
Das Worksheets("Querry") wird nur für die QuerryTables verwendet und bleibt immer unverändert.
Die Idee mit dem Kopieren der Werte klingt sehr gut, das wäre natürlich eine Variante die sehr logisch erscheint.
Es ist aber etwas komplex.
Spielen wir diese Variante einmal durch,
1. öffnen der Datei nr.xxxx
2. kopieren des Tabellenblatt mit dem Namen "Meldeblatt"
3. öffnen einer neuen Volage
4. einfügen der Daten aus Datei Nr.xxxx (hier könnte ein Problem entstehen, da einige
Zellen einen Scriptgeschützten Überschreibenschutz enthalten und dieser darf nicht
verloren gehen also wenn kopieren, dann nur Werte)
5. schliessen der Datei Nr. xxxx
Jetzt besteht eine Datenbankanbindung die die Daten mittels SQL-Script aus einer DB2 Datenbank Aufgrund der Artikelnummer einfügt.
Damit der User nicht jedesmal wenn er die Datei öffnet nach der "Aktualisierung" abgefragt wird, habe ich in der Vorlage eine SecurSave Procedure eingerichtet welche beim Speichern die DB2 Anbindung (QuerryTables)entfernt. Diese Darf jedoch nur nach einer Aktualisierung der Stammdaten entfernt werden.
Anschliessend wird die Datei gespeichert.
6. speichern der Vorlage mit dem Namen der Datei Nr.xxxx
Wie Gut ist Gut für mich?
Na ja ich lerne sehr schnell, wenn mir etwas neues durch Profis beigebracht wird, ich schreibe alle Scrips eigentlich immer selber (also ohne Recorder der macht mir zu viel des Guten).
Aber immer wenn etwas total neu ist bin ich wohl eher ein Anfänger so wie jetzt wieder, leider steht die Option Beginner oder VBA Basics nicht zur Auswahl, gibt ja nur VBA nein, VBA gut usw..
Gruss
Martin
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 12:10:21
Modulen
Hallo Heiko
Frage1:
Wie sind den die Daten in den Tabellen organisiert, immer gleich (also z.B. gleiche Anzahl Tabellenblätter) oder völlig unterschiedlich?
Ich frage wegen einer zweiten Möglichkeit der Umsetzung. Und zwar anlegen einer Masterdatei mit Code und Userforms (scheinst du ja schon zu haben) öffnen der Datendateien und rüberkopieren der Daten aus den Sheets in die Masterdatei, danach diese unter dem alten Namen abspeichern ...
Die Datei enthält immer nur zwei Tabellenblätter,
wobei nur das Worksheets("Meldeblatt") die Bewegungsdaten enthällt.
Das Worksheets("Querry") wird nur für die QuerryTables verwendet und bleibt immer unverändert.
Die Idee mit dem Kopieren der Werte klingt sehr gut, das wäre natürlich eine Variante die sehr logisch erscheint.
Es ist aber etwas komplex.
Spielen wir diese Variante einmal durch,
1. öffnen der Datei nr.xxxx
2. kopieren des Tabellenblatt mit dem Namen "Meldeblatt"
3. öffnen einer neuen Volage
4. einfügen der Daten aus Datei Nr.xxxx (hier könnte ein Problem entstehen, da einige
Zellen einen Scriptgeschützten Überschreibenschutz enthalten und dieser darf nicht
verloren gehen also wenn kopieren, dann nur Werte)
5. schliessen der Datei Nr. xxxx
Jetzt besteht eine Datenbankanbindung die die Daten mittels SQL-Script aus einer DB2 Datenbank Aufgrund der Artikelnummer einfügt.
Damit der User nicht jedesmal wenn er die Datei öffnet nach der "Aktualisierung" abgefragt wird, habe ich in der Vorlage eine SecurSave Procedure eingerichtet welche beim Speichern die DB2 Anbindung (QuerryTables)entfernt. Diese Darf jedoch nur nach einer Aktualisierung der Stammdaten entfernt werden.
Anschliessend wird die Datei gespeichert.
6. speichern der Vorlage mit dem Namen der Datei Nr.xxxx
Wie Gut ist Gut für mich?
Na ja ich lerne sehr schnell, wenn mir etwas neues durch Profis beigebracht wird, ich schreibe alle Scrips eigentlich immer selber (also ohne Recorder der macht mir zu viel des Guten).
Aber immer wenn etwas total neu ist bin ich wohl eher ein Anfänger so wie jetzt wieder, leider steht die Option Beginner oder VBA Basics nicht zur Auswahl, gibt ja nur VBA nein, VBA gut usw..
Gruss
Martin
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 12:10:22
Modulen
Hallo Heiko
Frage1:
Wie sind den die Daten in den Tabellen organisiert, immer gleich (also z.B. gleiche Anzahl Tabellenblätter) oder völlig unterschiedlich?
Ich frage wegen einer zweiten Möglichkeit der Umsetzung. Und zwar anlegen einer Masterdatei mit Code und Userforms (scheinst du ja schon zu haben) öffnen der Datendateien und rüberkopieren der Daten aus den Sheets in die Masterdatei, danach diese unter dem alten Namen abspeichern ...
Die Datei enthält immer nur zwei Tabellenblätter,
wobei nur das Worksheets("Meldeblatt") die Bewegungsdaten enthällt.
Das Worksheets("Querry") wird nur für die QuerryTables verwendet und bleibt immer unverändert.
Die Idee mit dem Kopieren der Werte klingt sehr gut, das wäre natürlich eine Variante die sehr logisch erscheint.
Es ist aber etwas komplex.
Spielen wir diese Variante einmal durch,
1. öffnen der Datei nr.xxxx
2. kopieren des Tabellenblatt mit dem Namen "Meldeblatt"
3. öffnen einer neuen Volage
4. einfügen der Daten aus Datei Nr.xxxx (hier könnte ein Problem entstehen, da einige
Zellen einen Scriptgeschützten Überschreibenschutz enthalten und dieser darf nicht
verloren gehen also wenn kopieren, dann nur Werte)
5. schliessen der Datei Nr. xxxx
Jetzt besteht eine Datenbankanbindung die die Daten mittels SQL-Script aus einer DB2 Datenbank Aufgrund der Artikelnummer einfügt.
Damit der User nicht jedesmal wenn er die Datei öffnet nach der "Aktualisierung" abgefragt wird, habe ich in der Vorlage eine SecurSave Procedure eingerichtet welche beim Speichern die DB2 Anbindung (QuerryTables)entfernt. Diese Darf jedoch nur nach einer Aktualisierung der Stammdaten entfernt werden.
Anschliessend wird die Datei gespeichert.
6. speichern der Vorlage mit dem Namen der Datei Nr.xxxx
Wie Gut ist Gut für mich?
Na ja ich lerne sehr schnell, wenn mir etwas neues durch Profis beigebracht wird, ich schreibe alle Scrips eigentlich immer selber (also ohne Recorder der macht mir zu viel des Guten).
Aber immer wenn etwas total neu ist bin ich wohl eher ein Anfänger so wie jetzt wieder, leider steht die Option Beginner oder VBA Basics nicht zur Auswahl, gibt ja nur VBA nein, VBA gut usw..
Gruss
Martin
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 12:44:06
Modulen
Hallo Martin,
dann mal fröhliches ausprobieren. Gehen wir doch mal den Weg über Module kopieren, da ich von SQL Anbindung und den daraus entstehenden Problemen keine Ahnung habe.
Folgender Code kopiert Module, Userforms und Klassenmodule von einer Quell in eine Zielmappe, kannst du damit schon mal was anfangen ?!

Sub allModulsCopy()
Dim strPath As String, strNewBookName As String
Dim vbc As Object
' Das muß innerhalb deiner Schleife !
' Quell und Zielmappe müssen offen sein !!!
' das können dann die Variablen sein in denen du deine Dateiname hast.
Dim strQuelle As String, strZiel As String
strZiel = "Mappe2"
strQuelle = "Mappe3"
strPath = Application.Path & "\"
On Error GoTo Errorhandler
' Löscht erstmal ALLES aus der Zielmappe
With Workbooks(strZiel).VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
' Wenn Type = 1 dann ist es ein Standardmodul, dies wird komplett gelöscht!
' Wenn Type = 2 dann ist es ein Klassennmodul, dies wird komplett gelöscht!
' Wenn Type = 3 dann ist es ein Userform, dies wird komplett gelöscht!
Case 1 To 3:  .VBComponents.Remove .VBComponents(vbc.Name)
' Wenn Type = 100, also DieseArbeitsmappe oder ein Tabellenblatt, dann darin
' alle Codezeilen löschen. Denn die Datei und die Tabellenblätter sollen ja
' erhalten bleiben, also nur den Code löschen.
Case 100
With .VBComponents(vbc.Name).CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
MsgBox "Unbekannter VBA Type !", vbCritical
End Select
Next vbc
End With
' Kopiert nun die Module von der Quelle in das Ziel.
' DieseArbeitsmappe und die Tabellenblätter laufen etwas anders das muss ich nochmal selbst
' ausprobieren.
With Workbooks(strQuelle).VBProject
For Each vbc In .VBComponents
If vbc.Type = 1 Or vbc.Type = 2 Or vbc.Type = 3 Then
vbc.Export strPath & vbc.Name & ".txt"
Workbooks(strZiel).VBProject.VBComponents.Import strPath & vbc.Name & ".txt"
Kill strPath & vbc.Name & ".txt"
End If
Next vbc
End With
MsgBox "Module wurde kopiert!"
Exit Sub
' Die Fehlerbehandlung kannst du auch rauslassen, wenn du den Zugriff aufs VBA Projekt zugelassen
' hast.
' Bei Fehlernummer 1004, diese Meldung ausgeben.
Errorhandler:
If Err.Number = 1004 Then
MsgBox "Das kopieren des VBA Moduls ist fehlgeschlagen!" & vbCr & _
"Bitte überprüfen Sie folgende Einstellung! " & vbCr & _
"EXTRAS -> MAKRO -> SICHERHEIT -> Vertrauenwürdige Quellen." & vbCr & _
"'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ", vbCritical, _
" Meldung vom Makro Module exportieren!"
Else
MsgBox "Err.Number = " & Err.Number & ".   " & Err.Description, vbCritical
End If
' Fehlernummer löschen.
Err.Clear
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 13:20:50
Modulen
Hallo Martin,
hier nun auch mit DieseArbeitsmappe und Tabellenblättern.
Das ganze ist natürlich nur ein Vorschlag, den du dir noch anpassen mußt, viel Spaß dabei. Rückmeldung wäre nett !!!!

Sub allModulsCopy()
Dim lngI As Long
Dim strPath As String, strNewBookName As String
Dim vbc As Object
' Das muß innerhalb deiner Schleife !
' Quell und Zielmappe müssen offen sein !!!
' das können dann die Variablen sein in denen du deine Dateiname hast.
Dim strQuelle As String, strZiel As String
strZiel = "Mappe2"
strQuelle = "Mappe3"
strPath = Application.Path & "\"
On Error GoTo Errorhandler
' Löscht erstmal ALLES aus der Zielmappe
With Workbooks(strZiel).VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
' Wenn Type = 1 dann ist es ein Standardmodul, dies wird komplett gelöscht!
' Wenn Type = 2 dann ist es ein Klassennmodul, dies wird komplett gelöscht!
' Wenn Type = 3 dann ist es ein Userform, dies wird komplett gelöscht!
Case 1 To 3:  .VBComponents.Remove .VBComponents(vbc.Name)
' Wenn Type = 100, also DieseArbeitsmappe oder ein Tabellenblatt, dann darin
' alle Codezeilen löschen. Denn die Datei und die Tabellenblätter sollen ja
' erhalten bleiben, also nur den Code löschen.
Case 100
With .VBComponents(vbc.Name).CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
MsgBox "Unbekannter VBA Type !", vbCritical
End Select
Next vbc
End With
' Kopiert nun die Module von der Quelle in das Ziel.
' DieseArbeitsmappe und die Tabellenblätter laufen etwas anders das muss ich nochmal selbst
' ausprobieren.
With Workbooks(strQuelle).VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
' Wenn Type = 1 dann ist es ein Standardmodul, dies wird komplett gelöscht!
' Wenn Type = 2 dann ist es ein Klassennmodul, dies wird komplett gelöscht!
' Wenn Type = 3 dann ist es ein Userform, dies wird komplett gelöscht!
Case 1 To 3
vbc.Export strPath & vbc.Name & ".txt"
Workbooks(strZiel).VBProject.VBComponents.Import strPath & vbc.Name & ".txt"
Kill strPath & vbc.Name & ".txt"
Case 100
vbc.Export strPath & vbc.Name & ".txt"
Workbooks(strZiel).VBProject.VBComponents(vbc.Name).CodeModule.AddFromFile strPath & vbc.Name & ".txt"
' Vorsicht Trick um die ersten vier Zeilen im Codefenster zu löschen, da aus der Datei
' da was drin steht was da nicht hingehört. Gucken ob das bei dir so läuft.
Workbooks(strZiel).VBProject.VBComponents(vbc.Name).CodeModule.DeleteLines 1, 4
Kill strPath & vbc.Name & ".txt"
Case Else
MsgBox "Unbekannter VBA Type !", vbCritical
End Select
Next vbc
End With
MsgBox "Module wurde kopiert!"
Exit Sub
' Die Fehlerbehandlung kannst du auch rauslassen, wenn du den Zugriff aufs VBA Projekt zugelassen
' hast.
' Bei Fehlernummer 1004, diese Meldung ausgeben.
Errorhandler:
If Err.Number = 1004 Then
MsgBox "Das kopieren des VBA Moduls ist fehlgeschlagen!" & vbCr & _
"Bitte überprüfen Sie folgende Einstellung! " & vbCr & _
"EXTRAS -> MAKRO -> SICHERHEIT -> Vertrauenwürdige Quellen." & vbCr & _
"'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ", vbCritical, _
" Meldung vom Makro Module exportieren!"
Else
MsgBox "Err.Number = " & Err.Number & ".   " & Err.Description, vbCritical
End If
' Fehlernummer löschen.
Err.Clear
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 13:29:55
Modulen
Hallo Heiko
Vorerst vielen Dank, bin zur Zeit am Testen der ersten Version ohne Case 100, sieht sehr gut aus.
Gruss
Martin
Wie kann ich nur Danke sagen? "MERCI" ;¢)
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 13:43:52
Modulen
Hallo Heiko
Bei dieser Code lInie gibt es eine Fehlermeldung mit Error Code: Laufzeitfehler 9
Index auserhalb des gültigen Bereichs

Workbooks(strZiel).VBProject.VBComponents(vbc.Name).CodeModule.AddFromFile strPath & vbc.Name & ".txt"
fehlt da eventuell das Import?
Gruss
Martin
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 13:53:20
Modulen
Hallo Martin,
könnte daran liegen das in der Quelldatei eine andere Anzahl an Tabellenblättern vorhanden ist als in der Zieldatei, dann kann (vbc.name) in der Zieldatei natürlich nicht gefunden werden.
Oder aber, der Name der Tabellenblätter in Quell und Zieldatei ist anders (also Sheets Name und VBA Name).
Ist das so ?!
Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 14:07:50
Modulen
Hallo Heiko
Es ist wirklich zum hinfallen, es stimmt, die ganz alten Dateien haben nur eine Tabelle mit dem Namen "Meldeblatt".
Sicher ist nur, dass die Tabellenblätter die mit Modulen ergänzt werden müssen alle "Meldeblatt" lauten.
Ja mein Vorgänger war da wohl nicht so konsequent, was Einheitlich bedeuted!
Jetzt muss ich auch noch prüfen ob die Tabelle "Querry" fehlt und diese bei bedarf aus der Quelle Kopieren.
Oder siehst Du einen anderen Weg?
Unendlichen Dank
Martin
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 14:23:22
Modulen
Hallo Martin,
wenn du die Tabelle Query für deine Auswertungen brauchst dann mußt du sie wohl rüberkopieren.
Wenn die Mappen auch ohne Tabelle Query laufen würden, dann kannst du im Code ja abfragen wieviele Tabellen drin sind und entsprechend darauf reagieren.
Also wenn nur eine dann, kopiere nur diese.
Wenn zwei dann for Each .VBComponents oder so ähnlich.
Das überlass ich, da ich deine Tabellen nicht sehen kann, nun mal deinem VBA Können, Anregungen hast du ja genug bekommen.
Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 14:28:14
Modulen
Hallo Heiko
Vielen Dank für den Code, werde vieleicht auch mal etwas für Dich tun können.
Habe erst einmal einen Beitrag geleistet, der ein Tabu war.
Das versenden von EMail mit VBA ohne oder mit Anhang via Novell Groupwise.
Bei Interesse,
Mit freundlichen Grüssen
Martin
AW: Kopieren von Modulen und Userform in 1300 Dateien
02.08.2005 22:01:32
Modulen
Hallo Heiko
Beim Folgenden Codeabschnitt aus deinem Macro, erhalte ich eine Fehlermeldung.
Und Excel stürzt ab.
' Vorsicht Trick um die ersten vier Zeilen im Codefenster zu löschen, da aus der Datei
' da was drin steht was da nicht hingehört. Gucken ob das bei dir so läuft.
Workbooks(strZiel).VBProject.VBComponents(vbc.Name).CodeModule.DeleteLines 1, 4
So wie es aussieht, lässt sich der Code nicht löschen wie geplant.
Hier die Codeanpassung meinerseits, welche dafür sorge trägt, dass immer Zwei Tabellen mit den selben Namen enthalten sind.


      
If Sheets.Count < 2 Then
    Windows("Vorlage Meldeblatt Event-Aktionen1").Activate
    Sheets("Querry").Visible = 
True
    Sheets("Querry").Copy After:=Workbooks(name1).Sheets("Meldeblatt")
    Sheets("Meldeblatt").Select
    Sheets("Querry").Visible = xlVeryHidden
    Windows(name1).Activate
    Sheets("Querry").Visible = xlVeryHidden
    
End If
    
'CodeName des neuen Blattes aendern
     Sheets("Meldeblatt").Select
    
If ActiveSheet.CodeName <> "Tabelle1" Then
        
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
             .Properties("_CodeName").Value = "Tabelle1"
        
End With
    
End If
    Sheets("Querry").Visible = 
True
    Sheets("Querry").Select
    
If ActiveSheet.CodeName <> "Tabelle2" Then
        
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
             .Properties("_CodeName").Value = "Tabelle2"
        
End With
    
End If
Sheets("Querry").Visible = xlVeryHidden
ActiveSheet.Unprotect Password:="******"
ActiveWorkbook.Unprotect Password:="******"
strZiel = name1
strQuelle = "Vorlage Meldeblatt Event-Aktionen1"
strPath = Application.Path & "\"
On Error GoTo Errorhandler
' Löscht erstmal ALLES aus der Zielmappe
With Workbooks(strZiel).VBProject
    
For Each vbc In .VBComponents
        
Select Case vbc.Type
        
' Wenn Type = 1 dann ist es ein Standardmodul, dies wird komplett gelöscht!
        ' Wenn Type = 2 dann ist es ein Klassennmodul, dies wird komplett gelöscht!
        ' Wenn Type = 3 dann ist es ein Userform, dies wird komplett gelöscht!
        Case 1 To 3:  .VBComponents.Remove .VBComponents(vbc.Name)
        
' Wenn Type = 100, also DieseArbeitsmappe oder ein Tabellenblatt, dann darin
        ' alle Codezeilen löschen. Denn die Datei und die Tabellenblätter sollen ja
        ' erhalten bleiben, also nur den Code löschen.
        Case 100
            
With .VBComponents(vbc.Name).CodeModule
                .DeleteLines 1, .CountOfLines
            
End With
        
Case Else
            MsgBox "Unbekannter VBA Type !", vbCritical
        
End Select
    
Next vbc
End With
' Kopiert nun die Module von der Quelle in das Ziel.
' DieseArbeitsmappe und die Tabellenblätter laufen etwas anders das muss ich nochmal selbst
' ausprobieren.
With Workbooks(strQuelle).VBProject
    
For Each vbc In .VBComponents
        
Select Case vbc.Type
        
' Wenn Type = 1 dann ist es ein Standardmodul, dies wird komplett gelöscht!
        ' Wenn Type = 2 dann ist es ein Klassennmodul, dies wird komplett gelöscht!
        ' Wenn Type = 3 dann ist es ein Userform, dies wird komplett gelöscht!
        Case 1 To 3
            vbc.Export (strPath & "Meldeblatt" & ".txt")
            Workbooks(strZiel).VBProject.VBComponents.Import strPath & "Meldeblatt" & ".txt"
            Kill strPath & "Meldeblatt" & ".txt"
        
Case 100
            vbc.Export (strPath & vbc.Name & ".txt")
            Workbooks(strZiel).VBProject.VBComponents(vbc.Name).CodeModule.AddFromFile strPath & vbc.Name & ".txt"
            
' Vorsicht Trick um die ersten vier Zeilen im Codefenster zu löschen, da aus der Datei
            ' da was drin steht was da nicht hingehört. Gucken ob das bei dir so läuft.
            Workbooks(strZiel).VBProject.VBComponents(vbc.Name).CodeModule.DeleteLines 1, 4
            Kill strPath & vbc.Name & ".txt"
        
Case Else
            MsgBox "Unbekannter VBA Type !", vbCritical
        
End Select
    
Next vbc
End With
MsgBox "Module wurde kopiert!"
Exit Sub
' Die Fehlerbehandlung kannst du auch rauslassen, wenn du den Zugriff aufs VBA Projekt zugelassen
' hast.
' Bei Fehlernummer 1004, diese Meldung ausgeben.
Errorhandler:
    
If Err.Number = 1004 Then
        MsgBox "Das kopieren des VBA Moduls ist fehlgeschlagen!" & vbCr & _
           "Bitte überprüfen Sie folgende Einstellung! " & vbCr & _
           "EXTRAS -> MAKRO -> SICHERHEIT -> Vertrauenwürdige Quellen." & vbCr & _
           "'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ", vbCritical, _
           " Meldung vom Makro Module exportieren!"
    
Else
        MsgBox "Err.Number = " & Err.Number & ".   " & Err.Description, vbCritical
    
End If
    
' Fehlernummer löschen.
    Err.Clear
'VBA-Kennwort setzen
    SendKeys "%{F11} %Xi{TAB 9}{RIGHT}{tab}a{tab}" & "service" & "{TAB}" & "service" & "{tab}{enter} %q" 


Eventuell hast Du eine Erklärung.
Mit freundlichen Grüssen
Martin
AW: Kopieren von Modulen und Userform in 1300 Dateien
03.08.2005 07:33:48
Modulen
Hallo Martin,
hab mir den Code jetzt nicht genauer angeschaut, aber kommentiere die fehlerhafte Zeile doch mal aus und lass das ganze dann laufen.
Läuft es dann und wenn ja was steht im Codefenster von diese Arbeitsmappe und den Tabellenblättern. Nur der Code (bzw gar keiner) den du kopiert hast oder ganz oben noch sowas:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Das steht nämlich bie mir und wird dann durch die DeleteLines Zeile rausgelöscht.
Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Kopieren von Modulen und Userform in 1300 Dateien
03.08.2005 08:47:06
Modulen
Hallo Heiko
es ist wie Du sagst, der Code wird eingefügt in "Diese Arbeitsmappe" und in "Tabelle1".
Im Code von "Diese Arbeitsmappe" wurden auch die Linien 1 - 4 gelöscht.
Der Code von "Tabelle1" wird eingefügt aber beim Löschen der Zeilen 1 - 4 passiert es,
Das System meldet einen Fehler(leider kann ich den nicht abfangen, da das System einen Problembericht senden will und Excel neustartet) mit ungefährem Inhalt:

Verbindung zum Objekt verloren.
Gruss
Martin
AW: Kopieren von Modulen und Userform in 1300 Dateien
03.08.2005 09:10:41
Modulen
Hallo Heiko
Habe die Fehlermeldung abgefangen.


Userbild


Gruss
Martin
?
03.08.2005 10:30:50
Heiko
Hallo Martin,
da gehen mir langsam die Ideen aus:
Tritt der Fehler bei allen Dateien auf, oder nur bei bestimmten (z.B. wenn die Datei defekt ist) ?
Sind da denn wirklich die vier Zeilen drin die gelöscht werden sollen? Obwohl ich das bei mir auch schon getestet habe, da gibts dann zwar ne Fehlermeldung aber keinen Absturz.
Vielleicht hat es was mit der SQL Anbindung zu tun (Clients getrennt), aber wie gesagt mit SQL Anbindungen habe ich noch nicht gearbeitet.
?
Keine weiteren Ideen, da es bei mir läuft. XP und EXCEL 2002 (Version 10 SP 2)
Gruß Heiko

PS: Rückmeldung wäre nett !
AW: ?
03.08.2005 13:27:59
Manhartm
Hallo Heiko
Das ist jetzt wirklich sehr komplex.
Es tritt bei allen Dateien auf und nur wenn der Code bei der Tabelle1 eingefügt wird.
Bei mir läuft XP und EXCEL 2002 (Version 10 SP3)
Aber Danke für Deine Hilfe.
Denke mal dass ich für dieses Problem später einmal einen neuen Trade eröffnen werde.
Versuche vorher mal einiges auszuprobieren.
Gruss
Martin
PS vielecht liegt es an meinen Dateien.
Neuer Hinweis
03.08.2005 13:25:09
Heiko
Hallo Martin,
habe da noch was im Archiv gefunden:
https://www.herber.de/forum/archiv/260to264/t262904.htm
Und man sieht um in DieseArbeitsmappe bzw. Tabellenblätter zu importieren muss selbst Nepumuk tricksen. (Erst in ein Klassenmodul importieren, dann Zeilenweise rüberkopieren und dann das Klassenmodul löschen).
Vielleicht geht es ja so bei dir ohne Fehlermeldung, viel Spaß beim testen.
Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Neuer Hinweis
03.08.2005 14:05:02
Manhartm
Hallo Heiko (und natürlich auch Nepumuk der Grosse)
Das sieht sehr gut aus, muss das aber noch in aller Ruhe heute Abend vertesten, das Tagesgeschäft frisst mich zur Zeit auf.
Aber die hohe Fachkompetenz in diesem Forum ist wieder einmal deutlich Auszuloben. Wo denn, wenn nicht hier, findet man eine so grosse Reaktionszeit auf Tread's und wo denn, wenn nicht hier, ist die Lösung bei ca. 99%?
Gruss
Martin
Wer weiss, vieleicht braucht Ihr auch mal Hilfe von mir (denke das dies eher selten vorkommt, aber habe auch schon einmal mit einer Lösung Nepumuk überrascht).
AW: Neuer Hinweis
03.08.2005 22:37:13
Manhartm
Hallo Heiko
Auch die Variante von Nepumuk ist nicht praktikabel, immer noch den selben Fehler wie bis anhin.
Vieleicht weiss irgend jemand im Forum wie ich das hinkriegen könnte?
Gruss Martin
Neuer Versuch:
04.08.2005 07:13:34
Heiko
Hallo Martin,
hast du denn schon mal getestet ob das bei dir auf dem Rechner (XP und 2002 SP 10 war das glaube ich) überhaupt läuft.
Sprich, hast du mal 2 - 3 NEUE Mappen erzeugt, nur mit den zwei Tabellen drin die du brauchst und in VBE jeweils nur ein bisschen Code den du austauschen willst. Aber das ganze dann ohne SQL Anbíndung und was du da sonst noch für seltenheiten drin hast.
Weil wenn selbst das nicht geht, wäre das mal ne Frage für einen neuen Thread.
Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Neuer Versuch:
04.08.2005 09:37:40
Manhartm
Hallo Heiko
Zuerst vielen Dank für die Zeit die Du für diesen Tread aufwendest.
Also zur Version: (XP mit Excel 2002 Version 10 SP3).
Nach einigen Tests mit leeren Mappen, konnte ich den Sript ohne Fehler beeenden.
Die Analyse muss jetzt im Code der Tabelle1 weitergehen, es ist vermutlich ein Teil im Script welcher beim einfügen den Fehler verursacht.
Hier der Script aus der Tabelle1:


      
Option Explicit
Dim full As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
   
If Not Intersect(Target, Range("U3:U6")) Is Nothing Or _
      
Not Intersect(Target, Range("W4:W5")) Is Nothing Then
      
      
If full = True Then
         Application.EnableEvents = 
False
         Application.Undo
         Application.EnableEvents = 
True
         MsgBox ("Diese Zelle darf nur 1x beschrieben werden," & vbLf & _
         "Bitte verwenden Sie zur Änderung des" & vbLf & _
         "Datums den Bereich ""Verschiebung Zeitpunkt"" rechts oben!")
      
End If
   
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("U3:U6")) Is Nothing Or _
   
Not Intersect(Target, Range("W4:W5")) Is Nothing Then
   
If Target = "" Then full = False Else full = True
   
End If
End Sub 


Gruss Martin
AW: Neuer Versuch:
04.08.2005 10:07:48
Heiko
Hallo Martin,
habe deinen Code mal in meine Testtabelle 1 gepackt.
Läuft ohne Probleme, keine Fehlermeldung.
Also wohl doch was anderes als der Code.
Habe jetzt aber erstmal was zu tun, wenn mir noch was einfällt melde ich mich noch mal.
Gruß Heiko

PS: Rückmeldung wäre nett !
Hier der Code
02.08.2005 11:26:37
Manhartm
Hier noch der ganze Code
Public

Sub Aktualisieren(ByVal lblProgress As MSForms.Label, _
ByVal lblProgressTxt As MSForms.Label, _
ByVal fraProgress As MSForms.Frame, _
ByVal lblProgress2 As MSForms.Label, _
ByVal lblProgressTxt2 As MSForms.Label, _
ByVal lblProgressTxt3 As MSForms.Label, _
ByVal lblProgressTxt4 As MSForms.Label, _
ByVal lblProgressTxt5 As MSForms.Label, _
ByVal lblProgressTxt6 As MSForms.Label, _
ByVal fraProgress2 As MSForms.Frame)
'   Generieren der Zusammenfassung (Cockpit) In/Out/Event
Dim t As Long
t = Timer
Dim fs, pfad1, name1, pfad2, name2, I, III, nCellsCnt, nRowsMax, nRowsMax2, dblProgress, dblProgress2
Dim Verz(60)
Dim Dateien(500)
Dim Markierbereich, AnzahlZeilen, LetzteZeile, AktuelleZeile, AktuelleSpalte
Dim Merker1, Merker2, Z1, Z2, Pruefung
Dim Kennwort, KWort, MailWort
Kennwort = "******"
MailWort = "ja"
KWort = InputBox("VB-SCRIPT PROGRAMMING:" & Chr(10) & "DM-Planning-Team" & Chr(10) & Chr(10) & _
" Bitte deaktivieren Sie jetzt als erstes, die Antivirensoftware! " & Chr(10) _
& " Rechte Maustaste auf Tasksymbol des Virenprogramms, " & Chr(10) & " Snooze auf 10 Minuten einstellen. " & _
Chr(10) & Chr(10) & "Geben Sie anschliessend bitte das" & Chr(10) & "Kennwort für den Start ein!")
If KWort <> Kennwort Then
MsgBox "SORRY" & Chr(10) & "Sie haben ein falsches Kennwort eingegeben"
End
End If '
Set fs = Application.FileSearch
With Application
.Calculation = xlManual
End With
Grundstellung
Application.AutoRecover.Enabled = False
Application.EnableEvents = False
Application.DisplayAlerts = False
'lblProgressTxt.ForeColor = vbBlack
AktuelleZeile = 8
LetzteZeile = Range("A9").CurrentRegion.Rows.Count + 8
Markierbereich = "9:" & LetzteZeile
Rows(Markierbereich).Delete Shift:=xlUp
'   pfad1 = "J:\AKTIONEN\AKTIONEN2005\"
Application.ScreenUpdating = False
pfad1 = Cells(2, 6)
name1 = Dir(pfad1, vbDirectory) ' Ersten Eintrag abrufen.
I = 0
Z1 = 0
Z2 = 0
Merker2 = ActiveWorkbook.Name
Sheets("Zusammenfassung").Range("J3").Value = Merker2
Do While name1 <> ""    ' Schleife beginnen.
' Aktuelles und übergeordnetes Verzeichnis ignorieren.
If name1 <> "." And name1 <> ".." Then
' Mit bit-weisem Vergleich sicherstellen, daß Name1 ein
' Verzeichnis ist.
If (GetAttr(pfad1 & name1) And vbDirectory) = vbDirectory Then
'Eintrag nur verwenden, wenn es sich um ein Verzeichnis handelt
I = I + 1
Verz(I) = name1
End If
End If
name1 = Dir ' Nächsten Eintrag abrufen.
Loop
With fs
.LookIn = pfad1
.SearchSubFolders = True
.Filename = "*.xls"
If .Execute > 0 Then
nRowsMax = .FoundFiles.Count
End If
End With
III = nRowsMax
lblProgressTxt4.Caption = nRowsMax
Application.ShowWindowsInTaskbar = False
Do While I > 0
'Zähler rückstellen für Statusbar2
nRowsMax2 = 0
name2 = Verz(I)
pfad2 = pfad1 & name2 & "\"
name1 = Dir(pfad2, vbNormal)
Do While name1 <> ""    ' Schleife beginnen.
' Aktuelles und übergeordnetes Verzeichnis ignorieren.
If name1 <> "." And name1 <> ".." Then
' Mit bit-weisem Vergleich sicherstellen, daß Name1 ein Verzeichnis ist.
If (GetAttr(pfad2 & name1) And vbDirectory) <> vbDirectory Then
' Eintrag nur verwenden, wenn es sichum ein Verzeichnis handelt.
'On Error GoTo OpenWS
'--- Code-Beginn  für Fortschrittsleiste ---
'dblProgress berechnen:
dblProgress = (nRowsMax - III) / nRowsMax
If dblProgress > 0.45 Then
lblProgressTxt.ForeColor = vbWhite
End If
'Prozent-Angaben auf Label aktualisieren
lblProgressTxt.Caption = Format(dblProgress, "0 %")
'Breite des Labels aktualisieren
lblProgress.Width = dblProgress * (fraProgress.Width)
'Anzeige auf UserForm aktualisieren
DoEvents
'--- Code-Ende für Fortschrittsleiste ---
'--- Code-Beginn  für Fortschrittsleiste2 ---
If Z2 < 1 Then
With fs
.LookIn = pfad2
.SearchSubFolders = True
.Filename = "*.xls"
If .Execute > 0 Then
nRowsMax2 = .FoundFiles.Count
III = III - Z1
Z2 = nRowsMax2
Z1 = Z2
End If
lblProgressTxt3.Caption = nRowsMax - III
End With
lblProgressTxt2.ForeColor = vbBlack
lblProgressTxt6.Caption = nRowsMax2
End If
'dblProgress2 berechnen:
dblProgress2 = (nRowsMax2 - Z2) / nRowsMax2
If dblProgress2 > 0.45 Then
lblProgressTxt2.ForeColor = vbWhite
End If
'Prozent-Angaben auf Label2 aktualisieren
lblProgressTxt2.Caption = Format(dblProgress2, "0 %")
'Breite des Labels2 aktualisieren
lblProgress2.Width = dblProgress2 * (fraProgress2.Width)
'Anzeige auf UserForm aktualisieren
DoEvents
Z2 = Z2 - 1
lblProgressTxt5.Caption = nRowsMax2 - Z2
End If
'--- Code-Ende für Fortschrittsleiste2 ---
Workbooks.Open Filename:=pfad2 & name1, ReadOnly:=True, UpdateLinks:=0
If Workbooks(name1).Sheets(1).Range("T1").Value <> "Meldeblatt Aktionen/EinAusl" Then
' falls kein Aktionexcel gleich wieder schliessen
' Workbooks.Close
Workbooks(name1).Close (False)
Else
'Hier Daten ab Aktionsexcel
'Dies ist er Update-Script Bereich, hier sollte das Script stehen
End If
End If
name1 = Dir() ' Nächsten Eintrag abrufen.
Loop
I = I - 1
Loop
lblProgressTxt5.Caption = nRowsMax2 - Z2
lblProgressTxt3.Caption = nRowsMax - III
DoEvents
Application.ShowWindowsInTaskbar = True
' Abschliessen des Makro mit Aktivierung der Zelle A1
'Workbooks(Merker2).Sheets("Zusammenfassung").Cells(2, 10) = ""
Application.AutoRecover.Enabled = False
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
ActiveSheet.Range("J5").Value = Now ', "mm:hh:ss"
ActiveSheet.Range("M5").Value = Format((Timer - t) / 86400, "hh:mm:ss")
ActiveSheet.Range("N5").Value = Application.UserName
Sheets("Zusammenfassung").Select
Range("A1").Select
MsgBox Format((Timer - t) / 86400, "hh:mm:ss")
ThisWorkbook.Save
End Sub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige