【发布时间】:2020-03-28 10:29:43
【问题描述】:
我在应用循环以在电子表格中构建矩形时遇到问题,出现错误 1004,
运行时错误“1004”:
应用程序定义或对象定义的错误
在线:
Leftmargin = ThisWorkbook.Worksheets(2).Range(Cells(1, 1)).Left
我不知道为什么这不起作用。我还想使用其余参数切换到单元格功能,因为我需要循环超过 450 个位置来构建与卡片一样的矩形。我要求对该主题进行解释,以便我了解失败的原因。
Dim sh As Shape
Dim Leftmargin
Leftmargin = ThisWorkbook.Worksheets(2).Range(Cells(1, 1)).Left
Leftmargin = Leftmargin + 2
Set sh = ThisWorkbook.Worksheets(2).Shapes.AddShape( _
Type:=msoShapeRoundedRectangle, _
Left:=Leftmargin, _
Top:=ThisWorkbook.Worksheets(2).Range("A1").Top + 2, _
Width:=ThisWorkbook.Worksheets(2).Range("A1:E1").Width - 4, _
Height:=ThisWorkbook.Worksheets(2).Range("A1:A10").Height - 4)
【问题讨论】:
-
一个
Range()需要两个Cells()你应该改用Cells()。 -
Implicit ActiveSheet references:
Cells是一个成员调用,它隐含地限定于当前活动的任何工作表,或者你所在的工作表模块,如果那是不合格的成员调用所在的位置。基本上你不能做Sheet1.Range(Sheet2.Cells(...), Sheet2.Cells(...)),这就是当Sheet2处于活动状态并且你做Sheet1.Range(Cells(...), Cells(...))时发生的情况 -
@MathieuGuindon 虽然您对合格电话的看法是正确的,但 OP 的问题是,正如 Damian 上面所说,您不能将 one
Range-typed 参数传递给 @ 987654333@. -
@GSerg 是正确的。此外,这种未被检测到的唯一原因是通过将
.Range调用链接到Workbook.Worksheets(2)引起的隐式后期绑定,该调用返回Object。通过将该Worksheet对象拉入其自己的局部变量,OP 将恢复早期绑定和编译时检查,并获得智能感知/参数快速信息显示工具提示,显示.Range属性预期的参数。是否应该重新提出问题? -
@GSerg 这里是一个更合适的副本:stackoverflow.com/questions/17636170/…