• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Visual basic excell. Jak wyswietlic komunikat jesli wartosc komorki przyjmie konkretna liczbe ?

0 głosów
58 wizyt
pytanie zadane 15 czerwca 2018 w Visual Basic przez havk Nowicjusz (120 p.)

Witam

Dopiero od wczoraj zaczynam cos tam czytac o visual basic jako ze mam problem do rozwiazania w excellu i to moj pierwszy post.

Opis ponizej:

W "tab1" mam komorki, przykladowo : C1 , C3 , C4 . Komorki te  moga przyjmowac wartosci : 1,,8,9,15,21. Dla kazdej z  tych wymienionych liczb istnieje komunikat ktory ma byc wyswietlony jesli liczba ta zostanie wpisana w komorke: C1 lub C3 lub C4.

W "tab2" mam wypisane komunikaty do wyswietlenia:

tab2 komorka A1 (komunikat dla liczby 1): "Pamietaj by wykonac czynnosc ABC"

tab2 komorka A2 (komunikat dla  liczby 8):"Pamietaj by wykonac czynnosc DCEF"

tab2 komorka A3 (komunikat dla czby 9): "Pamietaj by wykonac czynnosc BDEE"

i tak dalej komunikaty dla pozostalych liczb.

 

Jesli w C1 wpiszemy liczbe dla ktorej jest komunikat wtedy sie wyswietli msgbox z tym komunikatem, jesli potem wpiszemy w C3 liczbe dla ktorej jest dostepny komunikat to tutaj takze wyswietli sie msgbox  z komunikatem dla tej liczby ale juz nie wyswietli sie ponownie komunikat dla liczby z komorki C1  jesli zostala wczesniej wpisana i tak samo dla pozostalych . 

Ogolnie chodzi o takie przypomnienie co musi byc zrobione, sprawdzone jesli wpisze w komorke dana liczbe ktora odpowiada czynnosciom ktore musza byc wykonane. 

Probowalem to zrobic miesiac temu ale nic mi z tego nie wyszlo a kod juz gdzies mi przepadl. Znalazlem kiedys jakis w miare odpowiadajacy mojemu problemowi kod ale nie dzialal tak jak tego potrzebuje. Dostawalem komunikaty dla wszystkich komorek C1, C3, C4  jednoczesnie zamiast dla aktualnie  wartosci w bierzacej komorce.

  • Nie proś o gotowe rozwiązania - forum służy do wspólnej nauki, nie do pisania gotowców.

Poprosze chociaz o jakies naprowadzenie jesli nie rozwiazanie problemu.

 

1 odpowiedź

0 głosów
odpowiedź 15 czerwca 2018 przez jeremus Maniak (59,840 p.)
'spróbuj coś takiego ...to tylko szkielet...
Private Sub Worksheet_Change(ByVal Target As Range)
  
  If Target = Range("C1") Then
    Select Case Target.Value
      Case 1
        MsgBox ("komunikat1 dla C1")
      Case 2
        MsgBox ("komunikat2 dla C1")
    End Select
  ElseIf Target = Range("C2") Then
    Select Case Target.Value
      Case 1
        MsgBox ("komunikat1 dla  c2")
      Case 2
        MsgBox ("komunikat2 dla c2")
    End Select
  End If
End Sub

 

komentarz 15 czerwca 2018 przez havk Nowicjusz (120 p.)
ok, dziekuje od tego zaczne
komentarz 16 czerwca 2018 przez havk Nowicjusz (120 p.)

@jeremus, Witam . Mam ciagle jeden problem . Jesli przykladowo dla wybranej komorki tutaj akurat C7 przykladowo wpisze cyfre 1 to pojawia mi sie komunikat o ile jakis jest wpisany w worksheet "information" pole A5. Nastepnie jesli w jakies inne pole wpisze cyfre 1 to znow mi sie pojawia komunikat z workseet "information" pole A5. Czyli jakby jakis przeciek byl. Jesli z kolei nie wybiore cyfry 1 w polu C7 a wpisze przykladowo 4 to wpisujac 1 do innej komorki nic sie nie dzieje czyli wpierw musi nastapic wybor opcji w polu C7 i dopiero potem po wpisaniu tej samej liczby w inne miejsce ponownie nastepuje wyswietlenie komounikatu.

Czy da sie tego jakos uniknac ?

 

Private Sub Worksheet_Change(ByVal Target As Range)
   
  If Target = Range("C7") Then
    Select Case Target.Value
    Case 1
        If Not IsEmpty(Worksheets("information").Range("A5")) Then
        MsgBox Worksheets("information").Range("A5").Value
        End If
    Case 2
      If Not IsEmpty(Worksheets("information").Range("A7")) Then
        MsgBox Worksheets("information").Range("A7").Value
        End If
    Case 3
      If Not IsEmpty(Worksheets("information").Range("A9")) Then
        MsgBox Worksheets("information").Range("A9").Value
        End If
    Case 4
      If Not IsEmpty(Worksheets("information").Range("A11")) Then
        MsgBox Worksheets("information").Range("A11").Value
        End If
    End Select
 
  End If
End Sub

 

komentarz 16 czerwca 2018 przez jeremus Maniak (59,840 p.)

trochę źle zinterpretowałem Target

to powinno zadziałać :

Private Sub Worksheet_Change(ByVal Target As Range)
 
 Dim sAddr As String
 sAddr = Target.Address(0, 0)
 If sAddr = "C7" Then
    Select Case Target.Value
    Case 1
        If Not IsEmpty(Worksheets("information").Range("A5")) Then
        MsgBox Worksheets("information").Range("A5").Value
        End If
    Case 2
      If Not IsEmpty(Worksheets("information").Range("A7")) Then
        MsgBox Worksheets("information").Range("A7").Value
        End If
    Case 3
      If Not IsEmpty(Worksheets("information").Range("A9")) Then
        MsgBox Worksheets("information").Range("A9").Value
        End If
    Case 4
      If Not IsEmpty(Worksheets("information").Range("A11")) Then
        MsgBox Worksheets("information").Range("A11").Value
        End If
    End Select
 End If
End Sub

 

komentarz 16 czerwca 2018 przez havk Nowicjusz (120 p.)
dziala idealnie , dziekuje

Podobne pytania

0 głosów
1 odpowiedź 100 wizyt
0 głosów
1 odpowiedź 283 wizyt
0 głosów
1 odpowiedź 91 wizyt
pytanie zadane 2 listopada 2018 w Visual Basic przez kubekzone Użytkownik (610 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

63,167 zapytań

109,404 odpowiedzi

228,554 komentarzy

42,692 pasjonatów

Przeglądających: 62
Pasjonatów: 8 Gości: 54

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...