Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 57784 Skopiuj do schowka Moje makro wspomagające kodowanie adresów zakresów (Range)
Autor Wiadomość
PiotrekD 
świeżak


Posty: 1
Wysłany: 20-06-2017, 11:50   Moje makro wspomagające kodowanie adresów zakresów (Range)

Cześć.
Od zawsze irytował mnie fakt, że rejestrator makropoleceń zapisywał zakresy w dziwacznej postaci literowej np. „A5:XDC150”. Z wielu powodów jej dziwaczności wymienię tylko kilka. Po pierwsze jest okrutnie nieczytelna. Który to numer kolumny? Kto wie bez zaglądania do arkusza?
Po drugie jest szalenie myląca dla tych, którzy w jakikolwiek sposób mieli do czynienia z macierzami, gdzie NAJPIERW podaje się wiersz, a potem kolumnę.
Po trzecie wreszcie: nie wszystkie dane znajdują się zawsze w tym samym miejscu arkusza. Wystarczy wspomnieć bazy danych, gdzie przybywa wierszy, a także zwykłe inne zestawienia czasowe, w których przybywa również i kolumn.
Po czwarte – i najważniejsze – najczęściej dane do pobrania są w miejscu, którego współrzędne wylicza się w programie lub wyszukuje (tak x-sy i y-greki).
Ciągłe wypatrywanie odpowiednich pozycji w arkuszach i żmudne dopisywanie ciągu znaków „Cells(xxx,yyy),Cells(www,zzz)”, a czasami jeszcze „Range(„ na początku i pilnowanie końcowego nawiasu „)” jest żmudne, męczące i wk…..
W załączniku przesyłam plik RangeR1C1.xlsm z modułem RangeAddrR1C1 i moim autorskim makropoleceniem GetRAddrR1C1(), które nieco ‘umila’ tę niewdzięczną dłubaninę.
Można się ‘pobawić’ bezpośrednio w tym skoroszycie, można sobie skopiować do personala.xlsb.
Program przechwytuje współrzędne (fr, fc) pierwszej i (lr, lc) ostatniej
komórek JEDNEGO spójnego zakresu i tworzy z nich linię kodu z bezwzględnym
adresem zakresu w postaci: "range(cells(fr,fc),cells(lr,lc)).select".
Linia ta pojawia się w okienku "Immediate", gotowa do kopiowania i wklejania
w dowolnym miejscu, zwłaszcza w miejscu linii z bardzo niewygodnym w kodzie
programu adresem literowym typu: "Ai:Gj", powstającym przy automatycznej
rejestracji makropolecenia.
Przy wcześniej przyłączonej Tools|References|Microsoft Forms 2.0 Object Library,
linia z adresem jest także OD RAZU PRZECHOWYWANA W SCHOWKU, gotowa do wklejenia skrótem ctrl+v BEZ POTRZEBY KOPIOWANIA JEJ!

UWAGA! UWAGA!
Najciekawsze jest to, że TO MAKRO DZIAŁA NAWET W TRAKCIE REJESTROWANIA TWOJEGO WŁASNEGO MAKRA!!! !!!
Ani uruchomienie TEGO programu przyciskiem, skrótem klawiszowym lub z listy makr,
ani edycja kodu - wklejanie dobrej linii adresu w miejsce złej starej -
NIE ZAKŁÓCAJĄ REJESTROWANIA TWOJEGO MAKROPOLECENIA!!! !!!
Wystarczy tylko [później] oczyścić kod z łatwo rozpoznawalnych wywołań programu
lub od razu NADKLEJAĆ NOWĄ LINIĘ Z ADRESEM ZE SCHOWKA NA LINIĘ STAREGO ADRESU ORAZ LINIĘ ZNAJDUJĄCĄ SIĘ BEZPOŚREDNIO PONIŻEJ!!!
Można też od razu – WCIĄŻ W TRAKCIE NAGRYWANIA MAKRA - w kodzie wstawiać w miejsce współrzędnych zmienne wyliczane w programie.

