Anzeige
Archiv - Navigation
1936to1940
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

Änderung in mehreren Dateien

Änderung in mehreren Dateien
14.07.2023 17:05:49
wolgertal
Hallo Zusammen,

ich habe ein kleines Problem.
Mit einem Makro (siehe Dateianlage) Ändere ich in anderen Dateien im Verzeichnis einige Zellen und lösche eine Grafik
Jetzt müsste bei einigen Dateien vor der Änderung der Blattschutz herausgenommen werden.

Dies habe ich versucht im Makro einzubinden, es funktioniert aber nicht.

Kann mir jemand helfen?

Vielen Dank vorab.

https://www.herber.de/bbs/user/159939.xlsm

Gruß Ulli

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

Betreff
Datum
Anwender
Anzeige
AW: Änderung in mehreren Dateien
14.07.2023 18:03:51
wolgertal
Der Fehler ist gefunden.

cool! Glückwunsch!
14.07.2023 19:52:44
Oberschlumpf
Hi Ulli,

is doch n klasse Gefühl, wenn man, egal ob mit oder ohne Hilfe, ein Problem gelöst hat, oder? :-)
Nee, eigtl is es ein noch besseres Gefühl, wenn man es ohne Hilfe schaffen konnte :-)
Ich wünsch dir weiter viel Spaß mit dem tollsten "Spielzeug" von Microsoft = EXCEL! :-))

Ciao
Thorsten

AW: cool! Glückwunsch!
15.07.2023 16:42:44
wolgertal
Hallo Thorsten,

das war ein glücklicher Zufall :-) meistens bekomme ich es auf Grund mangelnder Kenntnisse nicht hin.
Aber ja, wenn es dann klappt ist man happy, du hast mir ja auch schon öfters geholfen.

Sind nette Leute hier im Forum, top.

Viele Grüße Ulli

Anzeige
AW: cool! Glückwunsch!
17.07.2023 17:16:53
Herbert_Grom
Hallo Ulli,

wenn ich Thorsten richtig verstanden habe, wollte er dir damit sagen, dass es noch viel schöner wäre, wenn du deine Lösung mit uns teilen würdest, am besten mittels Beispiel-Arbeitsmappe oder zumindest dem kompletten Code.

Servus

AW: cool! Glückwunsch!
17.07.2023 17:36:41
wolgertal
Hallo Herbert, ja, das habe ich falsch verstanden.

Hier der geänderte Code, viele Grüße Ulli

