VBA - hujayra qiymati = 1 bo'lsa, msgboxni oching

Juda oddiy vba makrosiga yordam kerak. A6 qiymatida teng bo'lsa, ish stantsiyasida bir msgbox paydo bo'lishi kerak. Men quyidagi kodni ishlab chiqdim, ammo muammo shundaki, elektron jadvalda boshqa ma'lumotlarni kiritganimda (misol uchun, agar men "B6 pizza sevaman" deb yozsam) msgbox yana so'raladi va faqat bir marta so'ralishi kerak. Men A6 = 1 qiymatini o'rnatganimda. Menga yordam bera olasizmi?

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("A6").Value = 1 Then
    MsgBox "THIS IS A MSGBOX."
End If

End Sub

@edit Men juda muhim narsani unutib qo'ydim ... "1" qiymatini VLOOKUP bilan olishdi, shuning uchun uni foydalanuvchi qo'l bilan qo'shmasdan, bunga afsusdaman. Men sizga javob bergan kodlarni sinab ko'rdim va vlue ni qo'lda qo'yganimda va tartibga boshlashda aytganimdek, qiymat VLOOKUP bilan o'rnatildi. Boshqa barcha maslahatlar, iltimos?

2

6 javoblar

Ushbu kodni avvalgi o'rniga ishlatishingiz mumkin

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Me.Range("A6").Address And Me.Range("A6").Value = 1 Then
        MsgBox "THIS IS A MSGBOX."
    End If
End Sub

Nishon Excelda o'zgargan hujayra. shuning uchun har bir o'zgarish uchun, maqsad oralig'i ("A6") ekanligini tekshiraman.

2
qo'shib qo'ydi

Shartnoma bo'yicha: va faqat bir marta taklif qilishim kerak , eski qiymatni saqlashingiz kerak. Demak, taklif 1 marta ko'rsatilganida, bir marta ko'rsatiladi. Agar A6 allaqachon 1 bo'lsa va keyin yana 1 yozsangiz, hech qanday taklif.


Option Explicit

Dim oldVal
Private Sub Worksheet_Change(ByVal Target As Range)
    If (Target.Address = "$A$6") Then
        If Target.Value = 1 And Target.Value <> oldVal Then
            oldVal = Target.Value
            MsgBox "Test"
        End If
    End If
End Sub
2
qo'shib qo'ydi
Bu erda modul doirasi o'zgaruvchisini ishlatish o'rniga, lokal ko'lamdagi Statik o'zgaruvchidan foydalanish mantiqiy bo'lishi mumkin, ya'ni o'zgaruvchini subtitut ichidagi "Static oldVal" dan foydalanib bildiring.
qo'shib qo'ydi muallif M1chael, manba

O'zgartirishni A6 hujayrasi boshqa hujayradan farqli o'laroq o'zgartirganligini tekshirishingiz kerak. Buni ko'ring:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 And Target.Row = 6 Then
    If Target.Value = 1 Then
      MsgBox "THIS IS A MSGBOX."
    End If
  End If
End Sub
2
qo'shib qo'ydi

Worksheet_Change hodisasida tekshirishingiz kerak, faqatgina "A6" jildiga bosilsa, davom eting. Keyinchalik, hujayraning qiymati 1 ga teng yoki yo'qligini tekshirib ko'ring.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A6")) Is Nothing Then
    If Target.Value = 1 Then MsgBox "THIS IS A MSGBOX."
End If

End Sub
1
qo'shib qo'ydi

Buni ko'ring:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$6" Then
        If Target.Value = 1 Then
            MsgBox "THIS IS A MSGBOX."
        End If
    End If    
End Sub
1
qo'shib qo'ydi
Yo'q, siz Target.Address = "$ A $ 6" degan ma'noni bildirasiz
qo'shib qo'ydi muallif Shai Rado, manba
Ha, bu xatoni ko'rdim, allaqachon rahmat qilib, rahmat.
qo'shib qo'ydi muallif pokemon_Man, manba

Men juda muhim narsani unutib qo'ydim ... "1" qiymatini VLOOKUP bilan olishdi, shuning uchun uni foydalanuvchi qo'l bilan qo'shmasdan, bunga afsusdaman. Men sizga javob bergan kodlarni sinab ko'rdim va vlue ni qo'lda qo'yganimda va tartibga boshlashda aytganimdek, qiymat VLOOKUP bilan o'rnatildi. Boshqa barcha maslahatlar, iltimos?

0
qo'shib qo'ydi