Clever-Excel-Forum

Normale Version: Zelle in mehreren Dateien ändern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo!

Da mir bei meinem letzten Problem hier super geholfen wurde, versuche ich mein Glück erneut.

Eigentlich habe ich sogar zwei Probleme.

Problem 1: 

Ich habe knapp 400 Dateien in denen ich aufgrund des Schaltjahres das Datum ändern muss. Vom 28.02. auf den 29.02.2024.

Ich habe bereits diese Methode ausprobiert (damit hatte ich erstmal nur das Jahr geändert und das hat auch tadellos funktioniert, aber das Datum ersetzt er einfach nicht Huh ):

Sub ersetzen()
dateien = Application.GetOpenFilename _
("Excel-Dateien (*.xls), *.xls", MultiSelect:=True)
Application.ScreenUpdating = False
If IsArray(dateien) Then
For i = 1 To UBound(dateien)
Workbooks.Open dateien(i)
With ActiveWorkbook
For n = 1 To .Sheets.Count
.Sheets(n).Cells.Replace What:="28.02.2024", _
Replacement:="29.02.2024", _
LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next
.Save
.Close
End With
Next
End If
End Sub


Problem 2:

In diesen 400 Dateien befindet sich eine bestimmte Zelle, die ich auf 0 setzen will. Im Moment stehen dort verschiedene Zahlen (Bestände) drin. Ich will mir quasi Blanko-Dateien für die kommenden Jahre erstellen und daher sollen diese auf 0 stehen.

Die aktuellen Bestände werde ich wohl oder übel weiterhin händisch eintragen müssen.

Falls also jemand eine Lösung für eines meiner Probleme hat, wäre ich wirklich dankbar.

Grüße

Tanja
moin

in deinem Code suchst du nach dem Text 28.02.2024
dann wird das Datum nicht gefunden

das könnte so gehen

Code:
Sub ersetzen()

    Dim altesDatum As Date
    Dim neuesDatum As Date
    altesDatum = "28.02.2024"
    neuesDatum = "29.02.2024"
   
    dateien = Application.GetOpenFilename _
    ("Excel-Dateien (*.xls), *.xls", MultiSelect:=True)
    Application.ScreenUpdating = False
    If IsArray(dateien) Then
        For i = 1 To UBound(dateien)
            Workbooks.Open dateien(i)
            With ActiveWorkbook
                For n = 1 To .Sheets.Count
                    .Sheets(n).Cells.Replace What:=altesDatum, _
                    Replacement:=neuesDatum, _
                    LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=False, _
                    SearchFormat:=False, ReplaceFormat:=False
                Next
                .Save
                .Close
            End With
        Next
    End If
End Sub

solltest du den 28.02.2024 durch eine Formel erstellt haben, wirst du damit aber auch keinen Erfolg haben

mfg Tom
Vielen Dank! Das hat schon einmal super funktioniert. 23 

Habs mir auch gleich abgespeichert, damit ich im nächsten Jahr nicht wieder so hier hänge.
Hallo Tanja,

mal abgesehen von dem 400 Dateien, machst du sicher irgend etwas falsch am Aufbau, wenn du im Nachgang die Schaltjahre vom Datum her einpflegen musst.
Ich habe diese Dateien nie erstellt. Die gab es schon als ich hier in die Firma kam. Ich habe diese nur übernommen und arbeite seit knapp 5 Jahren damit.

Ich bin aber gern offen für Änderungsvorschläge.

Zur Erklärung:

Es handelt sich dabei um ein Artikelkonto. Auf diesem werden alle Bewegungen monatlich entsprechend erfasst und gespeichert.
Hallöchen,

In B30 hast Du eventuell das Jahr stehen - "Jahr" in A30 lässt mich das vermuten. Wenn in Spalte A die Monatsenden fest stehen, bringt das aber auch nix und Du musst alle Monatsenden ändern.

Ansonsten, speichere die Datei als xlsx und verwende überall die Funktion Monatsende, z.B. in A7

=MONATSENDE(DATUM($B$30;(ZEILE()-5)/2;1);0)

und dann kopieren und die anderen "Monatszellen" einfügen.
(22.01.2024, 22:27)schauan schrieb: [ -> ]Hallöchen,

In B30 hast Du eventuell das Jahr stehen - "Jahr" in A30 lässt mich das vermuten. Wenn in Spalte A die Monatsenden fest stehen, bringt das aber auch nix und Du musst alle Monatsenden ändern.

Ansonsten, speichere die Datei als xlsx und verwende überall die Funktion Monatsende, z.B. in A7

=MONATSENDE(DATUM($B$30;(ZEILE()-5)/2;1);0)

und dann kopieren und die anderen "Monatszellen" einfügen.

Vielen Dank! Das werde ich im Anschluss ausprobieren.

Ich hoffe nun das mir noch jemand bei meinem zweiten Problem helfen kann.
moin

du möchtest also in deinen 400 Exceldateien jeweils eine Zelle, in allen die gleiche?, auf 0 setzen
geht im Prinzip gleich wie dein Code aus dem ersten Problem
nur dass du halt nüscht mit ersetzen machst sondern die entsprechende Zelle mit

With ActiveWorkbook
    .Sheets("nur du weißt wie das Blatt heißt").Range("A175").Value = 0
End With


als Schleife geht das natürlich nur wenn die Tabellenblätter alle gleich heißen und auch die Zelle immer die gleiche ist
ansonsten kannst du auch gleich jede Datei öffnen und den Wert der Zelle von Hand nullen


mfg Tom
(23.01.2024, 09:38)Crazy Tom schrieb: [ -> ]moin

du möchtest also in deinen 400 Exceldateien jeweils eine Zelle, in allen die gleiche?, auf 0 setzen
geht im Prinzip gleich wie dein Code aus dem ersten Problem
nur dass du halt nüscht mit ersetzen machst sondern die entsprechende Zelle mit

With ActiveWorkbook
    .Sheets("nur du weißt wie das Blatt heißt").Range("A175").Value = 0
End With


als Schleife geht das natürlich nur wenn die Tabellenblätter alle gleich heißen und auch die Zelle immer die gleiche ist
ansonsten kannst du auch gleich jede Datei öffnen und den Wert der Zelle von Hand nullen


mfg Tom

Hallo Tom,

ja die Zelle ist immer die gleiche (U5). Die Tabellenblätter haben (soweit ich sehen konnte) auch alle die gleiche Bezeichnung (K9630371).

Leider habe ich den Code nicht selbst geschrieben. Daher wäre es wirklich super nett, wenn du mir den Code schreiben könntest und ich ihn einfach nur noch kopieren muss.
Denn ich weiß leider nicht was ich da nun wie ersetzen muss. 20
aufgrund deiner Angaben könnte das hier ein Weg sein

Code:
Sub Zelle_Nullen()
    dateien = Application.GetOpenFilename _
    ("Excel-Dateien (*.xls), *.xls", MultiSelect:=True)
    Application.ScreenUpdating = False
    If IsArray(dateien) Then
        For i = 1 To UBound(dateien)
            Workbooks.Open dateien(i)
            With ActiveWorkbook
                .Sheets("K9630371").Range("U5").Value = 0
                .Save
                .Close
            End With
        Next
    End If
    Application.ScreenUpdating = True
End Sub

mfg Tom
Seiten: 1 2