Login Registrati
Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
  • Autore
    Articoli
  • #5880 Risposta

    marco_budin
    Partecipante

      ciao a tutti,

      ho questo problema:

      Private Sub Worksheet_Calculate()
      n2 = Sheets("DataBase").Range("dh27").Value  <----- qui mi da l'errore!
      If Sheets("DataBase").Range("dh28").Value <> n2 Then
        If n2 = 1 Or (n2 Mod 3) = 1 Then
          Sheets("DataBase").Range("dh28").Value = n2
          Sheets("FAX Codmann N").PrintOut Copies:=1, Collate:=True, _
              IgnorePrintAreas:=False
        End If
      End If

      Ho modifica per comodità la e ho messo il dato da cercare su foglio "DataBase", un altro foglio. Prima invece andava a cercarlo direttamente sul foglio (Range("dh27")). i comandi funzionano tutti, poi alla fine quando schiaccio il tasto in alto "Chiudi/nuovo" esce questo debug (error run time 9). i due codici vanno in conflitto... o cè qualcosa che non capisco. Schiacciando quel tasto... apre un altro file... salva dei dati ecc.. i collegamenti sono tutti corretti perché prima funzionavano. ho solo cambiato il fatto che adesso va a prendere il dato non più dal foglio stesso ma da un altro foglio.

      in attesa di una vostra preziosissima risposta,

      vi auguro una buona giornata

      Allegati:
      You must be logged in to view attached files.
      #5882 Risposta

      marco_budin
      Partecipante

        credo di averlo messo nella sezione sbagliata... lo metto sotto excel

        #5885 Risposta
        patel
        patel
        Moderatore
          5 pts

          la sezione è corretta, ma dovresti spiegare come testare il codice, il file che hai allegato non è facilmente comprensibile

          #5886 Risposta

          marco_budin
          Partecipante

            ciao Patel!

            allora nella scheda "intervento spinale" in alto a destra si trova un tasto "chiudi/ nuovo".  Schiacciando quel tasto, apre un secondo file dove salva dei dati, e lo chiude, poi una volta fatto quello, chiude il file Prova in automatico senza salvare niente. Da quando ho fatto la modifica Worksheet_Calculate(), quando schiaccio quel tasto, viene fuori il debug: error run time 9.

             

            #5887 Risposta
            Marius44
            Marius44
            Moderatore
              4 pts

              Ciao Marco

              Innanzi tutto COMPLIMENTI per l'ottimo lavoro.

              Non credo sia possibile darti una risposta esaustiva. Posso solo dirti che il valore della cella indicata (Sheets("DataBase").Range("dh27").Value) sembra uguale a 0 (zero), cosa però che non dovrebbe dare errore (a proposito, non vedo dichiarazioni di variabili nè Option Explicit che avrebbe potuto dare una spiegazione dell'errore segnalato).

              Da una prova che ho fatto (clic sul pulsante Chiudi/nuovo) mi viene fuori il messaggio che i dati verranno cancellati e, dopo un bel po', questo messaggio: "Impossibile trovare '\\eoc.net\Homes\Etokenke\ockio02\My Documents\Sala Angio Report Pazienti\Statistica\Materiale REF-LOT.xlsm'. Controllare l'ortografia o provare con un percorso diverso." Cliccando su OK del messaggio chiude il file.

              Altro non saprei dirti. Ribadisco i complimenti ma è troppo complesso per un profano capire come girano le varie macro.

              Ciao,

              Mario

              #5890 Risposta

              marco_budin
              Partecipante

                ciao Marius.

                grazie mille per la tua risposta e grazie per i complimenti. Si, giusto, il file deve chiudersi senza salvare ed è giusto ti venga fuori il fatto che vuole entrare in un percorso, perché deve salvare dei file.

                il problema è appunto solo il fatto che il debug, venga sul (Sheets(“DataBase”).Range(“dh27”).Value. è possibile che non posso mettere un riferimento su un altra pagina? il Worksheet_Calculate() permette solo di mettere riferimenti sul foglio stesso?

                 

                saluti e a presto

                Marco

                #5892 Risposta
                Marius44
                Marius44
                Moderatore
                  4 pts

                  Ciao

                  Si, se non ricordo male il Metodo Calculate esegue il ricalcolo specifico (come da esempio della Guida)

                  Per eseguire calcoli in                                               Esempio
                  Tutte le cartelle di lavoro aperte                            Application.Calculate (o solo Calculate)
                  Un foglio di lavoro specifico                                   Worksheets(1).Calculate
                  Un intervallo specificato                                          Worksheets(1).Rows(2).Calculate

                  Prova ad assegnare quel valore ad una variabile Globale (che dichiarerai in un modulo standard) e poi fai riferimento alla variabile.

                  Fai sapere. Ciao,

                  Mario

                  PS - Ho notato che vi sono altre righe di codice simile in altre macro. Probabilmente ti darà errore anche li.

                  #5893 Risposta
                  albatros54
                  albatros54
                  Moderatore
                    7 pts

                    Ho visto che nel foglio "Database" ci sono delle formule , che fanno riferimento alla cella C13 del foglio "Fatturazione  Spinale", che pero in questaq cella , oltre ad avere tutta la riga nascosta, non porta nessun valore, sara perche non trova nessun valore è non effettua il calcolo dandoti errore?

                     

                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                    Sempre il mare, uomo libero, amerai!
                    ( Charles Baudelaire )
                    #5894 Risposta

                    marco_budin
                    Partecipante

                      ciao Albatros,

                      si esatto ci sono delle formule che si riferiscono ad altre celle. Perché la cartella di lavoro si usa in questo modo: noi utilizziamo un sistema di lettore ottico, e timbriamo tutti i prodotti che utilizziamo nella casella in basso (ad esempio per l'intervento spinale: cella j97). Quella è una cella con Private Sub Worksheet_Change. Quando si inserisce un codice in quella cella, e si fa enter... partono un sacco di cose in automatico (fatturazione/report/stampe...). Quindi quando si inseriscono li i vari codici... poi automaticamente si riempie anche la cella C13. Per quello all'inizio è vuota.

                      Ma quello non è il problema, perché funziona tutto, almeno funzionava tutto fino a quando al codice ho cambiamo percorso del Calculate. dal foglio stesso (intervento spinale), l'ho portato a database cose range. Volevo raggruppare un po' i tantissimi codici. Ma come detto secondo me, non si può fare il Private Sub Worksheet_Calculate() indicando un altra pagina.

                      Si vi sono altri Calculate... su altre pagine... ma appunto quando sono idirizzate al foglio stesso non danno problemi.. quando si indirizza tutti ad un unico foglio, allora li va in palla.

                      Cmq per vostra curiosità, la password per sbloccare le pagine è niente... basta fare enter e si sblocca. ci sono tante parti nascoste. Ma nel VBA Private Sub Worksheet_Change della pagina descrive un po tutte le funzioni.

                      Ah e devo assolutamente ringraziare voi, perché senza il vostro aiuto non sarei mai riuscito a creare un programmino di questo genere!!! un grandissimo grazie.

                      saluti

                      Marco

                      #5895 Risposta
                      albatros54
                      albatros54
                      Moderatore
                        7 pts

                        Allora , da quello che ho potuto capire, il "Worksheet_Calculate", non va a leggere i dati del foglio"Database", dovresti fare la prova ad inserire  queste righe di codice all'inizio del "Worksheet_Calculate"

                        With ThisWorkbook
                                Set sh1 = .Worksheets("database")
                            End With

                         

                         

                        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                        Sempre il mare, uomo libero, amerai!
                        ( Charles Baudelaire )
                        #5898 Risposta
                        zer0kelvin
                        zer0kelvin
                        Partecipante

                          Ciao a tutti.

                          Domanda banale: si aprono altri files durante l'esecuzione?

                          L'espressione Sheets("DataBase")...

                          fa riferimento ad un foglio nel WorkBook attivo; se il WorkBook attivo in quel momento non è quello che contiene il codice, è normale che dia quell'errore. Se è questo il caso, il problema si risolverebbe aggiungendo il riferimento al WorkBook che contiene il codice :

                          ThisWorkBook.Sheets("DataBase")...

                          #5906 Risposta

                          marco_budin
                          Partecipante

                            ciao zer0kelvin! grazie per la tua risposta! allora in se il codice scritto del Worksheet_Calculate non centra niente con il codice che vado a schiacciare in alto "Chiudi/nuovo". cioè non dovrebbero neanche comunicare sono completamente indipendenti. Il Worksheet_Calculate esegue una stampa quando in J97 appare un numero corrispondente nel foglio di fatturazione... mentra il tasto "chiudi/nuovo" lo esegue alla fine di tutto, quando ho finito e voglio chiudere tutto il programma. però appunto solo quando schiaccio quel tasto chiudi, esce l'errore sul Worksheet_Calculate. come dici tu, magari è il ThisWorkBook.Sheets(“DataBase"); quindi dovrei scriverlo così corretto?

                            Private Sub Worksheet_Calculate()
                            
                            With ThisWorkbook
                            Set sh1 = .Worksheets("database")
                            End With
                            
                            n2 = sh1.Range("dh27").Value  
                            If sh1.Range("dh28").Value <> n2 Then
                              If n2 = 1 Or (n2 Mod 3) = 1 Then
                                sh1.Range("dh28").Value = n2
                                Sheets("FAX Codmann N").PrintOut Copies:=1, Collate:=True, _
                                    IgnorePrintAreas:=False
                              End If
                            End If
                            

                             

                            #5907 Risposta

                            marco_budin
                            Partecipante

                              buongiorno a tutti,

                              allora ho provato il suggerimento di Albatros54 e zer0kelvin adeguato tutti i codici come scritto sopra, sembra funzionare, senza darmi più il problema del debug. Quindi era proprio un problema di ThisWorkBook.Sheets(“DataBase”)…

                              ringrazio tutti per l'aiuto che mi avete dato. Se volete studiare il file che vi ho allegato, vi sono tantissimi codici che magari potranno esservi utili (anche se siete già professionisti!!).

                              vi ringrazio ancora e vi auguro una buona giornata! alla prossima

                              Marco

                            Login Registrati
                            Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
                            Rispondi a: Errore Run time 9
                            Gli allegati sono permessi solo ad utenti REGISTRATI
                            Le tue informazioni:



                            albatros54
                            albatros54 - 442 risposte

                            vecchio frac - 352 risposte

                            patel
                            patel - 257 risposte

                            Marius44
                            Marius44 - 256 risposte

                            Luca73
                            Luca73 - 180 risposte