Newsgroup: it.comp.lang.visual-basic
Titolo: Fermare esecuzione di una macro dalla stessa...

Allora mi ritrovo un modulo principale (metto solo l'essenziale)
in una macro di un foglio di excel.
Sub MacroContabilita()
	Dim Stoppa As boolean
	...
	...
	FrmEsecuzione.Show
	Do While Stoppa <> True
	    DoEvents       	'lascia in esecuzione la macro
	Loop
End Sub
E nel form FrmEsecuzione un bottone con codice:
Private Sub CmdEsFerma_Click()
	--->msgbox....
	if Risposta = vbYes Then
		Stoppa = True
		FrmEsecuzione.Hide
	EndIf
EndSub
Il mio problema è... fermare la macro... :(
L'idea della variabile booleana è giusta o no?
Ehm... come accidenti faccio a fermare la macro
dall'interno della stessa? Clicco sul bottone
del form... poi?
Mi sa tanto che ho problemi con la dichiarazione
delle variabili dall'interno del modulo e farla
vedere anche al form....... o forse no?
ah... un'altra cosa, come faccio a levare al form
il pulsante di chiusura? in vb c'è... in VBA cambiano
molte cosuccie... :PP
Grazie dell'aiuto,
	MiKo.
P.S. EVVVAIIIIII Che con questo finisco il programma di contabilità,
     ho già fatto un pò di test su una buona parte,
     vediamo nel complesso cosa combinerà...
     hihi... al massimo mette qualche miliardo in più ;)
--
-----------------------------------------------------------------
                    ICQ# 21320352
 
http://web.tiscalinet.it/mikoflyzone/
  Tra amore e amicizia c'è la distanza di un bacio
-----------------------------------------------------------------
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 molte cosuccie... :PP
passo...
Ciao

      hihi... al massimo mette qualche miliardo in più ;)
Di euro, magari. :-)
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 --------


Come non detto, lascia stare l'esempietto di changeselection,
mi ero dimenticato che l'avevo già chiesto in un
precedente post... tutto ok.
C'ho la testa fra le nuvole.. non di microzozz però ;)
MiKo


 faccio prima a metterlo nella firma! ;)
:)


 Esame di maturita`?... E` gia` ora?
beh... sono all'inizio della quinta e siccome è uscita informatica,
vorrei anche fare bella figura, poi visto che fino ad ora non ho
mai sentito nessuno che abbia fatto una tesina con un programma
di contabilità... ;)
Ah... se non l'ho detto, "sono" ragioniere programmatore...
Ho capito perchè non mi funzionava ChangeSelection, io lo mettevo
nel modulo, invece mettendolo nel codice del foglio funziona...
ma se volessi metterlo nel modulo? C'ho provato ma senza successo...
per il resto va tutto a meraviglia, a parte un piccolo bug già
corretto ;)
P.S: ma tu per ogni programma che costruisci, crei anche l'algoritmo?
La mia proff di laboratorio continua ad insistere che bisogna farlo,
io sinceramente non l'ho mai fatto eppure non ho mai errori "gravi" ;)
Ciao,
 MikO
-----------------------------------------------------------------
                    ICQ# 21320352
 
http://web.tiscalinet.it/mikoflyzone/
  Tra amore e amicizia c'è la distanza di un bacio
-----------------------------------------------------------------


 La mia proff di laboratorio continua ad insistere che bisogna farlo, io
sinceramente non l'ho mai fatto eppure non ho mai errori "gravi" ;)
Non credo che la tua prof si esprima cosi`. E per quel che riguarda la
parola algoritmo vedi se riesci a trovare un recente thread sull'argomento.
Vi troverai sicuramente molti spunti di riflessione di importanza secondo me
capitale.
Comunque la mia risposta alla tua domanda sottintesa e`: dipende, ma in
linea di massima si`.



