Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » zbiggy 11:27
 » Hitman 11:25
 » DJopek 11:25
 » Kenny 11:25
 » P@blo 11:23
 » kyusi 11:16
 » myszon 11:16
 » Liu CAs 11:13
 » Tomasz 11:10
 » Wojtekar 11:03
 » Dexter 11:02
 » resmedia 11:01
 » cVas 11:00
 » KHot 10:56
 » McMi21 10:53
 » petropank 10:52
 » rooter666 10:45
 » Wolf 10:39
 » AfiP 10:38
 » b0b3r 10:32

 Dzisiaj przeczytano
 41132 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
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!

  1. 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

    1. 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!

      1. 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.

        1. 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 :)

          1. 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.

            1. 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ć.

              1. 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!

                1. 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.

                  1. Dzięki, działa wyśmienicie. , Dexter 12/06/10 12:05
                    123

                    Komisarz, Blimek, Bart - nie odpowiadajcie w wątkach, które zakładam.
                    Odpowiedzi oleję.
                    THX!

  2. 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