请让我解释一下我想做什么:
(1) 我创建了一个 Excel 工作簿,人们可以在其中编写流程的各个步骤。假设它写在名为“Process A”的工作表上。在每个步骤右侧的单元格中,该人员可以指定该步骤是否需要圆形(用于连接器)、菱形(用于决策)或矩形(用于流程步骤)。
(2) 对于名为“流程 A”的工作表中的每个步骤,我还有条件公式,指示我希望将形状放置在另一张工作表上的位置(左、上、宽、高)(我们称之为“流程图 A” )。如果你想试试这个,我列出的坐标如下: LEFT > Connectors = 147; 流程和决策 = 49
宽度 > 连接器 = 90;流程和决策 = 286
形状的高度 > 连接器 = 90;流程和决策 = 210
箭头的高度 > 所有箭头 = 60
TOP >(基于前一个形状的顶部 + 前一个形状的高度 + 箭头的长度的计算)。例如,如果形状 1 是连接器,形状 2 是进程,那么形状 2 从 150 开始(假设形状 1 的顶部从 0 开始... [0 + 90 + 60]
下面的代码确实生成了所有的形状,但是它将它们全部堆叠在顶点零 (0) 处。
Sub TestRun()
Dim ws1 As Worksheet
Set ws1 = Worksheets("Process A")
Dim LDS As Shape
Dim ws2 As Worksheet
Set ws2 = Worksheets("Sheet2")
Dim LEFT As Integer
Dim TOP As Integer
Dim WIDTH As Integer
Dim HEIGHT As Integer
Dim LRange As Range
For Each LRange In ws1.Range("T2:T23")
LEFT = LRange.Value
Next LRange
Dim TRange As Range
For Each TRange In ws1.Range("U2:U23")
TOP = TRange.Value
Next TRange
Dim WRange As Range
For Each WRange In ws1.Range("V2:V23")
WIDTH = WRange.Value
Next WRange
Dim HRange As Range
For Each HRange In ws1.Range("W2:W23")
HEIGHT = HRange.Value
Next HRange
Dim ShpRange As Range
For Each ShpRange In ws1.Range("D2:D23")
If ShpRange.Value = "Connector" Then
Set LDS = ws2.Shapes.AddShape(msoShapeFlowchartConnector, LEFT, TOP, WIDTH, HEIGHT)
ElseIf ShpRange.Value = "Process" Then
Set LDS = ws2.Shapes.AddShape(msoShapeFlowchartProcess, LEFT, TOP, WIDTH, HEIGHT)
ElseIf ShpRange.Value = "Decision" Then
Set LDS = ws2.Shapes.AddShape(msoShapeFlowchartDecision, LEFT, TOP, WIDTH, HEIGHT)
End If
Next ShpRange
End Sub
我在编码的位置上尝试了以下变化:
(1) 列出“For Each”语句及其条件。然后列出所有的“下一个语句”。(2) 一起列出所有“For Each”语句,然后是一起列出的所有条件语句,然后是一起列出的所有“Next Statements”。
当我在这些编辑后运行宏时,我收到“编译错误:无效的下一个控制变量引用”。
我是 VBA 的新手,并且尝试了很多方法来完成这项工作,但我觉得我一次又一次地撞到了一堵砖墙。非常感谢您的帮助!先感谢您!