Kategorie szkoleń | Egzaminy | Kontakt
  • 6
  • 0
  • 1

Witam.

Nie działa mi ta funkcja, która powinna zastąpić w aktywnym Worksheecie w kolumnach AB:AH kropkę na nic "", itp. Występuje błąd mismatch.

Sub Multi_FindReplace()
'PURPOSE: Find & Replace a list of text/values throughout entire workbook
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim sht As Worksheet
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long

fndList = Array(".", ",", "-", "CR", "DR")
rplcList = Array("", ".", "", "H", "S")

'Loop through each item in Array lists


For x = LBound(fndList) To UBound(fndList)


'Loop through each worksheet in ActiveWorkbook in colums "AB:AH"


For Each sht In ActiveWorkbook.Worksheets("sheet1").Columns("AB:AH")

sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next sht

Next x

End Sub

Z góry dziękuję za pomoc.
Anna L. 

 

Anna_Laszczak
  • Zapytał
  • @ Anna_Laszczak | 22.04.2019
    • 0
    • 0
    • 0
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedzi (6)

  • 1

Pętlę For Each stosuje się do przechodzenia kolejno przez wszystkie elementy danego zbioru. W Twojej procedurze nie wskazujesz jednoznacznie, do których elementów z kolumn AB:AH chcesz się odnieść (poszczególnych kolumn, komórek?) i stąd błąd. Jeżeli zamysł był zgodny z komentarzem ("Loop through each worksheet in ActiveWorkbook in colums "AB:AH""), wtedy trzeba wskazać zbiór Worksheets bieżącego skoroszytu i dopiero "w środku" określić zakres kolumn:

For Each sht In ActiveWorkbook.Worksheets
   sht.Columns("AB:AH").Replace (...)
Next sht
Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 22.04.2019
    • 1
    • 7
    • 1
Komentarze
Dziekuje za odpowiedz. Dokladnie chce sie odniesc do kolumn ("AB:AH"), plikimoze miec 300 wierszy albo i 10000, chcialabym, by przeszukiwal wszystkie wiersze w kolumnach AB:AH. Jak moge dostosowac kod, by uniknac tego bledu. Pozdrawiam, Ania L.
Skomentował : @ Anna_Laszczak ,24.04.2019
  • 0
  • 0
  • 0
  • 0

Dziękuję za odpowiedź. Chcę, aby pętla przeszukiwała kolumny AB:AH, niezależnie od tego, czy plik będzie miał 300 czy 10000 wierszy. Jak mogę zmienić to w kodzie? Jeśli wskażę "AB1:AH10000, to błąd nadal się pojawia.

Dziękuję i pozdrawiam.

Anna_Laszczak
  • Odpowiedział
  • @ Anna_Laszczak | 24.04.2019
    • 0
    • 0
    • 0
  • 1

Ustawić zakres komórek do sprawdzenia:

set ZAKRES = sht.Range("AB1", sht.Range("AH1").End(xlDown))

Dalej w pętli stosować zakres zdefiniowany:

For Each sht In ActiveWorkbook.Worksheets
   ZAKRES.Replace (...)
Next sht
Tomasz_Kasprzycki
  • Odpowiedział
  • @ Tomasz_Kasprzycki | 25.04.2019
    • 2
    • 4
    • 8
  • 0

Dziękuję.

Wstawiłam w kod:

Sub Multi_FindReplace()
'PURPOSE: Find & Replace a list of text/values throughout entire workbook
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim sht As Worksheet
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long
Set Zakres = sht.Range("AB1", sht.Range("AH1").End(xlDown))

fndList = Array(".", ",", "-", "CR", "DR")
rplcList = Array("", ".", "", "H", "S")


'Loop through each item in Array lists
For x = LBound(fndList) To UBound(fndList)
'Loop through each worksheet in ActiveWorkbook in colums "AB:AH"
For Each sht In ActiveWorkbook.Worksheets


Zakres.Replace What:=fndList(x), Replacement:=rplcList(x),  'tutaj wyskakuje mi niestety syntax error
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False  
Next sht

Next x

End Sub

Gdzie robię błąd?

Z góry dziękuję i pozdrawiam.

Anna_Laszczak
  • Odpowiedział
  • @ Anna_Laszczak | 25.04.2019
    • 0
    • 0
    • 0
  • 1

Proszę spróbować tak:

Dim sht As Worksheet
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long

fndList = Array(".", ",", "-", "CR", "DR")
rplcList = Array("", ".", "", "H", "S")


'Loop through each item in Array lists
For x = LBound(fndList) To UBound(fndList)
'Loop through each worksheet in ActiveWorkbook in colums "AB:AH"
For Each sht In ActiveWorkbook.Worksheets

Set Zakres = sht.Range("AB1", sht.Range("AH1").End(xlDown))


Zakres.Replace What:=fndList(x), Replacement:=rplcList(x),
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False  
Next sht

Next x

End Sub

 

 

Tomasz_Kasprzycki
  • Odpowiedział
  • @ Tomasz_Kasprzycki | 26.04.2019
    • 2
    • 4
    • 8
  • 0

Dziękuję bardzo, ale niestety wciąż występuje "compile error":

Zakres.Replace What:=fndList(x), Replacement:=rplcList(x),

W załączeniu kod + dane.

Dziękuję za pomoc, pozdrawiam.

Załączniki

  • xlsm

    Book1.xlsm ( 17K )
Anna_Laszczak
  • Odpowiedział
  • @ Anna_Laszczak | 30.04.2019
    • 0
    • 0
    • 0
Komentarze
u mnie działa...
Skomentował : @ Tomasz_Kasprzycki ,04.05.2019
  • 2
  • 4
  • 8
Błąd kompilacji występuje, ponieważ po przeklejeniu makra na forum jedna linijka oryginalnego polecenia została rozdzielona na dwie. Powoduje to dwa wyjątki: zakończenie wiersza przecinkiem (co nie zdarza się w kodzie) oraz rozpoczęcie kolejnego od nieistniejącego samodzielnie polecenia "LookAt". Żeby to naprawić trzeba albo usunąć końcowy "enter" (aby dwie pierwsze linijki znalazły się w jednej), albo dodać podkreślnik na końcu pierwszego wiersza:

Zakres.Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Skomentował : @ Mirosław_Janiak ,05.05.2019
  • 1
  • 7
  • 1
Dziekuje:)
Skomentował : @ Anna_Laszczak ,23.05.2019
  • 0
  • 0
  • 0