When using a scanned image as the basis for a Visio drawing, you often need to scale the image
and rotate it by a small angle. It takes too much time to perform this operation manually with
the desired accuracy. The "Image Resizer" macro provides automatic resizing of the image.
To use the macro, you must know the exact distance between two points in the picture. Points
must be such that after turning they are on the same horizontal.
Method for applying the macro:
1. Add two Connection Points to the points whose distance is known.
2. Connect the added Connection Points with a line and enter the distance as line text. (For
example, 120 m).
3. Select the line and execute the macro.
The macro will resize the shape with embedded image and rotate it to the desired angle so that
the points lie on the same horizontal.
'======================================================= '============ Resize the Foreign image =============== '======================================================= Sub ImgResizer() Dim shp As Visio.Shape Dim shp2 As Visio.Shape Dim alpha As Double Set shp2 = ActiveWindow.Selection(1) 'Measurement Line ' Get shp as foreign image If shp2.Connects.Count = 2 Then Set shp = shp2.Connects(1).ToSheet If shp.Type <> 4 Then MsgBox "Missing glued image" Exit Sub End If Else MsgBox "Wrong Measurement connection" Exit Sub End If ' Resize image alpha = shp2.Cells("Angle").Result("deg") wV = shp.Cells("Width").Result("m") hV = shp.Cells("Height").Result("m") w = shp2.Cells("Width").Result("m") ' Length should be in Meters (like 120 m) w2 = shp2.Text a = Split(w2, " ") w3 = CLng(a(0)) 'Debug.Print w3 k = w3 / w shp.Cells("Width").Formula = wV * k & " m" shp.Cells("Height").Formula = hV * k & " m" Rotate = -(alpha - shp.Cells("Angle").Result("deg")) shp.Cells("Angle").Formula = Rotate & " deg." End Sub