Por ejemplo:
1.- Declaras dos variables publicas:
Dim DifX as Integer
Dim DifY as Integer
2.- Colocas la propiedad Dragmode del objeto que deseas mover en automático (esto te ahorra el código para el efecto visual del arrastre) por ejemplo para una imagen:
Image1.DragMode = 1 'Esto lo puedes hacer en tiempo de diseño
3.- En el evento mouse move del objeto (en este caso la imagen) colocas:
Private Sub Image1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
DifX = X
DifY = Y
End Sub
4.- En el evento de Drag_Drop del objeto contenedor (en este caso el Formulario) colocas:
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Source.Left = X - DifX
Source.Top = Y - DifY
End Sub
5.- Luego le quitas la propiedad de dragmode automatic para que no puedan seguir moviendo el objeto.
image1.dragmode=0
Por último tienes que tener cuidado cuando muevas objetos como botones, checkbox, option buttons, etc. En general objetos que tengan asociado un evento click, porque al activar la propiedad dragmode a automatic este evento no está disponible (es decir no se activará nunca un click antes que un evento de drag & drop automático). Para solucionar esto podrías:
1.- Activar el arrastre automático de los objetos sólo con el botón derecho del mouse.
2.- Colocar algún botón, menú, etc. Que al invocarlo te coloque todos los objetos en rutina de arrastre automático y otro botón, menú, etc. Que lo desactive.
P.D. ¿ Era lo que esperabas ?