› Sviluppare funzionalita su Microsoft Office con VBA › Errore Run time 9
-
AutoreArticoli
-
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.credo di averlo messo nella sezione sbagliata... lo metto sotto excel
la sezione è corretta, ma dovresti spiegare come testare il codice, il file che hai allegato non è facilmente comprensibile
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.
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
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
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).CalculateProva 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.
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 )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
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 )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")...
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
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
-
AutoreArticoli