Peraltro oggi la stesura in forma leggibile degli algoritmi (che una volta
si faceva tramite flow chart, dato che il programma aveva un solo flusso)
avviene tramite use case (in versione grafica e/o testo) che specificano,
per tutti i possibili flussi alternativi, il comportamento del programma...
Cio' dipende dal fatto che l'interfaccia grafica ha aumentato il numero di
modi in cui l'utente puo' gestire il programma, rendendo cosi' molto piu'
complessa la gestione del flusso.
Questa parte della stesura del programma si chiama analisi, e senza una
buona analisi puoi stare tranquillo che produrrai sempre e solo ammassi di
spaghetti tanto piu' intricati quanto piu' complesso e' il programma (da cui
il consiglio della tua prof di studiare sempre bene l'algoritmo alla base
del programma).
Per programmi sotto alle cinquecento-mille righe di codice l'analisi puo'
essere sommaria e la sua stesura puo' avvenire subito prima della stesura
del programma (mentre scrivi i prototipi delle funzioni nella finestra del
codice aggiungi dei commenti che spieghino cosa faranno).
Per programmi di medie e grandi dimensioni, una buona analisi puo'
richiedere anche piu' tempo della stesura del programma stesso; in tal caso
la stesura del programma consiste normalmente nella semplice traduzione del
testo dell'analisi da italiano corrente a codice compilabile (che cmq non e'
esente da problemi).
Se l'analisi e' fatta bene il programmatore non potra' porsi nessuna domanda
la cui risposta non sia contenuta nell'analisi (optimum, in realta' non ci
si arriva mai), inoltre il risultato della programmazione sara' attinente ai
desideri del cliente (anche questo e' l'optimum, non ci si arriva mai);
infine una buona analisi semplifica la stesura dei casi e delle catene di
test, che possono essere scritte semplicemente trasformando ogni paragrafo
dell'analisi in un caso di test (e questo continua ad essere l'optimum e si
continua a non arrivarci mai :)).
Ciaotutti,
Alessandro

 quel che piu` conta, perche' non ha senso parlarne.
Ok... se lo dici tu...
hihi... scusa per le cretinate che sto dicendo e di cui non mi
rendo neanche conto ;)
Ehm... ora però c'è un problemino serio... quando gli faccio fare
un ciclo su tutte le celle del Range ("A1:C25") mi dà:
"errore: memoria esaurita"...
sig... questa non me l'aspettavo....
quando poi mi sono visto la guida che mi dice dei 74kb.... beh...
pensavo fosse un problema relativo a MS-DOS... invece...
porca miseriaccia, ho 8 variabili impostate su "public" e 5 come
"private"... ogni routine al massimo contiene 80 righe...
mi sai dire dove sta il problema?
le variabili mi servono così, le routine non riesco a rimpicciolirle...
forse potrei fare una funzione per la ricerca; lo devo fare?
MiKo



Mah, veramente non si direbbe...


 Alessandro


 forse potrei fare una funzione per la ricerca; lo devo fare?
--


 Bisognerebbe poterlo vedere, questo ciclo...
l'avevo già inserito in un post precedente, ma
a quanto pare non l'ha notato nessuno...
lo riposto, sperando che venga notato.
If Sheets("Giorn.").Columns = 2 Then
      Cells(RigaCorrente - 1, 6).FormulaR1C1 = _
      "=INDICE(Dati;CONFRONTA(Codice;Dati;0);2)"
"Codice" è impostato come range alla cella
corrente e "Dati" sempre con range è l'intervallo
nel secondo foglio contenente i record.
RigaCorrente, ovviamente è il numero di riga (integer)
Già controllati nella finestra di debug e sono
corretti...
però si inkioda cmq.... con la solita riga gialla
sulla if "memoria esaurita"... che devo fare???
Ah... buona anno a tutti!!!
Me n'erò andato in vacanza :)


 però si inkioda cmq.... con la solita riga gialla sulla if "memoria
esaurita"... che devo fare???
Poco, direi, se e` tutto a posto; potresti verificare:
. se il blocco avviene sistematicamente con assoluta certezza nella stessa
"posizione" (stessi dati, stessa riga, o altro);
. che non ci siano "risorse" di qualsiasi natura che vengono occupate in
maniera crescente;
. se il blocco interviene anche elaborando piccoli blocchi intervallati da
pause, eventualmente con doevents;
...
Quante sono le celle in questione?
Aspettaspettaspetta... Vedo che immetti una formula. Quindi ogni formula un
ricalcolo, giusto? Cosa avverrebbe se l'operazione la facessi a manina? Che
per un po' avresti pazienza di aspettare che il foglio termini il ricalcolo
prima di permetterti di immettere una nuova formula, poi ti stuferesti e
passeresti al ricalcolo manuale, giusto? Vedo poi che la formula si spazzola
con CONFRONTA un'area "Dati" che chissa` quanto e` grande... E questo ad
ogni immissione... Azz!... Disattiva subito il ricalcolo. Che basti questo?


 Azz!... Disattiva subito il ricalcolo. Che basti questo?
