Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Makro w Excel'u

23 Paź 2007 17:59 1557 5
  • Poziom 2  
    Mam problem z jednym makrem excelowym.

    Potzebuje zbudowac liste, gdzie w kolumnie A będą ręcznie wpisywane nazwy. Na ich podstawie, w zależności co będzie w kolumnie A, w kolumnie B ma pojawić się konkretna wartość, kopiowana z Arkusza 2.

    Z kopiwaniem już sobie poradziłem, nie mogę dać sobie rady, żeby odświeżanie było w czasie rzeczywistym. tzn. przy włączeniu makra, działa ono tylko raz, po wpisaniu nazwy w A2, nie pojawia się już wartość w B2.

    poniżej moj kod, moze po prostu trzeba się za to zabrać z innej strony?
    Help!:cry:


    Sub test()
    '
    Dim k As Variant
    Dim Wiersz As Integer

    For Wiersz = A1 To A22
    If ActiveCell.Value = "k" Then
    ActiveCell.Offset(0, 1).Value = Worksheets(2).Range("L6").Value
    ElseIf ActiveCell.Value = 0 Then
    ActiveCell.Offset(0, 1).Value = "nie"
    End If

    Next

    Application.ScreenUpdating = False
    End Sub
  • Poziom 38  
    Możesz ustawić makro iż będzie się wykonywało przy przeliczaniu arkusza. Ale może wystarczy funkcja wyszukaj.pionowo
  • Poziom 29  
    Nie mam zabardzo czasu na siedzenie nad tym problemem, ale w zamian podaję parę różnych przydatnych rozwiązań do tego programu. Myślę że sobie poradzisz, analizując pewne chwyty w VBA. Uwaga! podane przykłady nie są rozwiązaniem problemu, są tylko fragmentami mozliwymi w większej lub mniejszej części pomóc w pracy nad arkuszem.

    1. Przepisuje na bieżąco zawartość komórki z Arkusz1 do innego arkusza np.2
    ** Deklarować w arkuszu
    ** aby procedura zadziałała, należy powtórnie kliknąć na komórce z wprowadzonymi danymi

    Sub Worksheet_selectionChange(ByVal Target As Range)
    wie = ActiveCell.Row '/ adres aktywnego wiersza
    kol = ActiveCell.Column '/ adres aktywnej kolumny
    adr = Cells(wie, kol).Address '/ adres aktywnej komórki
    '/ kopiowanie danych z Arkusza1 do Arkusza2
    Worksheets("Arkusz1").Range(adr).Copy _
    Destination:=Worksheets("Arkusz2").Range(adr)
    End Sub

    2. Tworzy tabele danych na arkuszu Arkusz2, pobieranych z arkusza Arkusz1
    wiersz = Worksheets("Arkusz1").Range("B1").Value 'numer pierwszego wiersza tabeli
    aa = Worksheets("Arkusz1").Range("A1").Value
    bb = Worksheets("Arkusz1").Range("A2").Value
    With Worksheets("Arkusz2")
    .Cells(wiersz,1).Value = aa
    .Cells(wiersz,2).Value = bb
    End With
    Worksheets("Arkusz1").Range("B1").Value = wiersz +1

    3. Makro działające po wybraniu okreslonej komórki
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    nrkolumny = 2
    If Target.Column = nrkolumny Then
    MsgBox " Makro działa "
    End If
    End Sub

    4. Uruchamianie makra formułą
    ** Deklarować w arkuszu
    ** w kom. A1 wpisać formułę =JEŻELI(qq!B1=1;1;0)
    ** kom. B1 przyjm. wartość 1 lub 0


    Private Sub Worksheet_Calculate()
    sprawdz = Range("a1").Value
    Select Case sprawdz
    Case 1
    Call xxx
    Case 0
    Call ccc
    End Select
    End Sub

    'reakcja dla B1=1
    Function xxx()
    Range("a8:a14").Select
    Selection.Interior.ColorIndex = 44
    Range("a7").Select
    End Function

    'reakcja dla B1=0
    Function ccc()
    Range("a8:a14").Select
    Selection.Interior.ColorIndex = xlNone
    Range("a7").Select
    End Function

    Pozdrówka
  • Poziom 2  
    dzieki za podpowiedzi, dzis jest juz dla mnie za pozna pora na myslenie, jutro sie tym pobawie, dam znac czy cos mi pomoglo.

    pozdr.
  • Poziom 2  
    Mowiąc szczerze nie bardzo mi idze z tym makrem.
    Probowałem coś z waszymi częściami skryptu, ale ponieważ nie ma co ukrywać jestem zielony nie bardzo wychodzi mi tworzenie do tych skrawków "obudowy".

    Jeśli macie pomysł dlaczego moj kod działa tylko raz, a nie na cały zaznaczony obszar, będę wdzięczny za pomoc. Lub jakiś kod zastępczy.

    pozdr.
  • Poziom 38  
    Popatrz na funkcję wyszukaj.pionowo. Powinna rozwiązać twoje problemy.