Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di thor92
    Registrato dal
    Sep 2008
    Messaggi
    89

    avviso nel caso alcuni campi fossero vuoti

    ciao a tutti !

    linguaggio: VBA
    applicazione: excel

    a causa di alcuni colleghi che non hanno molta voglia mi trovo sempre delle tabelle (che loro devono riempire) mezze vuote... quindi vorrei fare una macro in vba che nel caso in cui alcune celle fossero vuote mi compare un'avviso (guarda che ti sei dimenticato di inserire il valore !!) nel momento in cui premo un bottone in excel (lo chiamerò invio... tanto ci capiscono poco XD)...

    il problema è che su google ho trovato pochino... solo questo codice di cui ho capito poco/nulla...

    codice:
    Public Sub m() 
    
    
    On Error GoTo RigaErrore 
    
    
        'dichiaro le variabili 
        Dim wk As Workbook 
        Dim sh As Worksheet 
        Dim rng As Range 
        Dim c As Range 
    
    
        'metto un riferimento al worksbook 
        'che contiene il codice 
        Set wk = ThisWorkbook 
    
    
        'metto un riferimento al Foglio1 
        With wk 
            Set sh = .Worksheets("Foglio1") 
        End With 
    
    
        With sh 
            'metto un riferimento al Range 
            Set rng = .Range( _ 
                .Range("A4").Value _ 
                & ":" & _ 
                .Range("C4").Value) 
            'ciclo il Range rng 
            For Each c In rng 
                If Len(c.Value) = 0 Then 
                    MsgBox c.Address & " è vuota." 
                End If 
            Next 
        End With 
    
    
    RigaChiusura: 
        'Set a Nothing delle variabili oggetto 
        Set c = Nothing 
        Set rng = Nothing 
        Set sh = Nothing 
        Set wk = Nothing 
        Exit Sub 
    
    
    RigaErrore: 
        MsgBox Err.Number & vbNewLine _ 
        & Err.Description & vbNewLine _ 
        & "Inserire valori in A4 e C4" 
        Resume RigaChiusura 
    
    
    End Sub
    usa for each... a me non interessa sinceramente che sia pulito o corto... basta che funzioni... faccio anche 80 if per ogni cella che mi serve...
    il problema è che le celle da considerare sono parecchie.. una decina ogni parina per 50 pagine.

    il fatto è... come faccio a far riconoscere in vba quando una cela è vuota?
    grazie mille a tutti in anticipo !!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ammesso che io abbia 3 fogli e debba controllare le celle A1,A2,A3 di ciascun foglio:

    codice:
    For Each C In Application.Worksheets
      For Each R In C.Range("A1:A3")
       If R.Value = 0 Then
       MsgBox ("Attenzione")
       End If
    Next R
    Next C
    Qualcosa del genere?
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it L'avatar di thor92
    Registrato dal
    Sep 2008
    Messaggi
    89
    non ho capito cosa sono R e C ... sinceramente non ho mai usato i cicli for each...

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    C sono i singoli Worksheet e R sono i singoli range nel worksheet C.
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it L'avatar di thor92
    Registrato dal
    Sep 2008
    Messaggi
    89
    posso fare così:


    codice:
    Sub controllo()
    totale = Range("F4").Value
    if totale.value= 0 then
    MsgBox ("Attenzione")
    end if
    se volessi fare un controllo per ogni cella... invece se voglio fare una cosa più generale faccio come hai scritto tu... dopo provo e poi vedo se funziona ...

  6. #6
    Utente di HTML.it L'avatar di thor92
    Registrato dal
    Sep 2008
    Messaggi
    89
    PERFETTO !!!!
    alla fine ho risolto così... vi scrivo il codice che faccio prima...
    codice:
    Sub commandbutton1_Click()
    ti = Range("C8").Value
    d8 = Range("D8").Value
    f8 = Range("F8").Value
    f9 = Range("F9").Value
    h8 = Range("H8").Value
    h9 = Range("H9").Value
    k8 = Range("K8").Value
    l8 = Range("L8").Value
    
    
    If ti = Empty Then
        MsgBox ("hai dimenticato il campo - tipo!")
    End If
    If d8 = Empty Then
        MsgBox ("hai dimenticato il campo - pilota!")
    End If
    If f8 = Empty Then
        MsgBox ("hai dimenticato il campo - orario accensione!")
    End If
    If f9 = Empty Then
        MsgBox ("hai dimenticato il campo - orario spegnimento!")
    End If
    If h8 = Empty Then
        MsgBox ("hai dimenticato il campo - orario decollo!")
    End If
    If h9 = Empty Then
        MsgBox ("hai dimenticato il campo - orario spegnimento!")
    End If
    If k8 = Empty Then
        MsgBox ("hai dimenticato il campo - decolli!")
    End If
    If l8 = Empty Then
        MsgBox ("hai dimenticato il campo - atterraggi!")
    End If
    End Sub
    basta che copio il bottone in tutte le 50 pagine e la cosa dovrebbe funzionare senza particolari problemi no?

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Seguire invece i consigli che ti vengono detti, no?
    Range() è un range di celle non una cella, per quello c'è Cells(x,y).
    Sbagliare è umano, perseverare è diabolico.

  8. #8
    Utente di HTML.it L'avatar di thor92
    Registrato dal
    Sep 2008
    Messaggi
    89
    Originariamente inviato da Pirelli72
    Seguire invece i consigli che ti vengono detti, no?
    sinceramente ci ho provato ma non riuscivo a combinare nulla...

    proverò a fare così magari:

    codice:
    sub commandbutton1_onclick()
      For Each C In Application.Worksheets
      For Each R In C.Range("F10:F11")
       If R.Value = empty Then
       MsgBox ("Attenzione")
       End If
    Next R
    Next C
    end sub
    il problema ora è che deve esguirsi una parte di codice (posso fare varie macro e attivarle quando mi servono) solo quando il primo dei tot campi di una riga viene riempito... sennò mi da gli errori anche quando la riga non è stata intenzionalmente riempita magari perchè il volo non è stato esguito...
    ci sono 5 righe... 5 possibili voli... se faccio solo 3 voli il programma mi darà comunque errore per gli ultimi due...

    ho provato a testare questa funzione
    codice:
    DoCmd.RunMacro
    ma con scarsi risultati... sai mica come funziona?

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Originariamente inviato da thor92
    sinceramente ci ho provato ma non riuscivo a combinare nulla...
    proverò a fare così magari:
    E' comprensibile, ma almeno studiaci sopra, se cerchi sempre la soluzione più semplice non imparerai mai niente.
    Sbagliare è umano, perseverare è diabolico.

  10. #10
    Utente di HTML.it L'avatar di thor92
    Registrato dal
    Sep 2008
    Messaggi
    89
    ho modificato il messaggio di sopra... ho combinato un casino e mi ha inviato il post prima che avessi finito di scriverlo... XD

    comunque ci ho provato a usare il for each... solo che mi fa una specie di loop e continua a darmi errore .. errore .. errore .. errore .. errore .... il codice usato è quello che c'è nel famoso post che ho modificato di prima...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.