Forms |
3.11 Copiare controlli da una form all'altra. |
Lorenzo Coronati |
(D) Come posso copiare un controllo da una form all'altra mantenendo anche l'eventuale routine evento? (R) Si tratta di due routine che servono per fare copia-incolla di controlli da una form all'altra portandosi dietro il codice delle routine evento. Bello, eh? :-) Public ControlToIntelliCopy As Control Public CodeToIntelliCopy As String Public Function IntelliCopy() 'questa routine copia un controllo da una form con tutto il codice 'associato, per incollare il tutto in un'altra form con IntelliPaste On Error GoTo annulla Set ControlToIntelliCopy = Screen.ActiveControl CodeToIntelliCopy = "" Dim n As String n = "Sub " & ControlToIntelliCopy.name & "_" Dim f As Form Set f = Screen.ActiveForm Dim m As Module Set m = f.Module Dim ir As Long, ic As Long, fr As Long, fc As Long, rigai As Long, rigaf As Long Do While m.Find(n, ir, ic, fr, fc) rigai = ir: fr = 0: fc = 0 If m.Find("End Sub", ir, ic, fr, fc) Then rigaf = fr CodeToIntelliCopy = CodeToIntelliCopy & m.Lines(rigai, Abs(rigaf - rigai) + 1) & vbCrLf fr = 0: fc = 0 Loop Exit Function annulla: MsgBox "Si e' verificato un problema." & vbCrLf & "Codice di errore " & Err.Number, vbCritical + vbOKOnly, "IntelliCopy" End Function Public Function IntelliPaste() 'questa routine incolla nella form attiva un controllo copiato 'con IntelliCopy, con tutto il codice associato On Error Resume Next On Error Resume Next Dim f As Form Set f = Screen.ActiveForm Dim c As Control Set c = CreateControl(f.name, ControlToIntelliCopy.ControlType) Dim p As Long For p = 0 To ControlToIntelliCopy.Properties.Count - 1 c.Properties(p) = ControlToIntelliCopy.Properties(p) Next p Dim m As Module Set m = f.Module m.InsertLines m.CountOfLines + 1, CodeToIntelliCopy End FunctionPropongo di associare queste due routine a una combinazione tasti tipo Maiusc+Ctrl+C e Maiusc+Ctrl+V Non ho fatto gestione errori perche' si presume che sia un tool per programmatori. |