VBA

Hallo Zusammen!
Ich arbeite zur Zeit an der Generierung eines Cross-Functional-Charts mit VBA & Visual Studio 2010.
Ich bin mittlerweile soweit, dass ich aus einer Excel-Tabelle meine Pages und die dazugehörigen Swimlanes erstellen kann.
Nun möchte ich Prozess-Shapes in die Swimlanes legen, habe aber noch keine Lösung dazu gefunden.
habe es schon mit der ContainerProperties.AddMember Methode versucht. Die Shapes werden zwar den richtigen Swimlanes zugeordnet, werden aber nicht im Swimlane sondern daneben und übereinander positioniert.
Hat vielleicht jemand eine IDee/Code-Beispiele/Link-Tipps, um diesem Problem Herr zu werden?
Außerdem würde ich mich über ein paar Link-Tipps zum Thema Visio-Koordinatensystem und die Positionierung von Shapes interessieren.
Ich verstehe nicht, was es mit den einheitenlosen Angaben beim Drop-befehl auf sich hat.
Wo positioniert Visio ein Shape wenn ich folgenden Befehl eingebe?
Page.Drop(master, 2.5, 4.5)
Millimeter-Angaben können es ja nicht sein, wenn ich sie nicht explizit angebe.
Ich danke im Voraus schon mal für jede Hilfe und wünsche allen einen angenehmen Tag.
Viele Grüße
B.
###############
Hallo Herr B.,
Sie sollten in Visio immer die Maßeinheit dazu schreiben. Leider verwendet er häufig cm, manchmal allerdings inch.
Der Befehl
ActivePage.Drop(mastObj, 2, 3.5)
positioniert das Shape – genauer: den Pin des Shapes (meistens Mitte/Mitte – steht im ShapeSheet) an die x-Position 2 inch und die y-Position 3,5 inch – IMMER gemessen von der linken unteren Ecke des Zeichenblattes. Das Shape können und sollten Sie danach dorthin platzieren, wo Sie es haben wollen.
Beispiel:
Sub Shape_Aus_Schablone02()
Dim stnObj As Document
Dim mastObj As Master
Dim shpObj As Shape
If SchabloneOffen(„BASFLO_M.vss“) = False Then
Documents.OpenEx „BASFLO_M.VSS“, visOpenDocked
End If
If GibtEsMastershape(„BASFLO_M.VSS“, „Start/Ende“) = False Then
MsgBox „Das Shape „“Start/Ende““ existiert nicht.“
Exit Sub
End If
Set stnObj = _
Documents(„BASFLO_M.VSS“)
Set mastObj = stnObj.Masters(„Start/Ende“)
Set shpObj = ActivePage.Drop(mastObj, 2, 3.5)
shpObj.Cells(„PinX“).Result(visMillimeters) = 100
shpObj.Cells(„PinY“).Result(visMillimeters) = 60
shpObj.Text = „Ich bin der Terminator!“
End Sub
Function SchabloneOffen(Schablonenname As String) As Boolean
Dim stnObj As Document
Dim blnOffen As Boolean
blnOffen = False
For Each stnObj In Application.Documents
If Schablonenname = stnObj.Name Then
blnOffen = True
Exit For
End If
Next
SchabloneOffen = blnOffen
End Function
Function GibtEsMastershape(Schablonenname As String, _
Mastershapename As String) As Boolean
Dim stnObj As Document
Dim blnVohanden As Boolean
Dim mastObj As Master
blnVohanden = False
Set stnObj = Application.Documents(Schablonenname)
For Each mastObj In stnObj.Masters
If mastObj.Name = Mastershapename Then
blnVohanden = True
Exit For
End If
Next
GibtEsMastershape = blnVohanden
End Function
oder hier noch zwei Beispiele zum exakten Platzieren:
Sub ZellWerteSchreiben01()
Dim shpRechteck As Shape
Set shpRechteck = ActivePage.DrawRectangle(0, 0, 0, 0)
With shpRechteck
.Cells(„Width“).Result(„mm“) = 40
.Cells(„Height“).Result(„mm“) = 20
.Cells(„Angle“).Result(visDegrees) = 0
.Cells(„PinX“).Result(visMillimeters) = 100
.Cells(„PinY“).Result(visMillimeters) = 60
End With
End Sub
Sub ZellWerteSchreiben02()
Dim shpRechteck As Shape
Set shpRechteck = ActivePage.DrawRectangle(0, 0, 0, 0)
With shpRechteck
.Cells(„Width“).Result(„mm“) = 40
.Cells(„Height“).Result(„mm“) = 20
.Cells(„LocPinX“).Formula = „=Width*0.75“
.Cells(„LocPinY“).Formula = „=Height*0.75“
.Cells(„Angle“).Result(visDegrees) = 0
.Cells(„PinX“).Result(visMillimeters) = 100
.Cells(„PinY“).Result(visMillimeters) = 60
End With
End Sub
Auf meiner Seite visio-training.de finden Sie unter Beispiele / Programmierung einige Beispiele zum exakten Positionieren: Autorennen, Papierfabrik, Viertaktmotor
viel Spaß mit Visio wünscht Ihnen
Rene Martin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert