Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen

VBA - aus der personl.xls alle Blätter ansprechen

Betrifft: VBA - aus der personl.xls alle Blätter ansprechen von: WalterK
Geschrieben am: 18.11.2012 15:17:42

Hallo,

der folgende Code sucht in Spalte C die in arName1 angeführten Zellinhalte und ersetzt sie durch die in arName2 angeführten Zellinhalte.

Jetzt wollte ich den Code in der Personl.xls speichern damit er alle Blätter der aktiven Mappe (bis auf 1) auf einmal durchläuft. Tut er so aber nicht, er läuft zwar durch, bearbeitet aber nur das gerade aktive Blatt. Was muss geändert werden, damit alle Blätter (bis auf 1) bearbeitet werden?

Option Explicit
Sub SuchenErsetzen()

Dim arName1 As Variant
Dim arName2 As Variant
Dim i As Long
Dim lngSpalte As Long
Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "SpaltenNr_im_LöschCode_angeben" Then

            arName1 = Sheets("SpaltenNr_im_LöschCode_angeben").Range("A2:A" & Cells(Rows.Count,  _
1).End(xlUp).Row).Value
            arName2 = Sheets("SpaltenNr_im_LöschCode_angeben").Range("B2:B" & Cells(Rows.Count,  _
1).End(xlUp).Row).Value

            On Error Resume Next

            lngSpalte = Columns(InputBox("SpaltenBuchstabe eingeben, in der die Aktion Suchen/ _
Ersetzen durchgeführt werden soll!", "SpaltenBuchstabe eingeben/ändern", "C")).Column

            On Error GoTo Ende

                If lngSpalte > 0 Then
                For i = LBound(arName1) To UBound(arName1)
                    Columns(lngSpalte).Replace arName1(i, 1), arName2(i, 1), xlWhole
                Next
                End If
        End If
        Next ws
        
Exit Sub

Ende:
Err.Clear

End Sub
Besten Dank für die Hilfe und Servus, Walter

  

Betrifft: AW: VBA - aus der personl.xls alle Blätter ansprechen von: Gerd L
Geschrieben am: 18.11.2012 16:02:40

Hallo Walter,

kleine Ursache, .... !

Falls in allenBlättern die selbe Spalte beackert werden soll, stelle die Inputbox vor die Schleife.

On Error GoTo Ende

                If lngSpalte > 0 Then
                For i = LBound(arName1) To UBound(arName1)
                   ws.Columns(lngSpalte).Replace arName1(i, 1), arName2(i, 1), xlWhole
                Next
                End If
        End If
        Next ws
'....................

Gruß Gerd


  

Betrifft: AW: VBA - aus der personl.xls alle Blätter ansprechen von: WalterK
Geschrieben am: 18.11.2012 16:16:53

Hallo Gerd,

besten Dank, so funktioniert es sehr gut!

Darf ich Dich bitten auch noch den zweiten Code anzuschauen, hier habe ich das gleiche Problem.

Option Explicit

Sub ZZZZZsuchenundZeilelöschen()
'Dieser Code sucht in der anzugebenden Spalte nach der Textfolge ZZZZZ und löscht bei den  _
Fundstellen
'jeweils die gesamte Zeile!

    Dim i As Long
    Dim lngSpalte As Long
    Dim ws As Worksheet
    
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "SpaltenNr_im_LöschCode_angeben" Then
    
            Application.ScreenUpdating = False
            lngSpalte = Columns(InputBox("Spaltebuchstabe angeben, in der nach ZZZZZ die Zeilen  _
gelöscht werden sollen!", "Spaltenbuchstabe eingeben/ändern", "C")).Column
    
                If lngSpalte > 0 Then
                    For i = Cells(Rows.Count, lngSpalte).End(xlUp).Row To 1 Step -1
                    If Cells(i, lngSpalte) = "ZZZZZ" Then Rows(i).Delete
                    Next i
                End If
         
         End If
         Next ws

End Sub
Vielen Dank für die Hilfe, Servus Walter


  

Betrifft: wieder vergessen auf offen zu stellen von: WalterK
Geschrieben am: 18.11.2012 16:17:56




  

Betrifft: AW: VBA - aus der personl.xls alle Blätter ansprechen von: Gerd L
Geschrieben am: 18.11.2012 16:25:42

Hallo Walter!
If ws.Cells(i, lngSpalte) = "ZZZZZ" Then ws.Rows(i).Delete

Hier fehlt die Referenzierung auf das Blatt.

Gruß Gerd


  

Betrifft: AW: Korrektur von: Gerd L
Geschrieben am: 18.11.2012 16:30:29

Hallo Walter,

stopp, eigentlich bei allen Bezeichnungen der inneren Schleife.

For i = ws.Cells(ws.Rows.Count, lngSpalte).End(xlUp).Row To 1 Step -1
If ws.Cells(i, lngSpalte) = "ZZZZZ" Then ws.Rows(i).Delete
Next i
Gruß Gerd


  

Betrifft: AW: Korrektur von: WalterK
Geschrieben am: 18.11.2012 16:42:19

Hallo Gerd,

besten Dank für Deine kompetente Hilfe, es funktioniert alles.

Schönen Sonntag noch,
Servus Walter


 

Beiträge aus den Excel-Beispielen zum Thema "VBA - aus der personl.xls alle Blätter ansprechen"