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+V
Non ho fatto gestione errori perche' si presume che sia un tool per programmatori.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.