TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[EXCEL] Potrzebuję pomocy z makrem... , Dexter 10/06/10 12:25 Sytuacja wygląda tak:
w kolumnie A są wartości (kolejne, teraz kończą się w komórce B39 wartością 39). W komórce B1 mam formułę, która zwraca najwyższą wartość z kolumny A, czyli de facto ostatnią wpisaną liczbę.
Kombinuję nad makrem, które:
1. Przede wszystkim doda nową liczbę na końcu listy większą o 1 od poprzedniczki.
2. Ewentualnie przy okazji wyścietli MsgBoxa z monitem o opis, który wstawi do komórki obok dodanej liczby.
Jakieś pomysły?Komisarz, Blimek, Bart - nie odpowiadajcie w wątkach, które zakładam.
Odpowiedzi oleję.
THX! - Na przykład tak: , Gakudini 10/06/10 13:14
Sub dopiszwiersz()
Dim PierwszaPusta As Integer 'deklaruje zmienna w której znajdę pierwsą pustą komurke w kolumnie A
PierwszaPusta = 2 'wartość startowa
While Cells(PierwszaPusta, 1) <> "" 'poszukuje pierwszej pustej
PierwszaPusta = PierwszaPusta + 1
Wend 'petla zatrzymala sie na pustej komórce
Cells(PierwszaPusta, 1) = Cells(PierwszaPusta - 1, 1) + 1 'wpisuje do komórki wartość z komórki powyżej
Cells(PierwszaPusta, 2) = InputBox("Wpisz tekst")
End Sub- Uuu, działa wyśmienicie... , Dexter 10/06/10 13:29
A mogę prosić o objaśnienie i małą modyfikację?
Wyjaśnienie - skąd te makro wie, jaki zakres ma ogarnąć? Znaczy np. jeśli to nie byłoby od A1 ale od np. B5?
Modyfikacja - jak sprawić, aby ten zakres był położony w innym arkuszu niż przycisk "odpalający" makro?
Dzięki za pomoc.Komisarz, Blimek, Bart - nie odpowiadajcie w wątkach, które zakładam.
Odpowiedzi oleję.
THX! - Proszę: , ligand17 10/06/10 14:25
Cells(PierwszaPusta,1) - to (PierwszaPusta oznacza rząd o numerze PierwszaPusta, a 1) oznacza pierwszą kolumnę.
Zmianę arkusza powoduje polecenie Sheets("NazwaArkusza").Select - chyba, że chodzi Ci o inny plik, wtedy - jeżeli jest otwarty - Windows("NazwaPliku").Activate
Generalnie do VBA jest kupa materiałów w Sieci - wpisz w Google "VBA Excel jakaśfunkcjonalność" to dostaniesz kilkadziesiąt linków z różnymi rozwiązaniami.- Sheets("NazwaArkusza").Select , Gakudini 10/06/10 14:55
Sheets("NazwaArkusza").Select zadziała ale nie jest najlepszym rozwiązaniem, bo przejdzie Excel do tamtego arkusza. Trzeba by zrobić jeszcze powrót z niego i byłoby prawie ok. Ale:
1. Makro będzie "migać"
2. Tego arkusza do którego się odwołujemy nie można ukryć, a to się może przydać
Moja wersja (nie trafiłem z miejscem odpowiedzi) jest bardziej uniwersalna :)- Hmmm... , ligand17 10/06/10 18:24
Application.ScreenUpdating = False i nie "miga". I działa kilkadziesiąt razy szybciej.
Fakt, Sheets().Cells() jest eleganckie, ale ma też ograniczenia, jeżeli chcesz wywołać jakąś funkcję Excela, np. autofiltr - chyba musisz się znajdować w docelowym arkuszu.- A widzisz , Gakudini 10/06/10 22:46
to takiej zaawansowanej sztuczki to ja nie znałem :) ale skoro tak, to Twoje rozwiązanie jest w sumie czytelniejsze, ale problemu ukrytego arkusza chyba nie rozwiązuje, choć nie chce mi się już teraz sprawdzać.- Koledzy, jesteście zajebiści. , Dexter 11/06/10 12:00
Wszystko gra i buczy i zamarzyło mi się coś jeszcze.
Chciałbym aby makro skopiowało wartość z arkusza ABC z komórki A1 i dpoisało do arkusza WYKAZ w ostatniej pustej komórce kolumny C.
Zrobiłem tak:
Dim PierwszaPustaWYKAZ As Integer
Range("A1").Select
Selection.Copy
PierwszaPustaWYKAZ = 2
While Sheets("WYKAZ").Cells(PierwszaPustaWYKAZ, 3) <> ""
PierwszaPustaWYKAZ = PierwszaPustaWYKAZ + 1
Wend
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
No i nie dziełajet. Co robię nie tak?Komisarz, Blimek, Bart - nie odpowiadajcie w wątkach, które zakładam.
Odpowiedzi oleję.
THX! - Jak to było w misiu: , Gakudini 11/06/10 22:40
"nie mieszajmy tutaj dwóch systemów walutowych". ;)
Mieszanie Cells() i copy/paste nie jest dobrym pomysłem, w zasadzie w ogóle używanie copy paste wydaje mi się pomyłką.
W twoim konkretnym przypadku robisz Selection.PasteSpecial, ale co w tym momencie jest wybrane (co jest selection?) Brakuje wcześniej Cells(PierwszaPustaWYKAZ, 3).select. Widzę, że aktywna jest nadal komórka z której robiłeś copy. Moje wyszukiwanie pierwszej pustej wędruje po komórkach tylko "w pamięci" wybrana komórka się przy tym nie zmienia.
Ale tak na prawdę to powinno być coś w tym guście:
Dim PierwszaPustaWYKAZ As Integer
PierwszaPustaWYKAZ = 2
While Sheets("WYKAZ").Cells(PierwszaPustaWYKAZ, 3) <> ""
PierwszaPustaWYKAZ = PierwszaPustaWYKAZ + 1
Wend
'miejsce wpisywania zostało znalezione więc wpisujesz w nie wartość komórki A1 z arkusza ABC czyli:
Sheets("WYKAZ").Cells(PierwszaPustaWYKAZ, 3) = Sheets("ABC").Range("A1")
i tyle.- Dzięki, działa wyśmienicie. , Dexter 12/06/10 12:05
123Komisarz, Blimek, Bart - nie odpowiadajcie w wątkach, które zakładam.
Odpowiedzi oleję.
THX!
- Kluczem jest Cells(w, k) , Gakudini 10/06/10 14:24
funkcja Cells(wiersz, kolumna) jest według mojego niewielkiego doświadczenia podstawą do napisania czegokolwiek w Excelowym VBA.
W naszym przypadku w pętli While na sztywno wpisałem 1 jako numer kolumny. czyli jadę po kolumnie A. Zmieniając to na 2 makro będzie jechać po kolumnie B itd.
A odpowiadając na pytanie: konkretnie nie wie zaczyna od komórki A1 i jedzie w dół tak długo aż spotka pustą komórkę. Jak dojdzie do końca arkusza (A65536) makro się zapewne wywali :)
Co do modyfikacji przed Cells trzeba wstawić nazwę arkusza np:
Sub dopiszwiersz()
Dim PierwszaPusta As Integer 'deklaruje zmienna w której znajdę pierwsą pustą komurke w kolumnie A
PierwszaPusta = 2 'wartość startowa
While Sheets("Arkusz1").Cells(PierwszaPusta, 1) <> "" 'poszukuje pierwszej pustej
PierwszaPusta = PierwszaPusta + 1
Wend 'petla zatrzymala sie na pustej komórce
Sheets("Arkusz1").Cells(PierwszaPusta, 1) = Sheets("Arkusz1").Cells(PierwszaPusta - 1, 1) + 1 'wpisuje do komórki wartość z komórki powyżej
Sheets("Arkusz1").Cells(PierwszaPusta, 2) = InputBox("Wpisz tekst")
End Sub |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|