Excel VBA:形状集合中的索引 = ZOrderPosition?

2023-12-08

工作表的 Shapes 集合中形状的索引是否始终与其 ZOrderPosition 相同? (原则上不能直接查询给定形状的索引)。

我已经在少数情况下(最多 3000 个形状)验证了这一点,但我没有找到任何相关文档。

我遍历了整个集合,询问 Index 和 ZOrderPosition 之间可能存在的差异:

Sub dump_shapes()
' Dump information on all shapes in a Shapes collection
    Dim shc As Shapes
    Set shc = ActiveSheet.Shapes
    Dim shp As Shape
    For Each shp In shc
      Dim sh2 As Shape
      Set sh2 = sh2idxzosh_shc(shp)
      Dim zoidx As Long
      ' The second argument is not actually the Index, but since we are traversing the 
      ' whole collection, and Index and ZOrderPosition are at most permutations, we are
      ' covering all of the possible Indexes.
      zoidx = idx2zo_shc(shc, shp.ZOrderPosition)
    Next shp
End Sub

用于查询的函数如下所示。由于 MsgBox 中的警告从未弹出,这意味着对于评估的案例,Index=ZOrderPosition。

' Functions between the set of shapes S and the set of natural numbers N.
' O=ZOrderPosition : S -> N  (function exists)
' D=From Index : N -> S  (function exists)
' D^-1=Index : S -> N  (function does not exist)
' f=OoD : N -> N  (can be constructed; this is expected to be only a permutation, 
'  i.e., bijective)
' g=DoO : S -> S  (can be constructed)

Function sh2idxzosh_shc(ByRef sh As Shape) As Shape
    Dim shc As Shapes
    Set shc = sh.Parent.Shapes
    Dim zo As Long
    zo = sh.ZOrderPosition
    Dim sh2 As Shape
    Set sh2 = shc(zo)
    ' g=DoO : S -> S
    ' Test Shape : g(S)=S for all s? If so, g=DoO=I ; D=O^-1 ; D^-1=O. Thus, the Index 
    '  is equal to the ZOrderPosition.
    ' Use ZOrderPosition to test Shape : O(g(s))=O(s) for all s? I.e., OoDoO=O? If so, 
    '  given that O is bijective, OoD=I ; D=O^-1 ; D^-1=O. Thus, the index is equal to 
    '  the ZOrderPosition.
    Dim zo2 As Long
    zo2 = sh2.ZOrderPosition
    If (zo2 <> zo) Then
      MsgBox ("Compound ZOrderPosition: " & zo2 & ", ZOrderPosition: " & zo)
    End If
    Set sh2idxzosh_shc = sh2
    'Set sh2 = Nothing
End Function

Function idx2zo_shc(ByRef shc As Shapes, idx As Long) As Integer
    Dim sh As Shape
    Set sh = shc(idx)
    Dim zo As Long
    zo = sh.ZOrderPosition
    ' f=OoD : N -> N
    ' Test index : f(i)=i for all i? If so, f=OoD=I ; D=O^-1 ; D^-1=O. Thus, the Index is 
    '  equal to the ZOrderPosition.
    If (zo <> idx) Then
      MsgBox ("Index: " & idx & ", ZOrderPosition: " & zo)
    End If
    idx2zo_shc = zo
End Function

PS:我已经调整了工作表的 ChartObjects 集合的函数,并且还验证了等效性 Index=ZOrder。

PS2:有人可能会问这是否是任何收藏的典型(甚至保证)。在Excel VBA:形状集合中 ZOrderPosition 的非连续编号我报告了一种情况,不仅这不是真的,而且 Index 和 ZOrderPosition 甚至都不是排列(请注意,它是与 ChartObject 关联的 Shape 的 Shapes 集合,与上面提到的情况不同)。

Edit:参见编辑Excel VBA:如何从 ChartObject 获取对 Shape 的引用.


Excel 工作表形状的规则“ZOrderPosition = index”是 **NOT** 如果您制作一组形状,则为 true。例如,如果您在 Zorder 1 到 6 中具有形状“A”、“B”、“C”、“D”、“E”、“F”,然后将形状“B”、“C”、“D”分组一起,您将打破形状“E”和“F”的“ZOrderPosition = index”规则。如果列出形状(i),您将得到以下结果:



index  ZOrder  Name 
 1       1      "A"        
 2       2      "Group 1"   
 3      *6*     "E"        
 4      *7*     "F"        

  

这是获取先前信息的代码:

Sub DebugListInfoOfShapes()
    Dim i As Long
    Debug.Print "Index   ZOrder   Name"
    For i = 1 To ActiveSheet.Shapes.Count
        Debug.Print i & "         " _
                      & ActiveSheet.Shapes(i).ZOrderPosition _
                      & "      " _
                      & ActiveSheet.Shapes(i).Name
    Next i
