Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 1

Dzień dobry,

prosty kod, 

Sub utworzarkusze()

Dim i As Integer
For i = 1 To 12

Sheets.Add(before:=Sheets(1)).Name = MonthName(i)

  Next

End Sub

ale arkusze z nazwami miesięcy wstawiają się w kolejności malejącej od lewej, tzn. od grudnia do stycznia?

Pozdrawiam

WW

Władysław_Wiśniowiecki
  • Zapytał
  • @ Władysław_Wiśniowiecki | 20.12.2022
    • 1
    • 0
    • 2
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 0

Dzieje się tak, ponieważ każesz wstawiać kolejne arkusze przed pierwszym z tych widocznych w skoroszycie. Załóżmy, że masz skoroszyt w domyślnym układzie Arkusz1, Arkusz2, Arkusz3. W pierwszym przebiegu pętli wstawiasz arkusz "styczeń" przed Arkusz1, w związku z czym "styczeń" staje się pierwszym (Sheets(1)). W drugim przebiegu "luty" trafia więc przed "styczeń" itd.

Użyj składni before:=Sheets(i) albo after:=Sheets(Sheets.Count).

Uwaga: pamiętaj, że nie deklarując jawnie w kodzie obiektu nadrzędnego dla Sheets, używasz domyślnego, którym jest aktywny skoroszyt. Oznacza to, że jeśli w trakcie działania makra przełączysz się do innego pliku excela, to tworzenie kolejnych arkuszy zostanie przeniesione do tego aktywowanego, co może w najlepszym wypadku spowodować małe zamieszanie (a w gorszym ciężki do opanowania bałagan). Proponuję przed obiektami Sheets wstawić ThisWorkbook, który ograniczy działanie makra do skoroszytu, w którym zostało ono uruchomione - a jeszcze lepiej użyć do tego klauzuli With:

With ThisWorkbook
   .Sheets.Add(after:=.Sheets(.Sheets.Count)).Name = ...
End With
Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 26.12.2022
    • 1
    • 7
    • 1