VBA方法';对象范围'_工作表形状失败。范围(数组)
我正在尝试根据第一张图纸的值移动第二张图纸上的形状。我不断收到一个错误,行…shapes.Range(Array)(下面是代码…)VBA方法';对象范围'_工作表形状失败。范围(数组),vba,excel,Vba,Excel,我正在尝试根据第一张图纸的值移动第二张图纸上的形状。我不断收到一个错误,行…shapes.Range(Array)(下面是代码…) Sub graphics_mover() ' graphics_mover Macro Dim SWL_row As Double, PWL_row As Double Dim rng As Variant, i As Integer, colNum As Integer, Data As Worksheet, Pict As Worksheet Set Data
Sub graphics_mover()
' graphics_mover Macro
Dim SWL_row As Double, PWL_row As Double
Dim rng As Variant, i As Integer, colNum As Integer, Data As Worksheet, Pict As Worksheet
Set Data = ThisWorkbook.Worksheets(1)
'Set Pict = ThisWorkbook.Worksheets(2)
Set Pict = Workbooks("Well Pictographs2.xlsm").Worksheets(2)
i = 1
For i = 1 To 27
SWL_row = Data.Cells(2, i + 1).Value
SWL_row = Int(SWL_row / 50 + 1)
Pict.Shapes.Range(Array("Isosceles Triangle " & i)).Select
Selection.Top = SWL_row * 15 + 4
PWL_row = Data.Cells(3, i + 1).Value
PWL_row = Int(PWL_row / 50 + 1)
Pict.Shapes.Range(Array("Freeform " & i)).Select
Selection.Top = PWL_row * 15 + 1
i = i + 1
Next i
'--------------------------
End Sub
导致错误的行是:
Pict.Shapes.Range(Array("Freeform " & i)).Select
我很感激任何解决方案。我很好奇崩溃时I的值是多少。代码基本上与录制的宏相同,但如果存在命名形状,则语法是正确的 首先运行这个小片段,将所有形状的名称输出到VBE的即时窗口(Ctrl+G) 当您在VBE中时,点击Ctrl+G打开即时窗口并检查输出。确保您有等腰三角形1到等腰三角形27(包括) 下一步运行宏的此修改
Sub graphics_mover()
Dim SWL_row As Double, PWL_row As Double
Dim rng As Variant, i As Integer, colNum As Integer, Data As Worksheet, Pict As Worksheet
On Error Resume Next
Set Data = ThisWorkbook.Worksheets(1)
With Workbooks("Well Pictographs2.xlsm").Worksheets(2)
For i = 1 To 27
SWL_row = Data.Cells(2, i + 1).Value
SWL_row = Int(SWL_row / 50 + 1)
If Not .Shapes("Isosceles Triangle " & i) Is Nothing Then
.Shapes("Isosceles Triangle " & i).Top = SWL_row * 15 + 4
Debug.Print "moved " & .Shapes("Isosceles Triangle " & i).Name
End If
PWL_row = Data.Cells(3, i + 1).Value
PWL_row = Int(PWL_row / 50 + 1)
If Not .Shapes("Freeform " & i) Is Nothing Then
.Shapes("Freeform " & i).Top = PWL_row * 15 + 1
Debug.Print "moved " & .Shapes("Freeform " & i).Name
End If
Next i
End With
End Sub
我不太喜欢在错误恢复下一步时使用,
但是你正在处理一个避免检测的对象。VBE的即时窗口将报告它可能移动的形状。如果Pict.shapes.Range(数组(“等腰三角形”&I))。选择工作和Pict.shapes.Range(数组(“自由形式”&I))。选择“不存在”,则唯一的区别可能是并非所有的名称都存在。否则,为什么另一行可以工作?
Sub graphics_mover()
Dim SWL_row As Double, PWL_row As Double
Dim rng As Variant, i As Integer, colNum As Integer, Data As Worksheet, Pict As Worksheet
On Error Resume Next
Set Data = ThisWorkbook.Worksheets(1)
With Workbooks("Well Pictographs2.xlsm").Worksheets(2)
For i = 1 To 27
SWL_row = Data.Cells(2, i + 1).Value
SWL_row = Int(SWL_row / 50 + 1)
If Not .Shapes("Isosceles Triangle " & i) Is Nothing Then
.Shapes("Isosceles Triangle " & i).Top = SWL_row * 15 + 4
Debug.Print "moved " & .Shapes("Isosceles Triangle " & i).Name
End If
PWL_row = Data.Cells(3, i + 1).Value
PWL_row = Int(PWL_row / 50 + 1)
If Not .Shapes("Freeform " & i) Is Nothing Then
.Shapes("Freeform " & i).Top = PWL_row * 15 + 1
Debug.Print "moved " & .Shapes("Freeform " & i).Name
End If
Next i
End With
End Sub