Option Explicit
' Suchmuster gegebenenfalls anpassen
Const strEX As String = "*.xls*"
Public Sub Zelländerung()
Dim strDir As String
Dim objFSO As Object
Dim objDir As Object
Dim lngCalc As Long
On Error GoTo Fin
With Application
.ScreenUpdating = False
.AskToUpdateLinks = False
.EnableEvents = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Datei im gleichen Ordner wie Auswertungsdateien
strDir = ThisWorkbook.Path & "\"
' Fester Ordner vorgegeben
'strDir = "C:\Temp\Test\"
strDir = IIf(Right(strDir, 1) > "\", strDir & "\", strDir)
Set objDir = objFSO.getfolder(strDir)
'dirInfo objDir, strEX, True  ' Mit Unterordner
dirInfo objDir, strEX         ' Ohne Unterordner
Fin:
With Application
.ScreenUpdating = True
.AskToUpdateLinks = True
.EnableEvents = True
.Calculation = lngCalc
.DisplayAlerts = True
End With
Set objDir = Nothing
Set objFSO = Nothing
If Err.Number > 0 Then MsgBox "Fehler: " & _
Err.Number & " " & Err.Description
End Sub
Public Sub dirInfo(ByVal objCurrentDir As Object, ByVal strName As String, _
Optional ByVal blnTMP As Boolean = False)
Dim wkbBook As Workbook
Dim varTMP As Variant
Dim picBild As Picture
For Each varTMP In objCurrentDir.Files
If varTMP.Name Like strName Then
If varTMP.Name > ThisWorkbook.Name Then
If Left(varTMP.Name, 1) > "~" Then
Set wkbBook = Workbooks.Open(varTMP.Path)
' Zweites Tabellenblatt - Index 2
With wkbBook.Worksheets(1)
Call wkbBook.Worksheets(1).Unprotect(Password:="4711")
.Range("H10").Value = "Taris Beck"
.Range("H10").Font.Size = 15
.Range("H10").VerticalAlignment = xlCenter
.Range("B9").Value = ""
For Each picBild In ActiveSheet.Pictures  ' Bild löschen in Zelle
        If Not Intersect(picBild.TopLeftCell, Range("H10")) Is Nothing Then picBild.Delete
    Next picBild
.Parent.Close True
'Call Tabelle1.Protect(Password:="4711", UserInterfaceOnly:=True)
Set wkbBook = Nothing
End With
End If
End If
End If
Next varTMP
If blnTMP = True Then
For Each varTMP In objCurrentDir.SubFolders
dirInfo varTMP, strName, blnTMP
Next varTMP
End If
Set wkbBook = Nothing
End Sub

Anzeige
AW: cool! Glückwunsch!
17.07.2023 18:47:43
Yal
Hallo W.

Wenn Du nicht nur "FileSystemObject" sonder auch "File", "Folder" und "SubFolder" verwendest, bietet sich an, die Bibliothek "Microsoft Scripting Runtime" anzubinden: in VB-Editor, Menü "Extras", "Verweise..." zum "Microsoft Scripting Runtime" runterscrollen und Haken setzen. Dann hast Du die Objekte im Objekt-Katalog (F2) und in Intellisense (Strg+Leertaste). Du kannst vor allem deine Variable als "Dim F As File" setzen.

Die Muster, die sich wiederholen, sollte man auslagern. So das Aus- und Einschalten der ich-hoffe-Du-weisst-worum-es-geht.
Variablen oder Konstanten, die nur einmal verwendet werden, sind infrage zu stellen. Wenn man konsequent in kleine Häppchen teilt, schafft man eine gute Übersicht auch ohne. Wenn schon Variable, dann mit sprechende Name ("blnTMP"?)

Der Umgang mit With braucht Übung (habe ich daher viele Beispiele reingemacht ;-)

Folgender Code ist keinesfalls besser als deins. Er soll nur zur Anregung dienen.

' Suchmuster gegebenenfalls anpassen
Dim lngCalc As Long

Public Sub Zelländerung()
Dim objFSO As New FileSystemObject

    Ausschalten
' Datei im gleichen Ordner wie Auswertungsdateien
    dirInfo objFSO.GetFolder(ThisWorkbook.Path & "\"), "*.xls*" ' Default(False): Ohne Unterordner, True: mit Unterordner
    Ausschalten True
End Sub

Sub Ausschalten(Optional ByVal FalseIstAusTrueIstAn As Boolean = False)
    With Application
        .ScreenUpdating = FalseIstAusTrueIstAn
        .EnableEvents = FalseIstAusTrueIstAn
        .DisplayAlerts = FalseIstAusTrueIstAn
        If FalseIstAusTrueIstAn Then
            .Calculation = lngCalc
        Else
            lngCalc = .Calculation
            .Calculation = xlCalculationManual
        End If
    End With
End Sub

Public Sub dirInfo(ByVal objDir As Folder, ByVal strMuster As String, Optional ByVal blnUnterOrdner As Boolean = False)
Dim F As File
Dim V As Folder 'V: Verzeichnis

    For Each F In objDir.Files
        If Name_prüfen(F, strMuster) Then Datei_behandeln F.Path
    Next F
    
    If blnUnterOrdner Then
        For Each V In objDir.SubFolders
            dirInfo V, strMuster, blnUnterOrdner
        Next V
    End If
End Sub

Private Function Name_prüfen(F As File, ByVal Muster As String) As Boolean
'gibt True zurück, wenn alle Bedingungen erfüllt sind
    Name_prüfen = F.Name Like Muster
    Name_prüfen = Name_prüfen And F.Name > ThisWorkbook.Name
    Name_prüfen = Name_prüfen And Left(F.Name, 1) > "~"
End Function

Sub Datei_behandeln(ByVal DateiPfad As String)
Dim P As Picture
    
On Error GoTo Catch
    With Workbooks.Open(DateiPfad).Worksheets(1)
        .Unprotect Password:="4711"
        With .Range("H10")
            .Value = "Taris Beck"
            .Font.Size = 15
            .VerticalAlignment = xlCenter
        End With
        .Range("B9").Value = ""
        For Each P In .Pictures  ' Bild löschen in Zelle
            If P.TopLeftCell.Address = "$H$10" Then P.Delete
        Next P
        '.Protect Password:="4711", UserInterfaceOnly:=True
        .Parent.Close True
    End With
    Exit Sub
Catch:
    Debug.Print "Fehler: " & Err.Number & " " & Err.Description & vbTab & "mit Datei " & DateiPfad
End Sub
VG
Yal

Anzeige
AW: cool! Glückwunsch!
17.07.2023 19:21:33
wolgertal
Hallo Yal,

vielen Dank für deine Hinweise und Unterstützung

Gruß Ulli

alles gut, Ulli - Herbert hat mich falsch...
17.07.2023 18:28:37
Oberschlumpf
...verstanden

Hallo beide,

da hat Herbert was miss(t)verstanden.

Mein Ziel war keineswegs, von dir entweder Code oder eine Bsp-Datei zu erhalten...mit deiner Lösung.

Ich wollte dir tatsächlich nur "gratulieren", dass du es diesmal allein geschafft hast - weil ich eben selbst weiß, wie gut man sich in so nem Moment fühlt.

Hätte ich eine Bsp-Datei oder Ähnliches gewollt, hätte ich auch genau das so formuliert - zumal ich geradezu ein FAN BIN von klaren, direkten Fragen/Antworten, die einfach zu verstehen sind.

Ciao
Thorsten

Anzeige
AW: alles gut, Ulli - Herbert hat mich falsch...
17.07.2023 18:33:43
Herbert_Grom
Hallo Thorsten,

oh je, Miss(t)verständnisse so weit man blickt! Sorry, das habe ich dann wirklich falsch interpretiert.

Servus

allet juuut! ;-) owT
18.07.2023 06:43:09
Oberschlumpf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige