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

Inhalte in alle Dateien kopieren

Inhalte in alle Dateien kopieren
08.03.2023 12:56:07
Christian
Hallo,
ich habe 2 Herausforderungen:
1. Ich möchte aus einer Datei, die geöffnet ist, den Bereich C3:C51 kopieren und automatisch in alle Dateien in diesem Verzeichnis (C:\Test) kopieren (alle Dateien haben dieselbe Datenstruktur und das Sheet Tabelle1).
2. Ich möchte aus derselben Datei, die geöffnet ist, die bedingte Formatierung, die in den Zellen D3:D51 ist, automatisch in alle Dateien in diesem Verzeichnis (C:\Test) übertragen (alle Dateien haben dieselbe Datenstruktur und das Sheet Tabelle1).
Das können auch 2 unterschiedliche Schritte sein.
Erweitert ist die Frage, ob ich das auch auf alle Dateien in den Unterverzeichnissen ausdehnen kann?
Ich habe bereits einen Code vorliegen, mit dem ich bei allen Dateien in dem Verzeichnis und Unterverzeichnissen den Passwortschutz aufgehoben habe.
Vielleicht kann man diesen Code verwenden und nur anpassen?
Vielen Dank für eure Unterstützung
Hier der Code, den ich verwendet habe (das tatsächliche Passwort ist anders):

Option Explicit
Private Declare Function SHGetFileInfo Lib "Shell32" Alias "SHGetFileInfoA" (ByVal pszPath As Any, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
Private Const MAX_PATH = 260
Private Const SHGFI_TYPENAME = &H400&
Private Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * MAX_PATH
szTypeName As String * 80
End Type
Public Enum SORT_BY
Sort_by_None
Sort_by_Name
Sort_by_Path
Sort_by_Size
Sort_by_Last_Access
Sort_by_Last_Modyfy
Sort_by_Date_Create
End Enum
Public Enum SORT_ORDER
Sort_Order_Ascending
Sort_Order_Descending
End Enum
Public Type FILEINFO
strFilename As String
strPath As String
lngSize As Long
dmtLastAccess As Date
dmtLastModify As Date
dmtDateCreate As Date
End Type
Sub schutzAn()
protectAllSheets ""C:\Test", "DeinPasswort", True
End Sub
Sub schutzAus()
protectAllSheets "C:\Test", "DeinPasswort", False
End Sub
Sub protectAllSheets(Directory As String, Password As String, Protection As Boolean)
Dim objFileSearch As clsFileSearch
Dim objWB As Workbook, objSH As Worksheet
Dim strFile As String, strDir As String
Dim lngCalc As Long, lngIndex As Long
On Error GoTo ErrExit
With Application
  .ScreenUpdating = False
  .EnableEvents = False
  lngCalc = .Calculation
  .Calculation = xlCalculationManual
  .DisplayAlerts = False
End With
Set objFileSearch = New clsFileSearch
With objFileSearch
  .CaseSenstiv = False
  .Extension = "*.xls*"
  .FolderPath = Directory
  .SearchLike = "*"
  .SubFolders = True
  If .Execute() > 0 Then
    For lngIndex = 1 To .FileCount
      If LCase(.Files(lngIndex).strPath) > LCase(ThisWorkbook.FullName) And Not .Files(lngIndex).strPath Like "*~$*" Then
        Application.StatusBar = "Bearbeite Datei " & lngIndex & " von " & .FileCount
        Set objWB = Workbooks.Open(.Files(lngIndex).strPath, UpdateLinks:=False)
        For Each objSH In objWB.Worksheets
          If Protection Then
            objSH.Protect Password
          Else
            objSH.Unprotect Password
          End If
        Next
        objWB.Close True
      End If
    Next
  End If
End With
ErrExit:
With Err
  If .Number > 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'protectAllSheets'" & vbLf & String(60, "_") & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
      "VBA - Fehler in Modul - Modul1"
    .Clear
  End If
End With
On Error GoTo 0
With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = lngCalc
  .DisplayAlerts = True
  .StatusBar = False
End With
Set objWB = Nothing
Set objSH = Nothing
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalte in alle Dateien kopieren
08.03.2023 13:23:39
Rudi
Hallo,
könnte so gehen:
Sub BereichKopieren(Directory As String)
  Dim objFileSearch As clsFileSearch
  Dim objWB As Workbook, objSH As Worksheet
  Dim strFile As String, strDir As String
  Dim lngCalc As Long, lngIndex As Long
  Dim rngQuelle As Worksheet
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
  End With
  
  Set rngQuelle = ActiveSheet.Range("C3:D51")
  
  Set objFileSearch = New clsFileSearch
  
  With objFileSearch
    .CaseSenstiv = False
    .Extension = "*.xls*"
    .FolderPath = Directory
    .SearchLike = "*"
    .SubFolders = True
    If .Execute() > 0 Then
      For lngIndex = 1 To .FileCount
        If LCase(.Files(lngIndex).strPath) > LCase(ThisWorkbook.FullName) And Not .Files(lngIndex).strPath Like "*~$*" Then
          
          Application.StatusBar = "Bearbeite Datei " & lngIndex & " von " & .FileCount
          Set objWB = Workbooks.Open(.Files(lngIndex).strPath, UpdateLinks:=False)
          rngQuelle.Copy objWB.Sheets("Tabelle1").Range("C3") 'Zielbereich anpassen
          
          objWB.Close True
          
        End If
      Next
    End If
  End With
  
ErrExit:
  
  With Err
    If .Number > 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'BereichKopieren'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
    .StatusBar = False
  End With
  
  Set objWB = Nothing
  Set objSH = Nothing
End Sub
Gruß
Rudi
Anzeige
AW: Inhalte in alle Dateien kopieren
08.03.2023 14:12:58
Christian
Hallo Rudi,
vielen Dank, ich werde es dann gleich testen.
Es gibt aber noch einen Punkt bei dem Makro, den hatte ich nicht erläuternd dazugeschrieben:
Von C3:C51 kopiere ich die Zellen 1:1 mit Inhalt, von D3:D51 nur die bedingte Formatierung, weil in den anderen Dateien an dieser Stelle schon was in den Zellen steht.
Könntest du da nochmal bitte schauen, ob das möglich ist?
Vielen Dank Christian
AW: Inhalte in alle Dateien kopieren
08.03.2023 15:00:19
Rudi
folgende Änderungen:
Set rngQuelle = ActiveSheet.Range("C3:C51")
....
....
          Application.StatusBar = "Bearbeite Datei " & lngIndex & " von " & .FileCount
          Set objWB = Workbooks.Open(.Files(lngIndex).strPath, UpdateLinks:=False)
          rngQuelle.Copy objWB.Sheets("Tabelle1").Range("C3") 'Zielbereich anpassen
          rngQuelle.Offset(,1).Copy 
          objWB.Sheets("Tabelle1").Range("C3").PasteSpecial xlPasteFormats       'Zielbereich anpassen
          Application.CutCopyMode = False
....
....
Gruß
Rudi
Anzeige
AW: Inhalte in alle Dateien kopieren
08.03.2023 15:18:56
Christian
Super und Danke dir Rudi.
Vielleicht stell ich mich auch zu dumm an, wenn ich den Code in Modul1 kopiere und dann oben auf den grünen Play-Button drücke, öffnet ein Fenster und ich soll ein Makro auswählen - das habe ich aber nicht.
Kannst du mir da noch helfen?
Was muss ich da tun?
Es ist schon länger her als ich mit VBA zu tun hatte, habe es aber nicht hinbekommen.
Vielen Dank.
AW: Inhalte in alle Dateien kopieren
08.03.2023 15:38:31
Rudi
Hallo,
die Prozedur erfordert einen Parameter (Directory). Deshalb siehst du sie nicht. Erstell dir ein Startmakro.
Sub kopierenstarten()
Call BereichKopieren("c:\Test\")   'anpassen
End Sub
Gruß
Rudi
Anzeige
AW: Inhalte in alle Dateien kopieren
08.03.2023 16:13:19
Christian
Hallo Rudi,
vielen Dank, jetzt wird es mir als Makro angezeigt.
Allerdings kommt eine Fehlermeldung (Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert) an dieser Stelle gleich am Anfang:
Dim objFileSearch As clsFileSearch
Hier ist der Link zur Datei:
https://www.herber.de/bbs/user/158182.xlsm
Kannst du mal bitte schauen, wo der Fehler liegt?
Vielen Dank.
AW: Inhalte in alle Dateien kopieren
08.03.2023 16:34:06
Rudi
ganz einfach: Dir fehlt das Klassenmodul clsFileSearch
Jetzt frag mich nicht, wo du das Klassenmodul her bekommst.
Ich bin davon ausgegangen, dass du das hast, weil dein Protect/ Unprotect das auch braucht.
Die Klasse hat Nepumuk vor vielen Jahren als Ersatz für das in XL2007 entfallene FileSearch-Objekt geschrieben.
Durchforste das Archiv.
Gruß
Rudi
Anzeige
AW: Inhalte in alle Dateien kopieren
08.03.2023 19:13:58
Christian
Danke für den Hinweis.
Ich habe es gefunden und eingebaut.
Es kommt jetzt ein Abbruch mit Fehler im Modul1, Fehler in Prozedur 'BereichKopieren', Fehlernummer 13 Typen unverträglich.
Hier die Datei:
https://www.herber.de/bbs/user/158186.xlsm
Danke dir.
AW: Inhalte in alle Dateien kopieren
09.03.2023 09:42:21
Rudi
kommentiere mal
On Error GoTo ErrExit
aus und starte neu. Dann siehst du, wo der Fehler ist.
Gruß
Rudi
AW: Inhalte in alle Dateien kopieren
09.03.2023 12:23:10
Christian
Hallo Rudi,
ich habe den Fehler gefunden:
Dim rngQuelle As Range muss es heißen statt Dim rngQuelle As Workbook.
Jetzt funktioniert es einwandfrei.
Vielen Dank für deine Unterstützung.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige