Se [ComboBox] È Nullo Istruzione VBA/Access 2007

Ho un form con una ComboBox (YearToBeBuilt) e due i campi textBox (Cost e YearofExpenditureCost). Tutti i comandi sono collegati ad una tabella principale e la tabella viene aggiornata una volta le selezioni/voci sono state fatte sulla forma.

Ho scritto una routine in VB chiamato ReCalcIt()che esegue la procedura riportata di seguito denominato:

Private Sub ReCalcIt()
If Me.YearToBeBuilt = "" Then
    Me.YearofExpenditureCost = Me.Cost
Else
    Me.YearofExpenditureCost = Me.Cost * (1 + 0.031) ^ (Me.YearToBeBuilt - 2010)
End If
End Sub

Quando ho scritto questo ho pensato che questo sarebbe effettuare le seguenti operazioni:

Se la ComboBox [YearToBeBuilt] è vuoto (ad esempio, la selezione fatta) quindi
la casella di testo [YearOfExpenditureCost] restituirà il valore della TextBox [Cost]. Altra cosa, il calcolo per YearofExpenditureCost viene eseguita.

Ma questo non funziona il modo in cui dovrebbe

Che cosa sto facendo di sbagliato? Io sono un VBA n00b così forse la mia sintassi non è corretta?

  • Vuoi davvero utilizzare un esponente per l’ultima parte del tuo calcolo? Ti rendi conto che Me.Cost * (1 + 0.031) ^ (Me.YearToBeBuilt - 2010) è l’equivalente di x^N, dove N è il risultato della differenza tra YearToBeBuilt e il 2010, in modo che se N=3, sarà di Me.Costo * (1 + 0.031) a cubetti?
InformationsquelleAutor myClone | 2010-09-23

 

3 Replies
  1. 4

    Provare con

    If Len(Me.YearToBeBuilt & vbNullString) = 0

    In modo che il codice sarà simile a questa:

    Private Sub ReCalcIt()
    If Len(Me.YearToBeBuilt & vbNullString) = 0 Then
        Me.YearofExpenditureCost = Me.Cost
    Else
        Me.YearofExpenditureCost = Me.Cost * (1 + 0.031) ^ (Me.YearToBeBuilt - 2010)
    End If
    End Sub
    • Sei fantastico–che ha fatto esattamente quello che volevo fare! Grazie mille! Perché sto cercando di capire questo…in pratica quel vuoto di selezione in combobox viene interpretato come una stringa di valore? Quindi, è necessario indicare la forma che, se il valore di stringa = 0. quindi, fare questo…etc. Altro, ecc…? È corretto?
    • Sì, hai ragione. Interpretare come una stringa, vedere la lunghezza di esso e controllare se è 0. Io penso che dovrebbe funzionare anche senza il vbNullString parte – si dovrebbe provare, ma è più sicuro in questo modo.
    • Interessante, grazie! Cordiali saluti–& vbNullString è necessario per la mia situazione…ho provato e non ha funzionato, senza che incluso.
  2. 0

    Il solito modo per dire:

    If IsNull(MyControl) Then

    Vedi anche: Access VBA: Se il Valore di <> NULL quindi eseguire query altro fine se. – non fa niente

    • Le versioni recenti di Accesso di default per consentire ZLS in progettazione tabelle. Non so se questo porta all’archiviazione della ZLS se non si fa qualcosa di specifico o non, ma utilizzando solo Non IsNull() è solo andare a lavorare al 100% affidabile per i campi che ne impediscono la ZLS.
    • Ho provato con Access 2010 e un modulo basato su una tabella che è stato volutamente impostato per consentire ZLS. Anche quando un campo (colonna) associato ad un controllo è spazio riempito, il controllo viene restituito da If IsNull(ctl).
    • Davvero? Bene, sembra che sia un bug a me. Che cosa succede se si utilizza un valore Null come valore di default (non noto) e ZLS a dire “noto per essere vuoto”? Se un controllo associato al campo restituisce Null a prescindere dal valore viene memorizzato, completamente nega il valore di consentire il deposito di ZLS s. Hmm. la lettura di nuovo, direte voi se ha spazi è restituito Null, troppo? Che è veramente preoccupante per me.
  3. 0

    Mi sembra che questo potrebbe essere dipendente dal formato della casella combinata? Se è un numero, quindi

    If Len(Me.YearToBeBuilt & vbNullString) = 0

    non funziona. Perché il Me.YearToBeBuilt ha un valore di 0, e quindi al di sopra restituisce 1.

    Mi chiedo se c’è un metodo più affidabile? Forse

    Me.YearToBeBuilt.ListIndex = -1

Lascia un commento