Cześć, Czy ktoś wie jak w szybki sposób (albo czy w ogóle się da) skopiować przycisk, tak żeby wykonywał tą samą funkcję, ale dla następnego wiersza? Przeciąganie przycisku daje ten sam kod (duh) - czy w VBA jest jakiś odpowiednik przycisku "Użyj odwołań względnych"? Próbowałem się bawić w ActiveCell.Offset, ale coś mi nie idzie. Na przykładzie (mega uproszczonym) - mam przycisk w komórce B1, który zwiększa wartość A1 o 1. I potrzebuję mieć taki sam przycisk dla 80 następnych wierszy. Musi być to na guziku, bo z excela będą też korzystać osoby bardzo mało ogarnięte komputerowo.
@Thermao od pozycji przycisku, jeszcze nie robiłem. Będzie problem, bo przycisk nie jest w komórce... Chyba, że zrobisz event na kliknięcie w jakąś komórke. No.. male okno dialogowe informujące użytkownika, że teraz ma kliknąć wiersz gdzie makro ma dzilac
@Thermao: Możesz w konstrukcji makra zawrzeć odwołanie do nazwy przycisku je wywołującego (Application.Caller) i w nazwie przycisku przemycić numer docelowego wiersza, choć oczywiście będzie to wymagało korekty tej nazwy po skopiowaniu. Samo kopiowanie oczywiście też można zrobić makrem, wtedy odpadnie ręczna robota :)
Sub makro()
MsgBox Application.Caller
End Sub Potencjalnie można też odwołać się do indeksu obiektu, jakim jest przycisk, ale to trochę śliska sprawa, bo chyba nie ma nad tą
@Thermao: w sensie na arkuszu ma byc 80 przyciskow? Nie ma lepszej metody? Np. « Grazynko, kiknij wiersz, ktory chcesz zmienic, a potem 1 przycisk na wstazce » ?
@taju: bardzo mocno uproszczając tak. Ogólnie w samych przyciskach chodzi o zuzycie materialu. Kilka guzików obok siebie w danym wierszu z ilosciami i dana osoba ma wdusic guzik z ilością jaką została zużyta. Button jest chałupniczym rozwiązaniem problemu "mi się naklikało i wszystko znikło", co zdarzało się notorycznie, bo zamiast klikac w wstążkę wpisywali ilosc w komorke po czym dopiero po pół dnia kapowali się że coś jest nie tak i
Sub addone() Dim myrng as Range Set myrng = cells(activesheet.buttons(application.caller).topleftcell.row, X) myrng = myrng +1 End Sub
Zamiast X numer kolumny, ktora w danym wierszu chcesz zmieniac. I wstaw zwykle buttons, nie activex i przypisz do kazdego tego suba (wystarczy raz a potem kopiuj wklej) Przyciski (lewy gorny rog) musza byc w tym wierszu, co komorka do zmiany.
mam przycisk w komórce B1, który zwiększa wartość A1 o 1
Nie bardzo wiem, gdzie tu jest miejsce na niepewność... Skoro ma być 80 przycisków w 80 wierszach to bez względu na to, który przycisk gdzie się znajdzie zawsze będzie robił to samo - zmieniał wartość komórki z tego wiersza.
Skoro ma być 80 przycisków w 80 wierszach to bez względu na to, który przycisk gdzie się znajdzie
@brak_nicku: Pod warunkiem, że pani Grażynka nie zmniejszy wysokości wiersza lub nie przesunie nieco przycisku tak, że jego róg wyjdzie poza bieżący wiersz i dwa przyciski zaczną robić to samo :) W podejściu z nazwami przemieszanie przycisków wydaje mi się mniej prawdopodobne.
1. Jesli zamiast mojego X dasz : activesheet.buttons(application.caller).topleftcell.column-1 To bedzie dzialalo dla danego wiersza, jedna kolumne przed przyciskiem
2. Jesli zamiast +1 dasz myrng = myrng + val(activesheet.buttons(application.caller).caption)
To potem wystarczy tekst (caption) na przycisku zmienic na cos w stylu +5 butelek +3 kurczaki Itp I bedzie dzialac ;) dodajac do komorki wartosc z tekstu przycisku
@DwaNiedzwiedzie: chyba troszkę szukasz problemów na siłę, bo tak jak napisał @taju - nawet przy domyślnych ustawieniach ja nie potrafię tak modyfikować wysokości wierszy, żeby przycisk znalazł się w innej komórce. Jak pani Grażynka lubi suwać przyciski, to przemieści i pięć wierszy niżej, ale na to wyjście jest banalne - zablokować kolumnę z przyciskami i włączyć ochronę arkusza - byle edytuj obiekty nie było dostępne.
@Thermao: nie możesz przy okazji zablokować możliwość edycji arkusza Grażynkom? Ewentualnie obszaru z przyciskami, jeśli muszą coś wpisywać w innych kolumnach.
Cześć,
Czy ktoś wie jak w szybki sposób (albo czy w ogóle się da) skopiować przycisk, tak żeby wykonywał tą samą funkcję, ale dla następnego wiersza? Przeciąganie przycisku daje ten sam kod (duh) - czy w VBA jest jakiś odpowiednik przycisku "Użyj odwołań względnych"? Próbowałem się bawić w ActiveCell.Offset, ale coś mi nie idzie.
Na przykładzie (mega uproszczonym) - mam przycisk w komórce B1, który zwiększa wartość A1 o 1. I potrzebuję mieć taki sam przycisk dla 80 następnych wierszy.
Musi być to na guziku, bo z excela będą też korzystać osoby bardzo mało ogarnięte komputerowo.
Sub makro()
MsgBox Application.Caller
End Sub
Potencjalnie można też odwołać się do indeksu obiektu, jakim jest przycisk, ale to trochę śliska sprawa, bo chyba nie ma nad tą
@DwaNiedzwiedzie: skoro to ma być komórka w kolumnie po lewej, to chyba nie ma takiej potrzeby
@Thermao: coś takiego powinno działać, nie mam możliwości teraz przetestowwać:
Sub Przycisk4_Click()
Dim r As Range
Set r = Arkusz1.Shapes(Application.Caller).TopLeftCell.Offset(0, -1)
r.Value = r.Value + 1
End Sub
Cos w tym stylu moze:
Sub addone()
Dim myrng as Range
Set myrng = cells(activesheet.buttons(application.caller).topleftcell.row, X)
myrng = myrng +1
End Sub
Zamiast X numer kolumny, ktora w danym wierszu chcesz zmieniac.
I wstaw zwykle buttons, nie activex i przypisz do kazdego tego suba (wystarczy raz a potem kopiuj wklej) Przyciski (lewy gorny rog) musza byc w tym wierszu, co komorka do zmiany.
Nie bardzo wiem, gdzie tu jest miejsce na niepewność... Skoro ma być 80 przycisków w 80 wierszach to bez względu na to, który przycisk gdzie się znajdzie zawsze będzie robił to samo - zmieniał wartość komórki z tego wiersza.
@brak_nicku: Pod warunkiem, że pani Grażynka nie zmniejszy wysokości wiersza lub nie przesunie nieco przycisku tak, że jego róg wyjdzie poza bieżący wiersz i dwa przyciski zaczną robić to samo :) W podejściu z nazwami przemieszanie przycisków wydaje mi się mniej prawdopodobne.
przy formacie przycisku « move with cells » nie powinno byc z tym problemu.
Jeszcze takie cos:
1. Jesli zamiast mojego X dasz :
activesheet.buttons(application.caller).topleftcell.column-1
To bedzie dzialalo dla danego wiersza, jedna kolumne przed przyciskiem
2. Jesli zamiast +1 dasz
myrng = myrng + val(activesheet.buttons(application.caller).caption)
To potem wystarczy tekst (caption) na przycisku zmienic na cos w stylu
+5 butelek
+3 kurczaki
Itp
I bedzie dzialac ;) dodajac do komorki wartosc z tekstu przycisku
Ewentualnie obszaru z przyciskami, jeśli muszą coś wpisywać w innych kolumnach.