Reszta w komentarzach przed makrem w edytorze kodu.
Zainteresowani sami sobie uzupełnią kod do poziomu ‘Option explicit’.
Może komuś się przyda....

Miłej zabawy, PiotrekD. :lol:

RangeR1C1.xlsm
Moje makro wspomagające kodowanie adresów zakresów
Pobierz Plik ściągnięto 91 raz(y) 23.09 KB

ID posta: 324875 Skopiuj do schowka
 
 
kulasart
[Usunięty]

Wysłany: 20-06-2017, 22:13   

PiotrekD, witam na forum :)

Zacznę od prostej ale jakże istotnej kwestii
Kod:
'Option Explicit

Ta linia (w mojej ocenie) powinna bezwzględnie zostać odkomentowana. Brak wymuszenia prawidłowej deklaracji zmiennych to droga do "piekła". A skoro już przy zmiennych jesteśmy to... brak ich deklaracji powoduje że wszystkie są typu Variant. Czy jest to oczekiwane zachowanie? Raczej nie.

Co do samego pomysłu, to jest on całkiem ciekawy, choć spora część z nas raczej używa zakresów dynamicznych, które są wyliczane "w locie". Zakresy te zwykle wymagają podania tylko adresu początkowego .
ID posta: 324901 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1194 razy
Posty: 4109
Wysłany: 21-06-2017, 01:44   

Ten kod to tylko tak dla zabawy czy ma jakieś zastosowanie? Bo jeśli tylko dla zabawy to wolę po prostu MsgBox Selection.Address

Jeśli ma jakieś zastosowanie to od jutra będę używał. Powiedz mi tylko, jak mam użyć podczas pisania kodu. Ale czuję, że ani nie potrzebuję ani mi nie ułatwia pisania. To raczej droga przez mękę.

Od kilkudziesięciu lat mam do czynienia z macierzami i jak pierwszy raz otwierałem Excel to widziałem, że domyślnie kolumny oznaczają litery. Przyjmowałem do wiadomości, i w niczym mi nie przeszkadza. Widziałem, że w formułach, przy domyślnym ustawieniu, najpierw trzeba podać literę kolumny a potem numer wierszy. No to tak robiłem i robię nadal. Żadna dziwaczność, żadne utrudnianie. Jeśli mam odczytać z kolumny AZ i wiersza 123 lub lastRow to piszę
Kod:

Cells(123, "AZ")

lub

Range("AZ123")

Cells(lastRow, "AZ")

lub

Range("AZ" & lastRow)

To niektórzy mają kłopot chcąc pisać
Kod:

Cells(123, 52)

bo muszą wyliczyć w głowie, która to kolumna AZ

Tak, że nie bardzo rozumiem
Cytat:

Ciągłe wypatrywanie odpowiednich pozycji w arkuszach i żmudne dopisywanie ciągu znaków

A tego już nie rozumiem wcale
Cytat:

a czasami jeszcze „Range(„ na początku i pilnowanie końcowego nawiasu „)” jest żmudne

Obojętnie czy piszesz tekst w Word, wyrażenie na egzaminie z matmy czy formułę to musisz pilnować tak, żeby "(" i ")" się zgadzały co do kolejności i liczby. Podczas pisania swojego kodu GetRAddrR1C1 nie musiałeś żmudnie pilnować końcowych nawiasów? Bo widzę w kodzie te końcowe nawiasy.
Cytat:

z bardzo niewygodnym w kodzie
programu adresem literowym typu: "Ai:Gj"

wygodny czy nie to tylko Twoje osobiste zdanie.

Ja przez 3 lata siedziałem na 1 forum. To duże forum (> 827 000 zarejestrowanych, > 86 000 tematów, > 683 000 postów, rekord w pewnym jednym dniu: ponad 500 000 wejść. Istnieje od 11 lat). No i pierwszy raz spotkałem takie narzekanie.
ID posta: 324907 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe