Jak zastąpić tekst w arkuszu Excel?
Skrypciarze odpowiadają na Wasze pytania
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! Jak zastąpić tekst w arkuszu Excel?
-- PD
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 |