| 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 Function
Propongo di associare queste due routine a una combinazione tasti tipo Maiusc+Ctrl+C e Maiusc+Ctrl+VNon ho fatto gestione errori perche' si presume che sia un tool per programmatori. |