Centrum skryptów - Microsoft office

Jak skopiować dane z jednego arkusza programu Excel do drugiego takiego arkusza?

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 skopiować dane z jednego arkusza programu Excel do drugiego takiego arkusza?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak się kopiuje dane z jednego arkusza programu Excel do drugiego takiego arkusza? Będę wdzięczny za odpowiedź.

-- AC

Cześć Skrypciarze! Odpowiedź

Cześć, AC, na początku, jak zwykle, krótkie wyznanie, które mam nadzieję, że usprawiedliwi wszelkie moje literówki tudzież błędy językowe – jestem wykończony... Zdaję sobie z tego sprawę, że nie jest to blog, ale po prostu muszę napisać, że po tysiącgodzinnym locie z Rzymu do Seattle, jako sumienny pracownik firmy Microsoft wstałem dziś o 6 rano i tu przyjechałem (chociaż jako blog pewnie wygrałby wiele plebiscytów na najzabawniejszy blog wszech czasów). Żadna zasługa, lubię tę pracę (mam nadzieję, ze który z przełożonych otworzy kiedyś akurat ten artykuł i polecą pochwały), problem jedynie w tym, ze nie orientuję się za bardzo czy jest dzień czy noc...

Pytanie postawione przez AC jest jednak, nie powiem, dość pobudzające dla moich szarych komórek i obiektywnie raczej ciekawe. Ciekawe, czy uda mi się na nie odpowiedzieć w moim półśnie...

Spróbuję:

Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = True



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

Set objWorksheet = objWorkbook.Worksheets("Sheet1")



Set objRange = objWorksheet.Range("A1:A20")

objRange.Copy



Set objExcel2 = CreateObject("Excel.Application")

objExcel2.Visible = True



Set objWorkbook2 = objExcel2.Workbooks.Add

Set objWorksheet2 = objWorkbook2.Worksheets("Sheet1")



objWorksheet2.Paste

W porządku, postaram się teraz przez sen wyjaśnić, jak ten skrypt działa. Na samym początku skrypt tworzy wystąpienie obiektu Excel.Application i ustawia jego właściwość Visible na True; w ten sposób otrzymujemy uruchomione i widoczne na ekranie wystąpienie programu Microsoft Excel. Następnie, korzystając z metody Open, otwieramy plik C:\Scripts\Test.xls, po czym używając następującego wiersza kodu łączymy się z arkuszem w tym pliku:

Set objWorksheet = objWorkbook.Worksheets("Sheet1")

Proste, nieprawdaż?

Co potem? Aby skopiować dane do schowka, musimy najpierw ustawić zakres kopiowania (tj. komórki, które chcemy skopiować), po czym przywołujemy metodę Copy. Właśnie tym zajmują się poniższe wiersze kodu:

Set objRange = objWorksheet.Range("A1:A20")

objRange.Copy

Jak sami zapewne zauważyliście, w pierwszym wierszu tworzymy wystąpienie obiektu Range programu Excel; w tym przypadku obiekt ten obejmuje komórki od A1 do A20 (możemy oczywiście ustalić sobie dowolny zakres). W drugim zaś wierszu przywołujemy metodę Copy i kopiujemy tym samym komórki od A1 do A20 (czyli wszystkie komórki naszego zakresu) do schowka.

To też było dość proste.

Ale bez euforii, to jeszcze nie koniec. Teraz musimy przecież jeszcze wkleić te dane do drugiego arkusza. Dla potrzeb naszego skryptu, będziemy wklejać je do zupełnie nowego arkusza, ale można zrobić dokładnie to samo z arkuszem już istniejącym, jeżeli takie jest pragnienie naszego serca. Trzymajmy się jednak pierwszej wersji. Tworzymy zatem wystąpienie programu Microsoft Excel, nadajemy mu nazwę objExcel2 i ustawiamy jego właściwość Visible na True:

Set objExcel2 = CreateObject("Excel.Application")

objExcel2.Visible = True

Déjà vu, co nie? Ktoś chyba coś zmienia w matriksie...

Po utworzeniu drugiego wystąpienia programu Excel, używając metody Add dodajemy nowy, pusty skoroszyt do naszego obiektu objExcel2, po czym za pomocą poniższego wiersza kodu łączymy się z pierwszym arkuszem w skoroszycie:

Set objWorksheet2 = objWorkbook2.Worksheets("Sheet1")

Teraz już pozostaje nam tylko wywołanie metody Paste i pójście na odpoczynek po tak skomplikowanym skrypcie:

objWorksheet2.Paste

Trafne spostrzeżenie: Paste to metoda która należy do obiektu Worksheet (w przeciwieństwie do metody Copy, która należy do obiektu Range). Zgodnie z ustawieniami domyślnymi, program Excel wklei wszystkie dane do komórki A1. Co jednak, jeżeli chcemy wkleić je gdzieś indziej? Wystarczy uaktywnić inną komórkę niż komórkę A1. Dla przykładu, poniższy wiersz kodu uaktywnia w arkuszu komórkę D5:

objWorksheet2.Range("D5").Activate

Teraz, po wywołaniu metody Paste, wszystkie dane zostaną wklejone do komórki D5 (i innych kolejnych komórek).

Tak przy okazji, to proszę pamiętać, że to, jak zmęczony jest dziś autor powyższego artykułu, jest pilnie strzeżoną tajemnicą (poliszynela – przyp.red.) i zwracam się z uprzejmą prośbą o nierozgłaszanie tego faktu na prawo i lewo. Teraz czas na drzemkę, oczywiście w oczekiwaniu na zapytania od czytelników...

  Do początku strony  Do początku strony

Centrum skryptów - Microsoft office