【发布时间】:2015-04-17 12:31:41
【问题描述】:
我们如何使用 VBA 脚本在 Visio 中创建时间线图? 我正在尝试从excel中做到这一点。我已经编写了 VBA 脚本来打开 visio 图表并创建一个基本形状。我想创建一个时间线图。 与 basic_u.vss 和 visMSDefault 类似,在创建时间线图时是否需要任何参数? 下面是我正在使用的代码 sn-p。
Option Explicit
Sub VisioFromExcel()
Dim AppVisio As Object
Dim vsoCharacters1 As Visio.Characters
Dim lX As Long
Dim dXPos As Double
Dim dYPos As Double
'Const visSectionCharacter = 3
'Const visCharacterSize = 7
Set AppVisio = CreateObject("visio.application")
'Set AppVisio = CreateObject("VisioTimelineVBA")
AppVisio.Visible = True
AppVisio.Documents.AddEx "", visMSDefault, 0 'Open Blank Visio Document
'AppVisio.Documents.AddEx "", visMSDefault, 0 'Open Blank Visio Document
AppVisio.Documents.OpenEx "basic_u.vss", visOpenRO + visOpenDocked 'Add Basic Stencil
dXPos = AppVisio.ActivePage.PageSheet.Cells("PageWidth") / 2
dYPos = AppVisio.ActivePage.PageSheet.Cells("PageHeight") / 2
For lX = 1 To Cells(Rows.Count, 1).End(xlUp).Row
AppVisio.Windows.ItemEx(1).Activate
AppVisio.ActiveWindow.Page.Drop AppVisio.Documents.Item("BASIC_U.VSS").Masters.ItemU("Square"), dXPos, dYPos
Set vsoCharacters1 = AppVisio.ActiveWindow.Page.Shapes.ItemFromID(lX).Characters
vsoCharacters1.Begin = 0
vsoCharacters1.End = 0
vsoCharacters1.Text = CStr(Cells(lX, 1).Value)
AppVisio.ActiveWindow.Page.Shapes.ItemFromID(lX).CellsSRC(visSectionCharacter, 0, visCharacterSize).FormulaU = "36 pt"
Next
Set AppVisio = Nothing
End Sub
【问题讨论】:
-
你不需要删除一个正方形,你可以在 Page 对象上使用 DrawRectangle 方法,但是如果你遇到性能问题,你可以使用 DropMany 方法来删除一堆正方形,这比丢弃它们或一次绘制一个要快。
-
Jon Fournier,这只是尝试创建 visio 页面的示例。谢谢你的建议。