W jaki sposób mogę skopiować i zmienić nazwę arkusza w jednym skoroszycie?
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. |
W jaki sposób mogę skopiować i zmienić nazwę arkusza w jednym skoroszycie?
Cześć Skrypciarzu! Chciałbym skopiować jeden z arkuszy skoroszytu Excel i następnie wkleić do tego samego skoroszytu, zmieniając jego nazwę. Czy to możliwe?
-- JG
Cześć JG. Oczywiście że to możliwe; jeśli coś jest możliwe w Excelu, można być niemal na 100 procent pewnym, że można to samo zrobić używając skryptu. Właściwie to bardzo proste zadanie z tylko jednym haczykiem, który zaraz omówimy.
Na początek: bardzo łatwo jest skopiować arkusz programu Excel; wystarczy połączyć się z nim i wywołać metodę Copy. I tak, poniższy skrypt skopiuje arkusz Sheet1 ze skoroszytu o C:\Scripts\Testsheet.xls:
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Testsheet.xls")
objExcel.Visible = TRUE
Set objWorksheet = objWorkbook.Worksheets("Sheet1")
objWorksheet.Copy
Jak widać, nie ma tu nic szczególnie fajnego. Tworzymy wystąpienie obiektu Excel.Application, po czym używamy metody Open by otworzyć skoroszyt C:\Scripts\Testsheet.xls. Następnie ustawiamy wartość Visible (widoczny) jako TRUE („prawda” – dzięki temu będziemy mieć wszystko na oku) i tworzymy odniesienie do obiektu Sheet1 – arkusza, który chcemy skopiować:
Set objWorksheet = objWorkbook.Worksheets("Sheet1")
Następnie wywołujemy metodę Copy i tworzymy kopię arkusza.
Teraz dochodzimy do haczyka. Powyższy skrypt działa dobrze, ale jest pewien problem: metoda Copy domyślnie kopiuje arkusz do nowego skoroszytu. Tak więc będziemy mieli dwie kopie arkusza Sheet1, ale jedna znajdować się będzie w pliku Testsheet.xls, druga zaś w nowym arkuszu. Nie o to nam chodziło. (Jeśli nie wiesz o co chodzi, uruchom skrypt żeby zobaczyć samemu.)
Jak temu zaradzić? No cóż, musimy podać miejsce, w które nowy arkusz ma zostać wklejony. Można w tym celu wskazać arkusz, po którym nasz arkusz ma zostać wklejony (czyli wskazać arkusz poprzedzający). Musimy więc utworzyć drugie odniesienie do obiektu. I tak, jeśli chcemy by nowy arkusz został wklejony po arkuszu Sheet3, musimy utworzyć odwołanie do arkusza Sheet3. Czyli:
Set objLastSheet = objWorkbook.Worksheets("Sheet3")
Teraz, mając drugie odniesienie, podajemy je jako parametr metody Copy. Poniższy fragment kodu kopiuje arkusz Sheet1 i poleca programowi Excel wstawienie go po arkuszu Sheet3:
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\testsheet.xls")
objExcel.Visible = TRUE
Set objLastSheet = objWorkbook.Worksheets("Sheet3")
Set objWorksheet = objWorkbook.Worksheets("Sheet1")
objWorksheet.Copy, objLastSheet
Dzieki temu uzyskujemy kopię arkusza Sheet1, nazwaną Sheet1 (2), bezpośrednio po arkuszu Sheet3, tak właśnie jak chcieliśmy.
Po skopiowaniu i wstawieniu nowego arkusza trzeba jeszcze zmienić nazwę jego nazwę z Sheet1 (2). Zajmie to dwa wiersze kodu: tworzymy odniesienie do nowego arkusza i nadajemy mu nową nazwę. Czyli w kodzie:
Set objWorksheet = objWorkbook.Worksheets("Sheet1 (2)")
objWorksheet.Name = "My New Worksheet"
Jak mówiliśmy, po ominięciu haczyka, było to aż nazbyt łatwe. Oto pełen skrypt wykonujący oba zadania: kopiuje arkusz Sheet1 i zmienia jego nazwę na My New Worksheet:
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\testsheet.xls")
objExcel.Visible = TRUE
Set objLastSheet = objWorkbook.Worksheets("Sheet3")
Set objWorksheet = objWorkbook.Worksheets("Sheet1")
objWorksheet.Copy, objLastSheet
Set objWorksheet = objWorkbook.Worksheets("Sheet1 (2)")
objWorksheet.Name = "My New Worksheet"
Jeśli potrzebujesz dodatkowych porad i sztuczek związanych z obsługą programów Microsoft Office za pomocą skryptów, zapraszamy do artykułów z serii Office Space, które publikowane są w każdy wtorek i czwartek w Centrum Skryptów (j.ang.).
Do początku strony