从 MS Access VBA 使用 Shape.DrawSpline 方法 (Visio)

To Use Shape.DrawSpline Method (Visio) from MS Access VBA

我正在阅读 MS office VBA 参考中关于 Shape.DrawSpline 方法 (Visio) 的使用。当我在 Visio 中输入时,他们提供的示例有效。该示例采用点并将它们与曲线连接起来,并在 Visio 应用程序中显示它。

我希望 VBA 代码驻留在 MS Access 中,我会让 VBA 代码打开 Visio 绘图,并从 MS Access VBA 执行 Shape.DrawSpline 方法=] 代码。我的问题似乎是确定如何生成表达式形状以使程序运行并在打开的Visio绘图中绘制示例曲线。

这是我正在处理的代码,打开 Visio 绘图的部分对我有用:

Dim AppVisio As Visio.Application
Dim ShpObj As Visio.Shape
Dim XYPoints(70) As Double

Set AppVisio = CreateObject("Visio.Application")
Set DocObj = AppVisio.Documents.Open("C:\Test Template.vsd")

当我命令 MS Access 执行上述代码时,Visio 绘图 "Test Template.vsd" 确实打开了它。

紧接着上面的代码,我得到了要绘制的点的 x、y 坐标。它们被分配给 XYPoints 数组。

在底部,我有以下代码用于从 MS Access VBA 代码执行 DrawSpline 方法 (Visio)。

代码如下:

Set ShpObj = AppVisio.Application.ActivePage.DrawSpline(XYPoints, 0.25, visSplinePeriodic)

我在上面的语句中得到一个错误。这是我得到的错误: “运行-时间错误‘-2032465751 (86db08a9)’ 对象 'IVPage' 的方法 'DrawSpline' 失败

谢谢,

我同意@y4cine 的建议。但是我的猜测是您的文档没有正确打开,或者您填充的点数组的格式不正确。 the SDK sample 的以下改编对我有用:

Sub TestSplineFromExcel()

Dim vApp As Visio.Application
Set vApp = CreateObject("Visio.Application")

Dim intCounter As Integer
Dim XYPoints(1 To (5 * 2)) As Double

For intCounter = 1 To 5
    'Set x components (array elements 1,3,5,7,9) to 1,2,3,4,5
    XYPoints((intCounter * 2) - 1) = intCounter

    'Set y components (array elements 2,4,6,8,10) to f(i)
    XYPoints(intCounter * 2) = (intCounter * intCounter) - (7 * intCounter) + 15
Next intCounter

vApp.Documents.Add ""

Dim vPag As Visio.Page
Set vPag = vApp.ActivePage

If vPag Is Nothing Then
    MsgBox "Target page is null"
Else
    Dim shp As Visio.Shape
    Set shp = vPag.DrawSpline(XYPoints, 0.25, Visio.VisDrawSplineFlags.visSplinePeriodic)
End If

End Sub