Excel-2007:
如果不使用select,那么向特定范围或单元格添加形状的最佳方法是什么?
到目前为止,我发现最好的方法是使用EntireColumn.Left等进行计算。
是否可以在范围内使用AddShape方法自动在范围内创建形状?或者AddShape必须始终定位相对于文档左上角的新形状?
发布于 2013-09-13 20:15:08
下面是一个将形状(在本例中为TextBox)放置在工作表上的示例,其中没有任何选择,也没有对文档左上角的任何引用,只有有关范围的参数:
Sub CoverRange()
Dim r As Range
Dim L As Long, T As Long, W As Long, H As Long
Set r = Range("A2:H8")
L = r.Left
T = r.Top
W = r.Width
H = r.Height
With ActiveSheet.Shapes
.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).TextFrame.Characters.Text = "Test Box"
End With
End Sub发布于 2013-09-16 15:40:29
我把加里的学生的答案标为最好的..。但是,由于我很难找到很多与我正在做的事情相关的信息,所以我认为在这里粘贴一些代码可能会对将来的人有所帮助。
盖瑞建议,这个程序可以适用于覆盖一系列细胞。我想把一个小的形状放在一些细胞的右手边,在一个范围内,在这些细胞上发挥一些功能。因此,应用.AddShape方法:
Dim cl As Range, rg As Range
Set rg = Range("J2", Range("J2").End(xlDown))
For Each cl In rg
With ActiveSheet.Shapes.AddShape(92, cl.Width - 10 + cl.Left, cl.Top + 5, 10, 10)
.OnAction = "click_pm_update"
.Name = cl.Row
.Shadow.Visible = False
End With
Next这就在每个细胞的右边形成了一颗小恒星。该恒星的名称反映了该恒星的行,当单击它时,它调用"click_pm_update“过程。
另外,click_pm_update使用Application.Caller方法结合形状的名称(该名称反映形状所在的行)来确定要对哪些单元格进行操作:
Private Sub click_pm_update()
Dim pmRow As String: pmRow = ActiveSheet.Shapes(Application.Caller).Name
'etc, etc有关here方法的一些有用信息,请参阅Application.Caller。
这样做的好处是,电子表格可以继续正常使用,直到用户单击形状。这为电子表格增加了大量的自定义功能。
https://stackoverflow.com/questions/18794259
复制相似问题