Re: How do I write a Visio macro operating on a selection?

Tech-Archive recommends: Speed Up your PC by fixing your registry



Hello John,

"...Just turn on record and work through your
steps below, click stop and then review the code it produces...":
No, that's not fully true. That is what I tried first to do the line-weight
setting to 0.35mm. The code produced by the MacroRecorder looked _completely
different_ from your brilliant answer.

/Staffan Cronstrom

"John Goldsmith" wrote:

Hello Staffan,

John's right, you should definitely have a go with the macro recorder (see
the link in my original post). Just turn on record and work through your
steps below, click stop and then review the code it produces. You then just
need to translate this into the selection reference as per my previous code.

Regarding your last question you could get the current line weight, assign
it to a variable, divide by two to give you 50%, and then set the shape's
line weight again using the variable. Something like this:

Dim shp As Shape
Dim dblMyLineWeight As Double

dblMyLineWeight = shp.CellsU("LineWeight").ResultIU / 2
shp.CellsU("LineWeight").FormulaU = dblMyLineWeight

Best regards

John


John Goldsmith
www.visualSignals.typepad.co.uk
www.visualSignals.co.uk

"Staffan Cronstrom" <Staffan Cronstrom@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in
message news:3AE1EF56-0BF6-437D-A994-5892DBB797F2@xxxxxxxxxxxxxxxx
Once again, thank you.
Maybe you could now tell me how to get the position of a shape (rectangle,
etc.)
What I want to do is the following:

Assume I have two, say, rectangles, both filled; call them A and B. A is
partially hidden by B.
I want to
* create a copy of A
* change the copy's line pattern to "9" ("fine dahsed")
* change the copy's line weight to "0.25mm" (A has "0.35mm")
* remove the copy's fill, i.e. set the pattern to "00"
* move the copy to front
* center the copy over A

The result of all this would be that the part of A hidden by B is shown
dashed.

How do I do arithmetics on line weights, positions, etc? I.e. assume e.g.
that I want to re-scale a shape's line weight by 0.5. I.e. to 0.25mm if it
was 0.5mm from the beginning, to 0.175mm if it was 0.35mm from the
beginning.
How do I do that?

Best regards

Staffan Cronstrom

"John Goldsmith" wrote:

Hello Staffan,

You can get hold of the selected shapes as a property of the ActiveWindow
object. Once you have that it's just a case of running through them and
making the changes you're after:

Public Sub ChangeLineFormat()
Dim shp As Shape
Dim sel As Selection
Dim i As Integer

'Set the initial selection
Set sel = ActiveWindow.Selection

'Run through the items in the selection
For i = 1 To sel.Count
Set shp = sel(i)
With shp
.CellsU("LineWeight").FormulaU = "0.35 mm"
.CellsU("LinePattern").FormulaU = "9"
End With
Next i
End Sub

If you're interested in more information on looping code then you might
find
this useful:

http://visualsignals.typepad.co.uk/vislog/2007/11/looping-through.html

Also, have you tried the macro recorder? If you want more on this have a
look at this post:

http://msmvps.com/blogs/visio/archive/2006/03/03/85364.aspx

Best regards

John


John Goldsmith
www.visualSignals.typepad.co.uk
www.visualSignals.co.uk

"Staffan Cronstrom" <StaffanCronstrom@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in
message news:C53D82E3-8931-439B-801A-9463C8F56163@xxxxxxxxxxxxxxxx
I want to write (create) a macro in VISIO that operates on selected
objects.
What I mean is the following:
I want to create a macro that e.g.
* sets the line weight to 0.35mm
* sets the line pattern "fine dashed", pattern n:o 9 in Format/Line
on a shape, or some shapes, I select. I.e.,
* first I would select the shape or shapes
* then I would call the macro
I want all the selected shapes to, after I've done this, have taken on
the
line weight of 0.35mm and the line pattern n:o 9.






.



Relevant Pages

  • Re: How do I write a Visio macro operating on a selection?
    ... you should definitely have a go with the macro recorder (see ... need to translate this into the selection reference as per my previous code. ... Regarding your last question you could get the current line weight, ... Dim dblMyLineWeight As Double ...
    (microsoft.public.visio.developer)
  • Re: How to replace a string of characters with the count of the ch
    ... Dim AlphabetCountString As String ... I prefer to work with Range objects instead of the Selection whenever ... .MatchWildcards = False ...
    (microsoft.public.word.vba.general)
  • Ws Selection Change Event Code, Copy a Cell problem
    ... The sub below is doing what I want, re: selection. ... Dim RngType As String ... If ChgRow> PaEndRow Then ... Cells(ChgRow, SVrSubscrCol + COfs).Select ...
    (microsoft.public.excel.programming)
  • RE: Emailing With Attachments
    ... Presenting the file list in a combo box for selection ... Dim fso As New FileSystemObject ... 'Try to extract JobNum in the File name ... 'Set objOutlookRecip = .Recipients.Add ...
    (microsoft.public.access.modulesdaovba)
  • Code not woring - please help!!!
    ... Dim ColumnTable ... .LineStyle = xlContinuous ... .Weight = xlThin ...
    (microsoft.public.excel.programming)