我现在有点困。我尝试使用excel数据将形状导入visio并移动/调整大小。我有一个正在运行的gui,让用户选择他需要的所有东西,但代码没有正常运行。我目前的计划(在许多计划中)是在visio文件中使用一个sub来处理形状的移动和大小调整。所以excel只会调用那个宏并传递所有需要的信息。
visio子然后将复制(导入图像失败,所以atm我需要一个包含所有可用图像的db表,正确命名以识别所需图像)图像到我的Map页面,然后将调整图像大小并正确定位。
我已经在mapPage.Drop()或mapPage.Import()周围尝试了几种方法,但由于某些我不明白的原因,这些方法都不起作用。
现在我有了CreateTile函数
Public Sub CreateTile(x As String, y As String, lWidth As String, lHeight As String, sTile As String)
Dim dbPage As Visio.Page
Dim mapPage As Visio.Page
Dim srcShape As Visio.Shape
Dim newShape As Visio.Shape
Set dbPage = ActiveDocument.Pages("DB")
Set mapPage = ActiveDocument.Pages("Map")
Set srcShape = dbPage.Shapes(sTile)
srcShape.Copy
mapPage.Paste
Set newShape = mapPage.Shapes.ItemFromID(mapPage.Shapes.Count)
newShape.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = x & " mm"
newShape.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = y & " mm"
newShape.CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU = lWidth & " mm"
newShape.CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU = lHeight & " mm"
End Sub
字符串
它将被我的Excel函数调用
sParam = CStr(Replace(Round(coords(0), 4), ",", ".")) & ", " & CStr(Replace(Round(coords(1), 4), ",", ".")) & ", " & CStr(ufMain.tBoxWidth.Text) & ", " & CStr(Replace(Round(CDbl(101.6 * ufMain.tBoxWidth.Text / 67.7333), 4), ",", ".")) & ", " & CStr(sTile)
Debug.Print ("CreateTile " & sParam)
visDoc.ExecuteLine "CreateTile " & sParam
型
Debug.Print将返回CreateTile 40, 34.642, 40, 60, shapeName01
。sParam中的Replace()是因为使用了而不是。作为分隔符,这对于Excel没有问题,但对于Visio。所以我决定只传输字符串,其余的在visio站点上处理。
在使用的Visio端
Sub test()
CreateTile "40", "34.642", "40", "60", "hexForestBroadleaf00"
End Sub
型
来测试Visio端的代码是否有效,它真的像一个魅力。我甚至可以通过visDoc.ExecuteLine "Test "
多次从Excel端调用test(),所以我假设我在将参数传输到visio时遇到了问题,但我没有得到错误。
我很高兴得到任何帮助,因为解决这个问题将为我节省一真实的堆时间。:)
1条答案
按热度按时间1cklez4t1#
@社区我正在寻找一种方法来调用visio makro与参数出excel文件。
必须添加前缀
ThisDocument.
才能从Excel调用Visio宏。这条线看起来像字符串