RE:Arrastrar controles sobre un formulario
Te pongo un ejemplo:
Option Explicit
Dim iniX As Long, iniY As Long, ctrlSource As Control
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
capturaArrastre Text1, x, y
End Sub
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
sueltaArrastre x, y
End Sub
Private Sub capturaArrastre(ByRef ctrl As Control, ByVal x As Long, ByVal y As Long)
iniX = x
iniY = y
Set ctrlSource = Text1
End Sub
Private Sub sueltaArrastre(ByVal x As Long, ByVal y As Long)
If Not ctrlSource Is Nothing Then
ctrlSource.Move ctrlSource.Left + x - iniX, ctrlSource.Top + y - iniY
Set ctrlSource = Nothing
End If
End Sub
En este ejemplo sólo se mueve un textBox llamado Text1, pero se usa
igual con cualquier control siempre que en sus eventos llames a las funciones capturaArrastre y sueltaArrastre de forma adecuada.