2011-04-14 28 views
19

Mam pole tekstowe i przycisk w moim formularzu dostępu. W zdarzeniu kliknięcia przycisku chcę sprawdzić, czy pole tekstowe jest puste, a jeśli tak, nic nie zostanie wykonane. więc używamBłąd w polu tekstowym

If Me.textbox.Value = Null Then 
    Exit Sub 
End if 

Ale to nie działa ... Sprawdziłem textbox.value w oknie wykonania i jest Null, ale jeśli klauzula po prostu nie działa ... Dlaczego?

EDYCJA: @ Dimse, próbowałem "", nie działa. A także textbox.text = Null, pojawia się błąd informujący, że pole tekstowe nie jest aktywne. Bardzo dziwne.

+1

Nie potrzebujesz właściwości .Value w tym przypadku, ponieważ jest to domyślna właściwość elementów sterujących. 'Jeśli IsNull (Me! Textbox) Then' powinien wystarczyć (lub, jeśli ograniczyłeś kontrolę do pola, które zezwala na zły łańcuch o zerowej długości, musisz przetestować długość wartości kontrolnej połączonej z pustym ciągiem , 'If Len (Me! Textbox & vbNullString) = 0 Then' - ale powtarzam tylko to, co wszyscy inni powiedzieli, nie ma wyraźnej właściwości .Value. –

Odpowiedz

47

Null nigdy nie jest równy cokolwiek, nawet Null. Użyj funkcji IsNull().

If IsNull(Me.textbox.Value) Then 

Jeśli chcesz Me.textbox traktowane tak samo, gdy zawiera pusty ciąg jako kiedy to Null, złączyć pusty ciąg do niego i sprawdzić długość połączonego łańcucha:

If Len(Me.textbox.Value & "") = 0 Then 

You może również użyć stałej o nazwie vbNullString, zamiast literału tekstowego, "", dla pustego ciągu znaków.

If Len(Me.textbox.Value & vbNullString) = 0 Then 

przy użyciu ciągu dosłownego wymaga VBA skonstruowania tego ciągu od nowa za każdym razem. Z określoną stałą, VBA musi tylko odwoływać się do niej, więc powinno być szybciej i zużywać mniej pamięci. Jednak w wielu (prawdopodobnie większości) przypadkach przewaga wydajności z vbNullString byłaby tak niewielka, że ​​nie zauważyłbyś różnicy. Zobacz także comment below z David-W-Fenton.

Dla mnie bardziej przekonującym powodem do użycia vbNullString jest to, że jest natychmiast rozpoznawalny dla moich starzejących się oczu. Odwrotnie, z literałem ciągu, trwa (odrobinę dłużej), aby potwierdzić, że "" nie jest czymś innym ... jak " " lub "'". Jedynym minusem z vbNullString, IMO, jest to, że wymaga więcej pisania niż "".

I na koniec, chociaż nie musisz wyraźnie odwoływać się do właściwości Value (ponieważ jest to domyślna właściwość pola tekstowego), zostawiłem ją, ponieważ było tak i ponieważ wolę być jednoznaczna z Value. :-)

+0

Dzięki .. Dostaję to .. – darkjh

+8

W kodzie VBA, powinieneś nabrać nawyku używania nazwanej stałej 'vbNullString' zamiast pustego łańcucha, tzn." ", ponieważ pamięć dla określonej stałej jest już przydzielona.Nie ma to większego znaczenia w większości przypadków, ale w pętli może, więc przyzwyczajenie się upewnia, że ​​dostaniesz to dobrze, kiedy to ma znaczenie. –

+0

@ David-W-Fenton: Dzięki o poradę! – darkjh

0

Myślę, że być może trzeba sprawdzić againt "", pusty łańcuch, a nie zerowy.

1

Rozwiń sub tak:

If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then 
    Exit Sub 
End if 
+0

Nie ... nie działa ... – darkjh

1

Null nie jest równy innemu null;)

spróbować Jeśli IsNull (Me.textbox.Value) Następnie

+0

Ahhh I didn ' t widzisz twoją odpowiedź .. Dzięki i tak – darkjh

0

Nie mogłem tego uruchomić, ponieważ używałem zdarzenia KeyUP. Tak więc to właśnie dla mnie zadziałało.

If(Textbox.Text = '') 
    ... 

Od Textbox.Value tylko aktualizacje na temat zmian razie, nie było aktualizacji na keyup, więc TextBox.text to, co jest obecnie w pudełku.

Podsumowanie: Alternatywnie, użyj właściwości .text

2

przepraszam jeśli jestem budząc zmarłych, ale tylko ze względu na kompletność mam zamiar dać kod how to test for spaces (visibly 'blank/empty') as well:

If IsNull(Me.Textbox) Or Trim(Me.Textbox) = vbNullString Then 
If Trim(Me.Textbox & vbNullString) = vbNullString Then 'Shorter version 
If Len(Trim(Me.Textbox) & vbNullString) = 0 Then 'Shortest version 

Przyszedłem tu poszukać sposobu obsługi spacji, pusty/ZLS, & NULL's

2

Przepraszam też za budząc zmarłych, ale zastanawiam się, że nikt nie rozważał użycia funkcji Nz (patrz: @MSDN), bardzo popularnej w VBA, również użytecznej w Access/SQL i, moim zdaniem, wygodniejszego, zwięzłego i potężnego rozwiązania dla wartości nullable w wyrażeniach.

0

Po prostu użyj drugiego kryterium, które zadziała!
W tym przypadku po prostu proste słowo, takie jak "sprawdź".

If Forms![Basic]![Table.Item] & "check" = "check" Then 

MsgBox "Field Empty" 

Else 

MsgBox "Field Not Empty" 

End If 
+0

Proszę sformatować odpowiedź! –

Powiązane problemy