End Sub

希望这能澄清你的问题!

问候,安德烈斯

PD:如果您想查看形状“B”、“C”、“D”,您必须使用以下示例在组内循环:ActiveSheet.Shapes(2).GroupItems(i)对于上述情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA:形状集合中的索引 = ZOrderPosition? 的相关文章

  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • Confluence:使用 VBA 更新现有页面

    我尝试使用 VBA 更新 Confluence 页面 我的想法是使用REST API加载页面内容 修改内容然后上传修改后的版本 这是我的代码 Private Sub TestRESTApi Dim uname As String uname
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • Apache poi setformula 不适用于 SE

    我正在尝试在 XSSFCell With POI 中设置公式 Cell setFormula SE D87 0 D80 D87 错误是 名称 SE 在当前工作簿中完全未知 Why 看起来您正在尝试创建一个IF公式 我发现这一页 http w
  • 我可以用文本框设置变量名称吗? excel

    我可以使用 TextBox Vba Excel 设置变量的名称吗 我必须以在文本框中写入组名称并单击命令按钮的方式输入新的产品组 代码必须从文本框中获取字符串 并将该字符串设置为新创建的数组的名称 我只想在运行时创建一个新变量 或数组 据信
  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 如何使用VBA根据条件删除Excel中的行?

    我目前正在构建一个宏来格式化数据表并删除不适用的数据行 具体来说 我希望删除列 L ABC 的行以及删除列 AA DEF 的行 到目前为止 我已经实现了第一个目标 但还没有实现第二个目标 现有代码是 Dim LastRow As Integ
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 文件夹.文件的相对路径

    我有一个 Excel 文件 在同一文件夹中还有一个包含我想要包含的 CSV 文件的文件夹 使用 来自文件夹 查询 第一步将给出以下查询 Folder Files D OneDrive Documents Health Concept2 现在
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 将匹配的行复制到另一张纸中

    我有两张表 sheet1 和sheet 2 我正在查看工作表 1 的 T 列 如果工作表 2 中 T 包含 1 则粘贴完整行 该代码运行良好 但它将sheet2 中的结果粘贴到sheet1 的同一行中 这会导致行之间出现空白 任何人都可以建
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显
  • 当使用公式生成超链接时,VBA 打开 Excel 超链接不起作用

    使用公式生成的 Excel 超链接似乎存在错误 我使用的是 Excel 2010 我有一个电子表格 其中的单元格包含 URL 我的目标是执行以下两件事 将这些单元格变成超链接 创建一个键盘快捷键来打开这些超链接 这样我就不必使用鼠标了 为了
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • numpy NPV 和 Excel NPV 有区别吗?

    我的 Excel 中有一行包含 11 个值 TotalSavings 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 贴现率为 0 08 我在 Excel 中使用 计算 NPVNPV
  • VBA在多个文件夹中搜索特定子文件夹并移动其中的所有文件

    你能帮助我吗 我想要一个宏vba来搜索SPECIFIC例如 所有存在并移动其文件的文件夹和子文件夹之间的子文件夹 Xfolder P Desktop Folder1 subfolder SUBFOLDER1 Xfolder 我正在使用 VB
  • Redim Preserve 给出“下标超出范围”

    我想要Redim Preserve一个数组我不断收到错误 下标超出范围 我知道只有最后一个维度的大小可以更改 这正是我正在做的事情 这里出了什么问题 数组的类型是Variant BmMatrix Sheets BENCH Range a60
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航

