VBA nie działa czyszczenie kolumny + chronione komórki

Użytkowanie arkusza kalkulacyjnego
KoalaG
Posty: 33
Rejestracja: ndz sty 28, 2018 10:42 am

VBA nie działa czyszczenie kolumny + chronione komórki

Post autor: KoalaG »

Witam

Używam prostego skryptu aby wyczyścić komórki

Zakres = Arkusz.getCellRangeByName("D5:D500")
Zakres.clearContents(5)

To działa dopóki nie włączę ochrony arkusza. Nie wiem dlaczego bo cała kolumna jest odznaczona żeby nie było ochrony komórek.

Problemem może być to że po drodze są scalone komórki w zakresie A-F. Przy testach na wyłączonej ochronie komórek skrypt nie czyścił ich zawartości.

Chciałem przetestować czyszczenie pojedynczych komórek ale VBA zgłasza błąd że nie zadeklarowano metody cells

dokument=ThisComponent
Arkusz=dokument.Sheets.getByName("Arkusz1")

Arkusz.Cells(4,6).ClearContents
OpenOffice 4.1.13 na Windows 7
KoalaG
Posty: 33
Rejestracja: ndz sty 28, 2018 10:42 am

Re: VBA nie działa czyszczenie kolumny + chronione komórki

Post autor: KoalaG »

Do jasnego grzyba zaczęło działać kiedy chciałem ręcznie pozmieniać ochronę komórek.

Okazuje się że pomiędzy Win10 a Win7 inaczej się to zaznacza i inaczej działa z jakiegoś powodu... w formatowaniu komórek.
OpenOffice 4.1.13 na Windows 7
Awatar użytkownika
Jermor
Posty: 2481
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: VBA nie działa czyszczenie kolumny + chronione komórki

Post autor: Jermor »

Myślę, że należy ci się wyjaśnienie.
Komórki scalone.
W rzeczywistości wszystkie komórki wchodzące w skład komórki scalonej są dostępne w strukturze arkusza. Oczywiście nie wprost, ale można się do nich odwoływać. Jeśli scalisz komórki np. A1:D1, to gdziekolwiek w arkuszu możesz wpisać formułę np. =C1, i jeśli w tej komórce jest jakaś wartość, to zostanie ujawniona przez tę formułę.
Jak wstawić taką wartość? Gdy komórki nie są jeszcze scalone, możesz wpisać do nich wartości a przy scalaniu na pytanie, czy przenieść zawartość scalanych komórek do pierwszej z nich, odpowiedzieć — NIE.
W makrach możesz wprost wpisywać do nich lub odczytywać z nich różne informacje.
Wpisanie danych do komórki scalonej wstawia te dane do pierwszej komórki tego scalonego zakresu. Dlatego kasowanie danych w kolumnie D nie objęło danych komórek scalonych, gdyż te dane znajdują się w kolumnie A.

Jeśli chodzi o Basic. W LibreOffice i Apache OpenOffice jest Basic. VBA to Visual Basic for Application dla produktu Microsoft.
Dla obiektu Arkusz należy użyć metody getCellByPosition(), a więc Arkusz.getCellByPosition(4,6).ClearContents
AOO 4.1.16 (tylko Win 10), LO 25.8 (x64) na: Win 11, 10, Linux (Mint)
Ważne!
Jeśli twój problem został rozwiązany, edytuj swój pierwszy post, dopisując w temacie [SOLVED].
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