VBA: Condizionale È Nulla

C’è un If condizione in applicazione VBA come di seguito indicato:

If Not My_Object Is Nothing Then
My_Object.Compute

Quando il codice viene eseguito in modalità di debug, ho trovato che il If condizione restituisce true anche quando My_Object ha “Variabili”.

Qualcuno potrebbe per favore spiegare questo? Voglio My_Object.Compute essere eseguito solo quando My_Object esiste.

  • Come è My_Object dichiarato?
  • Puoi chiarire cosa intendi per “variabili”? Se My_Object è Nulla, è sicuramente il mezzo non è che punta a un oggetto. In più, come la definizione del tipo di My_Object?
  • “Voglio My_Object.Calcolare per essere eseguito solo quando My_Object esiste.” Il tuo desiderio è concessa. (Nel senso, c’è qualche scenario in cui questo non sarebbe il caso?!)
  • GSerg, Joel Goodwin, My_Object è un oggetto di una classe da una libreria esterna. In modalità di debug, Quando Se la condizione è in procinto di essere giustiziato, l’aggiunta di un orologio My_Object mostra <Variabili>
  • È una libreria esterna avrebbe mai sentito parlare?
  • Stai usando “On Error Resume Next” qui?

 

3 Replies
  1. 23

    Basato su il tuo commento per Issun:

    Grazie per la spiegazione. Nel mio caso, L’oggetto è dichiarato e ha creato prima la condizione If. Così, Come posso usare la condizione If per controllare < Variabili> ? In altre parole, non voglio eseguire My_Object.Calcolare se My_Object è < Variabili>

    È necessario controllare una delle proprietà dell’oggetto. Senza dire che l’oggetto è, non possiamo aiutarvi.

    Ho fatto il test di diversi oggetti di uso comune e ha scoperto che un istanziato Collection senza elementi aggiunti mostra <No Variables> della finestra di controllo. Se il vostro oggetto è infatti una raccolta, è possibile controllare la <No Variables> condizione .Count proprietà:

    Sub TestObj()
    Dim Obj As Object
        Set Obj = New Collection
        If Obj Is Nothing Then
            Debug.Print "Object not instantiated"
        Else
            If Obj.Count = 0 Then
                Debug.Print "<No Variables> (ie, no items added to the collection)"
            Else
                Debug.Print "Object instantiated and at least one item added"
            End If
        End If
    End Sub

    È anche la pena notare che se si dichiara un qualsiasi oggetto As New quindi il Is Nothing di controllo diventa inutile. Il motivo è che quando si dichiara un oggetto As New, allora viene creata automaticamente quando viene chiamato la prima volta, anche se la prima volta che la chiamata è per vedere se esiste!

    Dim MyObject As New Collection
    If MyObject Is Nothing Then  ' <--- This check always returns False

    Questa non sembra essere la causa del tuo problema specifico. Ma, dal momento che gli altri possono trovare a questa domanda attraverso una ricerca su Google, ho voluto inserire perchè è un comuni del principiante errore.

    • Simile, con questa logica, si potrebbe verificare la .Value di una proprietà, che l’oggetto stesso, dal momento che, naturalmente, l’oggetto viene istanziato, esiste, e quindi Is Not Nothing. Ho estrapolato che da questa risposta si e risolto un problema che mi stava vivendo, che era simile al po cercando di testare un valore di stringa vuota, che ho avuto a che fare con <> "", non Is Nothing test. Grazie, ottima risposta.
  2. 9

    Solo perché il vostro oggetto di classe non ha variabili non significa che non c’è nulla. La dichiarazione e l’oggetto e la creazione di un oggetto sono due cose diverse. Guardare e vedere se si imposta un/creazione di un oggetto.

    Prendete per esempio l’oggetto dictionary – proprio perché non contiene variabili non significa che non è stato creato.

    Sub test()
    
    Dim dict As Object
    Set dict = CreateObject("scripting.dictionary")
    
    If Not dict Is Nothing Then
        MsgBox "Dict is something!"  '<--- This shows
    Else
        MsgBox "Dict is nothing!"
    End If
    
    End Sub

    Tuttavia, se si dichiara un oggetto, ma non crea nulla.

    Sub test()
    
    Dim temp As Object
    
    If Not temp Is Nothing Then
        MsgBox "Temp is something!"
    Else
        MsgBox "Temp is nothing!" '<---- This shows
    End If
    
    End Sub
    • Grazie per la spiegazione. Nel mio caso, L’oggetto è dichiarato e ha creato prima la condizione If. Così, Come posso usare la condizione If per controllare <Variabili> ? In altre parole, non voglio eseguire My_Object.Calcolare se My_Object è <Variabili>
    • Senza vedere il tuo codice e ciò che l’oggetto è, ho paura non so come aiutarti su questo.
    • Un dict esempio! che sorpresa 🙂 – buon esempio dal modo in cui
  3. 0

    Nel mio codice di esempio, ero impostazione my object per niente, e non ho potuto ottenere il “non” parte di se la dichiarazione di lavorare con l’oggetto. Ho provato if My_Object is not nothing e anche if not My_Object is nothing. Può essere semplicemente una sintassi cosa che io non riesco a capire, ma io non ho tempo da perdere, così ho fatto un po ‘ di soluzione come questa:

    if My_Object is Nothing Then
        'do nothing
    Else
        'Do something
    End if
    • La vostra esperienza contribuito a informare me. Avevo provato a utilizzare If My_Object Is Not Nothing anche, ma le altre forma sembra sulla strada giusta. Hai provato If Not (My_Object is Nothing) Then ' Do something?

Lascia un commento