Wpis z mikrobloga

#vba #excel
Mirki, proszę o pomoc. Czemu mi ten kod nie działa?
Dodam, że jest on uruchamiany w ramach zdarzenia Workbook_BeforeClose (ale z innego skoroszytu, niż "Raport").

Workbooks("Raport").Worksheets("Raport").Range("A:Z").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes


Błąd to subscript out of range
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@DwaNiedzwiedzie: Co do tego jestem pewien. W zasadzie to we właściwym kodzie używam zmiennych a nie odwołań bezwzględnych, ale tak się składa, że te zmienne mają dokładnie tę wartość.

Zauważyłem, że gdy dokładnie ten sam kod, z tymi samymi zmiennymi uruchamiam z modułu wszystko śmiga jak trzeba. Pewnie szybciej będzie jak obejdę konieczność korzystania ze zdarzenia BeforeClose (wymuszę na uzytkowniku uruchomienie procedury w inny sposób niż zamykając skoroszyt) niż gdybym
  • Odpowiedz
@Prezydent_Polski: ten kod:

Workbooks("Raport").Worksheets("Raport").Range("A:Z").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
Może zgłosić tak błąd tylko wówczas, gdy w tej samej instancji excela nie jest otwarty skoroszyt o nazwie raport z arkuszem o nazwie raport.

W zasadzie to we właściwym kodzie używam zmiennych a nie odwołań bezwzględnych, ale tak się składa, że te zmienne mają dokładnie
  • Odpowiedz
@brak_nicku:

Problem polega na tym, że ten skoroszyt jest otwarty bo linijkę czy dwie wyżej, otwieram go metodą workbooks.open, i wykonuję na tym skoroszycie inne operacje (np. sortowanie). Tym bardziej mnie dziwi cała ta sytuacja. Ostatecznie osiągnąłem swój cel w inny sposób (nie uruchamiam kodu ze zdarzenia BeforeClose, tylko standardowo w ramach procedury). Jestem niemal pewien, że to z tego powodu występował błąd. Podsumowując, -skoroszyt był otwarty
-skoroszyt był
  • Odpowiedz
@Prezydent_Polski: Problem VBA Excela polega na tym, że jego model obiektów jest do granic możliwości naszpikowany domyślnymi właściwościami klas. W połączeniu z zasięgiem nazw tworzy to wiele pułapek.
Najbardziej trywialny i najczęściej występujący przykład, kod typu:

Range("A1") = zmienna
zmienna = Range("A1")
Jest prawidłowy, skompiluje się i zadziała, ale w praktyce nie powinien wystąpić, bo jego działanie jest uzależnione od tego, gdzie
  • Odpowiedz