Centrum skryptów - Microsoft Office

W jaki sposób mogę skopiować i zmienić nazwę arkusza w jednym skoroszycie? 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.

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 Do początku strony


Centrum skryptów - Microsoft Office