Newsgroup: it.comp.appl.access
Titolo: inserimento linee di codice da vba sono vicino alla meta

ragazzi sono riuscito a scrivere il codice nei moduli delle maschere 
direttamente da vba ho solo un piccolo problema in alcune maschere non 
mi scrive la riga dove io ho detto potete aiutarmi: questa sotto è la 
procedura:
Set mdl = Forms(NOME).Module
    T = mdl.CountOfLines
     For n = 1 To T
         If mdl.ProcOfLine(n, 0) = "Form_Open" Then
             mdl.InsertLines n + 2, "Call centraMask(Me)"
             risposta = 1
             Exit For
         End If
     Next
come vedete quando trova la stringa scrive a 2 righe successive, ma non 
lo fa con tutte, la scrittura avviene sopra la stringa trovata. Se 
interessa mando la funzione completa
grazie

 ha scritto nel messaggio 
news:M16Mj.6963$o06....@tornado.fastwebnet.it...

Potevi continuare il tread già aperto.
Mi pare che le maschere devono essere aperte perchè funzioni.
Ciao, Carlo 

 ha scritto nel messaggio 
news:M16Mj.6963$o06....@tornado.fastwebnet.it...

Se esegui del codice che ti apre la maschera prima di scrivere nel modulo, 
accertati di mettere un doevents subito dopo il comando di apertura maschera 
e prima del codice per scrivere...infatti l'esecuzione di codice della 
mschera aperta potrebbe impedire la scrittura sul modulo.
Comunque posta pure tutto il codice.
Ciao, Carlo 

Carlo Costarella ha scritto:

E' vero scusa. La procedura che  ho fatto prevede il richiamo delle 
forms tramite recorset apre la form esgue l'inserimento salva e chiude 
la form e poi passa alla successiva è rimasto questo problema che mi 
scrive la riga prima della stringa invece che 2 righe dopo come io ho messo

Carlo Costarella ha scritto:

Public Function modificaform()
Dim db As Database
Dim temp As Recordset
Dim mdl As Module
Dim Tot, x, lNgr As Long
)
Set db = currentdb
Set temp = db.OpenRecordset("query11", DB_OPEN_DYNASET)' la 
query estrae 					'i nomi delle form da MSysObjects
Tot = 0
If temp.RecordCount > 0 Then
      temp.MoveLast
      Tot = temp.RecordCount
temp.MoveFirst
End If
For x = 1 To Tot
risposta = 0
Select Case temp!Type
     Case -32768
      DoCmd.OpenForm (temp!NOME), acDesign
    ' Forms(temp!NOME).Caption = "nome etichetta maschera" 
'qui si può 						'modificare le proprietà della maschera
Set mdl = Forms(temp!NOME).Module
     ' Aggiunge routine evento.
    T = mdl.CountOfLines ' riporta il numero di righe nel modulo
     For n = 1 To T
         If mdl.ProcOfLine(n, 0) = "Form_Open" Then  ' cerca la 
funzione 				'n=riga, 0 definisce il tipo= sub o function
             mdl.InsertLines n + 2, "Call centraMask(Me)" qui 
scrive alla 						'riga+2
             risposta = 1
             Exit For
         End If
     Next
End Select
  On Error GoTo Err_nome
    Select Case temp!Type
    Case -32768
     If risposta = 1 Then
         DoCmd.Save acForm, temp!NOME
     End If
         DoCmd.Close acForm, temp!NOME
     End Select
Err_nome:
     temp.MoveNext
Next
temp.Close
End Function

 ha scritto nel messaggio 
news:0R6Mj.7008$o06....@tornado.fastwebnet.it...

Puoi sicuramente migliorare il codice...per esempio al posto di
For n = 1 To T
         If mdl.ProcOfLine(n, 0) = "Form_Open" Then  ' cerca la
 funzione 'n=riga, 0 definisce il tipo= sub o function
             mdl.InsertLines n + 2, "Call centraMask(Me)" qui
 scrive alla 'riga+2
             risposta = 1
             Exit For
         End If
     Next
Puoi scrivere semplicemente:
mdl.InsertLines (mdl.ProcStartLine("Form_Open", vbext_pk_Proc) + 1), "Call 
centraMask(Me)"
ricorda di aggiungere nelle dichiarazioni:
dim vbext_pk_Proc
Se hai notato ho messo + 1 al posto di + 2 perchè così scrive immediatamente 
sotto la sub.
Ultima accortezza. Accertati che tra una routine e l'altra, almeno tra l'end 
sub della routine precedente e la routine
Private Sub Form_Open(Cancel As Integer)
non ci siano spazi vuoti...questa è la causa del perchè a volte scrive prima 
della routine. In verità sarebbe meglio che tra una routine e l'altra non ci 
siano spazi vuoti.
Infine permettimi una considerazione: non avresti fatto prima con un bel 
copia e incolla dall'elenco delle maschere?
Ciao, Carlo


Ti ringrazio dell'aiuto, E' vero ho perso del tempo ma credimi così ne 
risparmio molto di più anche perchè le foms e i report sono tanti grazie 
ancora faro le modifiche e ti farò sapere del risultato  e poi una 
considerazione così è più professionale non credi aiuto moltissimo nello 
studio
Ciao
  Gianfry

  Gianfry
Sě cosě č molto piů professionale...continua cosě.
Ciao, Carlo

 
purtroppo sembra ci siano problemi di scrittura la riga di codice che 
deve essere scritta viene messa sopra la riga della function anche se 
non ci sono spazi vuoti, infatti la riga di codice in queso caso va a 
finire nella routine precedente come posso fare per far scrivere la riga 
nella riga N che io voglio.Mi aiutate????????


Tra le sub o le function non devono esserci spazi, almeno non tra le routine 
precedenti quella che ti interessa.
Ciao, Carlo 

 riga N che io voglio.Mi aiutate????????
Spiego meglio la risposta di prima.
Se all'interno della routine in cui vuoi scrivere qualcosa ci sono degli 
spazi, questo NON crea problema.
Importante è che gli spazi non siano presenti tra le routine precedenti 
quella che ti interessa.
Esempio pratico di come va bene:
Option Compare Database
Option Explicit
---------------------------------------------------------
Private Sub Comando0_Click()
End Sub
---------------------------------------------------------
Private Sub Form_Load()
End Sub
---------------------------------------------------------
Private Sub Form_Open(Cancel As Integer)
End Sub
Esempio di come NON va bene:
Option Compare Database
Option Explicit
---------------------------------------------------------
Private Sub Comando0_Click()
End Sub
---------------------------------------------------------
Private Sub Form_Load()
End Sub
---------------------------------------------------------
Private Sub Form_Open(Cancel As Integer)
End Sub
Ciao, Carlo