首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将形状添加到范围(.AddShape方法)

将形状添加到范围(.AddShape方法)
EN

Stack Overflow用户
提问于 2013-09-13 19:57:43
回答 2查看 8.5K关注 0票数 1

Excel-2007:

如果不使用select,那么向特定范围或单元格添加形状的最佳方法是什么?

到目前为止,我发现最好的方法是使用EntireColumn.Left等进行计算。

是否可以在范围内使用AddShape方法自动在范围内创建形状?或者AddShape必须始终定位相对于文档左上角的新形状?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-13 20:15:08

下面是一个将形状(在本例中为TextBox)放置在工作表上的示例,其中没有任何选择,也没有对文档左上角的任何引用,只有有关范围的参数:

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2013-09-16 15:40:29

我把加里的学生的答案标为最好的..。但是,由于我很难找到很多与我正在做的事情相关的信息,所以我认为在这里粘贴一些代码可能会对将来的人有所帮助。

盖瑞建议,这个程序可以适用于覆盖一系列细胞。我想把一个小的形状放在一些细胞的右手边,在一个范围内,在这些细胞上发挥一些功能。因此,应用.AddShape方法:

代码语言:javascript
复制
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方法结合形状的名称(该名称反映形状所在的行)来确定要对哪些单元格进行操作:

代码语言:javascript
复制
Private Sub click_pm_update()
Dim pmRow As String: pmRow = ActiveSheet.Shapes(Application.Caller).Name
'etc, etc

有关here方法的一些有用信息,请参阅Application.Caller

这样做的好处是,电子表格可以继续正常使用,直到用户单击形状。这为电子表格增加了大量的自定义功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18794259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档