随机推荐

  • Adobe Air ios 打包程序

    限制解除后 关于将 Adob e Air 应用程序部署到 ios 似乎存在很多混乱 在苹果取消限制之前 您必须完成此处记录的流程 http blogs adobe com cantrell archives 2010 09 packager
  • Pandas:将重复索引更改为分层索引

    请参阅下面的示例 给定一个索引有重复值的数据帧 如何获得一个具有分层索引的新数据帧 其第一级是原始索引 第二级是 0 1 2 n Example gt gt gt df 0 1 a 2 4 a 4 6 b 7 8 b 2 4 c 3 7 g
  • 从静态方法访问非静态枚举值

    public enum sEnum zero 0 one 1 public int x public static void a sEnum s x 3 if s sEnum one 为什么可以在这里检查枚举的值 因为没有使用 static
  • 转至收藏联系人的 Intent URI

    是否有 Intent URI 可以将您发送到手机最喜爱的联系人 就像内容 联系人 人员 将您发送给所有联系人 并且tel 将您发送至拨号器 EDIT 还有一种方法可以转到您的通话记录吗 收藏夹 com android contacts ac
  • ECGraph 无法在设备上运行,但可以在模拟器上运行

    是否有任何原因导致 ECGraph 在模拟器上运行良好 但当我在我的设备上运行它时却出现此错误 2012 08 24 01 57 18 543 Portfolio 3538 907 NSCFCalendar components fromD
  • 单击时显示子类别

    在我的 WordPress 网站上 我有一个菜单 显示每个类别的子类别 我想要做的是默认隐藏子类别 仅当我单击父类别时才显示它们 My HTML ul class scrolling cat mCustomScrollbar mCS 2 m
  • 如何解码 JSON 字符串?

    在服务器端 我有 2 个哈希值编码成 JSON 字符串吗 my j JSON gt new j j gt utf8 my data data gt users j gt encode user result data gt owners j
  • 样式取决于 Xamarin 表单中的屏幕方向

    我在手机和平 板电脑上进行造型 但如何添加方向选项 这都是纵向的 但我如何添加水平方向的选项
  • 如何保护 Mongoose/MongoDB 中的密码字段,以便在填充集合时它不会在查询中返回?

    假设我有两个集合 模式 一个是带有用户名和密码字段的用户架构 然后 我有一个博客架构 它引用了作者字段中的用户架构 如果我用 Mongoose 做类似的事情 Blogs findOne populate user exec 我还将填充博客文
  • 如何从搜索栏和 UISearchDisplayController 的过滤结果中选择多个表行?

    我知道 UISearchDisplayController 在 iOS 8 0 中已被弃用 但关于新的 UISearchController 没有很多好的文档 所以我使用了前者 请容忍我 现在 我正在使用 XIB 文件 我知道对于常规表格视
  • PHP MySQL 的问题并插入 UTF-8 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我的 php 和 mysql 有问题 使用 utf 8
  • OneWayToSource 绑定在 .NET 4.0 中似乎已损坏

    OneWayToSource NET 4 0 中的绑定似乎已损坏 我有这个简单的 Xaml 片段
  • Dart 如何获取字符串形式的枚举名称

    在 Dart 中提供枚举之前 我编写了一些繁琐且难以维护的代码来模拟枚举 现在想要简化它 我需要以字符串形式获取枚举的名称 这可以用 Java 完成 但不能 例如 当我想要的是 MONDAY 时 小测试代码片段在每种情况下都会返回 day
  • 通过 Google Maps API v3 访问 ExtendedData 信息

    我有一个 KML 文件 其中包含每个
  • D3 强制布局:如何强制一组节点停留在给定区域

    在 D3 力布局图中 我尝试根据节点组强制某些节点留在给定区域 有一个中心节点 该节点是固定的 我希望由红线连接的节点保留在屏幕高度的前 1 3 处 由描边线连接的节点保留在第二个 1 3 处 由蓝线连接的节点保留在最后 1 3 处 但我希
  • 是否可以在 x 轴(经度)上移动 geopandas 世界地图?

    我想知道是否有一种方法可以将 geopandas 世界地图集中在特定的经度点上 基本上 只是想将其移动约 5 10 度左右 上一个问题是几个月前发布的 但没有收到答案 想知道是否有人知道解决方案 stackoverflow 上原始问题的链接
  • 循环遍历具有特定扩展名的所有文件并对其执行某些操作

    这是我第一次使用 Linux shell 脚本 它看起来确实很强大 但我仍然有点困惑 我想循环遍历目录中具有特定扩展名的所有文件递归地 所有子目录 子子目录和 并通过在它们上运行可执行文件在原始文件的确切位置生成一个具有相同名称但扩展名不同
  • 从两列映射中对多对多关系进行分组

    我有一个 SQL 表 可以映射作者和书籍等内容 我想将链接的作者和书籍 同一作者撰写的书籍以及共同撰写一本书的作者 分组在一起 并确定这些组的规模有多大 例如 如果 J K 罗琳与朱诺 迪亚兹合写 朱诺 迪亚兹与扎迪 史密斯合写了一本书 那
  • 单击 UIWebView 上的链接时打开新的 UIViewController

    我发现这个线程符合我的问题 单击 UIWebView 中的链接会推送到 NavigationView 堆栈 但以下情况有所不同 我没有使用导航控制器 而是使用基于视图的应用程序在按下相应按钮时手动切换到不同的视图控制器 我没有使用链接 而是
  • Excel VBA:形状集合中的索引 = ZOrderPosition?

    工作表的 Shapes 集合中形状的索引是否始终与其 ZOrderPosition 相同 原则上不能直接查询给定形状的索引 我已经在少数情况下 最多 3000 个形状 验证了这一点 但我没有找到任何相关文档 我遍历了整个集合 询问 Inde