Ehm... come faccio a disattivare il ricalcolo?
O meglio... cosa intendi per disattivare?


 O meglio... cosa intendi per disattivare?
Attiva il registratore di macro, poi:
    Strumenti
    > Opzioni
      Calcolo
      o Manuale
      [_] Ricalcola prima di salvare
      Ok
    Strumenti
    > Opzioni
      Calcolo
      o Automatico
      Ok
interrompi la registrazione ed ispeziona il codice cosi` ottenuto:
Option Explicit
Sub Macro1()
'
' Macro1 Macro
' Macro registrata il 04/01/2001 da Maurizio Borrelli
'
'
    With Application
        .Calculation = xlManual
        .MaxChange = 0.001
        .CalculateBeforeSave = False
    End With
    ActiveWorkbook.PrecisionAsDisplayed = False
    With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
    End With
    ActiveWorkbook.PrecisionAsDisplayed = False
End Sub
Le parti che ti interessano sono:
    With Application
        .Calculation = xlManual
        .CalculateBeforeSave = False
    End With
da scrivere nel tuo codice prima dell'inizio del ciclo di immissione
formule, e:
    With Application
        .Calculation = xlAutomatic
    End With
da scrivere dopo la fine di tale ciclo.
Poi facci sapere se era quello il problema.
Un altro modo forse piu` sbrigativo ed efficace potrebbe essere quello di
scrivere una sola formula e ricopiarla in basso per quante celle occorre,
proprio come faresti (come dovresti fare;-) lavorando con Excel. Prova a
registrare una macro mentre usi questo metodo.


 con Excel. Prova a registrare una macro mentre usi questo metodo.
arg! che imbecille! c'hai ragione!!! :PPP
con dei riferimenti... com'è che si chiamano assoluti?
...potrei farlo... ma perchè non ragiono 2 volte su quello chefaccio :D
e dire che sono ragioniere!! :P
grazie!


 e dire che sono ragioniere!! :P
Mi permetterei le battutacce di rito solo se fossi ragioniere anch'io. Ma,
onestamente, m'e` costato molto trattenermi. >:->


 anch'io. Ma, onestamente, m'e` costato molto trattenermi. >:->
x quanto mi riguarda puoi dire tutto quello che vuoi :))
piuttosto ho corretto l'errore riguardo la memoria...
...meglio che non ti dico cos'era...
mi viene da spararmi a me x il tempo che c'ho perso sopra...
sopratutto visto che era una stupidata da correggere in 3 secondi :P
-----------------------------------------------------------------
                    ICQ# 21320352
 
http://web.tiscalinet.it/mikoflyzone/
  Tra amore e amicizia c'č la distanza di un bacio


 mi viene da spararmi a me x il tempo che c'ho perso sopra... sopratutto
visto che era una stupidata da correggere in 3 secondi :P
Ca`pita. Se ti puo` consolare sono anni e anni che sono un colabrodo e non
so piu` dove spararmi.
