Centrum skryptów - Microsoft office

Jak zastąpić tekst w arkuszu Excel?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak zastąpić tekst w arkuszu Excel?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak zastąpić tekst w arkuszu Excel?

-- PD

Cześć Skrypciarze! Odpowiedź

Cześć, PD. Pozwólcie, że na początek odpowiem na pytanie, jakie zapewne wszyscy sobie zadają: co Skrypciarz i jego rodzina będą dziś robili? No dobra, może nie wszyscy zadają sobie to pytanie, ale ja na pewno tak. Nie jest łatwo sprawić, żeby cała rodzina zgodziła się w jakiekolwiek sprawie, a w ważnej sprawie - to nieprawdopodobieństwo. Najlepiej będzie, jeśli zajmę się pisaniem skryptu i pozwolę, by moi Ukochani podyskutowali i pozabijali się w swoim gronie, mnie do tego nie mieszając:

Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = True



Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls")

Set objWorksheet = objWorkbook.Worksheets(1)



Set objRange = objWorksheet.UsedRange



objRange.Replace "C:\Test\Image.jpg", "C:\Backup\Image.jpg"

Jak widać, nie zaczyna się szczególnie trudno: po prostu tworzymy wystąpienie obiektu Excel.Application i ustawiamy jego wartość Visible na True. Jak wiadomo, daje nam to uruchomione i widoczne na ekranie wystąpienie programu Microsoft Excel. Następnie wywołujemy metodę Open w celu otworzenia pliku C:\Scripts\Test.xls, a potem za pomocą poniższego wiersza kodu łaczymy się z jego pierwszym arkuszem:

Set objWorksheet = objWorkbook.Worksheets(1)

I co? Nie było to trudne, nie?

Zaskakujące, ale reszta skryptu nie jest wcale trudniejsza. Wykonując wyszukiwanie i zastępowanie w programie Excel, należy podać obszar arkusza (zwany zakresem), w którym zadanie ma zostać wykonane. Chcemy zastąpić tekst w całym arkuszu, więc zakres musi obejmować wszystkie znajdujące się w nim komórki. Przyznajemy, że wygląda to nienajlepiej - skąd mamy wiedzieć, w których komórkach są dane, a w których nie? Szczerze mówiąc, nie mamy pojęcia. Na szczęście jednak nie ma to znaczenia. Możemy bowiem użyć właściwości UsedRange programu Excel, aby utworzyć wystąpienie obiektu Range obejmujące automatycznie wszystkie komórki z danymi:

Set objRange = objWorksheet.UsedRange

Po zdefiniowaniu zakresu wywołujemy metodę Replace, przekazując jej dwa parametry - wyszukiwany tekst (C:\Test\Image.jpg) i tekst, których chcemy go zastąpić (C:\Backup\Image.jpg). Do tego służy poniższy wiersz kodu:

objRange.Replace "C:\Test\Image.jpg", "C:\Backup\Image.jpg"

Może trudno w to uwierzyć, ale to już wszystko. Co zresztą wcale mnie nie cieszy, bo będę musiał włączyć się do dyskusji...

 Do początku strony Do początku strony

Centrum skryptów - Microsoft office