Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 2
  • 1.0K

Wprowadzenie do pytania:

Istnieje plik główny (Glowny.xlsm), który ma 3 arkusze (A, B, C), w którym istnieją już zapisane różne procedury.

Arkusz „A” jest arkuszem roboczym. Chciałbym napisać kod w VBA, aby zautomatyzować następujące po sobie nw. zdarzenia:

  • Skopiowanie arkusza „B” i wklejenie go do nowego pliku (xlsx). Nie chodzi o wycięcie, lecz skopiowanie.
  • Nadanie automatyczne nazwy nowemu plikowi oraz lokalizacji i zapisanie go. Nazwę ma pobrać z Glowny.xlsm/arkusz A/komórka A1  i lokalizację ma pobrać z Glowny.xlsm/arkusz A/komórka A2.
  • Dobrze byłoby, gdyby w nowym pliku, nazwijmy go „Nowy” procedura usunęła pusty arkusz, który zawsze się znajduje (u mnie 1) w nowo otwartym skoroszycie.
  • Po jego zapisaniu, użytkownik zdecyduje, czy go wydrukować i go zamknie.
  • Glowny.xlsm w tym czasie jest także otwarty.

Gdyby nie mógł „zaciągnąć” nazwy i lokalizacji z komórek w arkuszu ”A” w Glowny.xlsm, to istnieje możliwość, że te dane mogę umieścić w kopiowanym arkuszu „B”, ale obawiam się, że wtedy nowy plik musi mieć obsługę makr.

Licząc na pomoc, pozdrawiam wszystkich.

Tadeusz_Kasprzak
  • Zapytał
  • @ Tadeusz_Kasprzak | 16.01.2015
    • 9
    • 4
    • 11

Odpowiedzi (3)

  • 6

Kod, który wykona Pana zadanie, może wyglądać w wersji prostej tak:

Sub kopiujArkusz()
    'Utworzenie nowego skoroszytu
    Workbooks.Add
    
    'Wyłączenie ostrzeżeń
    Application.DisplayAlerts = False
    'Zapisanie nowootwartego pliku pod inną nazwą w innej lokalizacji
    ActiveWorkbook.SaveAs ThisWorkbook.Sheets("ArkuszA").Range("A2") _
	& ThisWorkbook.Sheets("ArkuszA").Range("A1"), xlOpenXMLWorkbook
    
    'Skopiowanie ArkuszaB i wklejenie go do nowoutworzonego pliku na samym początku
    ThisWorkbook.Sheets("arkuszB").Copy before:=ActiveWorkbook.Sheets(1)
    
    'usunięcie standardowego arkusza
    ActiveWorkbook.Sheets("Arkusz1").Delete
    'Włączenie ostrzeżeń
    Application.DisplayAlerts = True
    'Zapisanie nowoutworzonego pliku
    ActiveWorkbook.Save
    
    'Ewentualnie można wyłączyć komentarz linii, która wyświetli skoroszyt podstawowy
    'ThisWorkbook.Activate
    
End Sub

W załączniku plik z makrem do uruchomienia.

Załączniki

  • xlsm

    Kopiuj arkusz.xlsm ( 20K )
  • Odpowiedział
  • @ | 20.01.2015
  • TRENER ALTKOM AKADEMII
Komentarze
Dziekuję Marku! O to mi chodziło. Działa świetnie.
Pozdrawiam
Tadeusz
Skomentował : @ Tadeusz_Kasprzak ,21.01.2015
  • 9
  • 4
  • 11
  • 6

Trochę ciekawsze rozwiązanie jest w drugim pliku - sprawdzane jest też, czy istnieje taki katalog i czy ewentualnie można byłoby go stworzyć.

Załączniki

  • xlsm

    Kopiuj arkusz2.xlsm ( 23K )
  • Odpowiedział
  • @ | 20.01.2015
  • TRENER ALTKOM AKADEMII
Komentarze
Dziękuję także za to rozwiązanie, oraz poświecony czas. Prawdopodobnie tą wersję wykorzystam. Zainspirowało mnie to do innych zastosowań.
Pozdrawiam
Tadeusz
Skomentował : @ Tadeusz_Kasprzak ,21.01.2015
  • 9
  • 4
  • 11
  • 0

Pozwoliłem sobie dodać zamykanie pliku po operacji.

To daje nadpisywanie już istniejącego pliku i nie pokazuje błędu.

Workbooks("nazwa testowa.xlsx").Close '(w tym miejscu )
'Ewentualnie można wyłączyć komentarz linii, która wyświetli skoroszyt podstawowy
'ThisWorkbook.Activate

Krzysztof_Bruszewski
  • Odpowiedział
  • @ Krzysztof_Bruszewski | 30.11.2019
    • 0
    • 0
    • 0