Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MS Excel中查找形状?_Excel_Vba_Office365 - Fatal编程技术网

如何在MS Excel中查找形状?

如何在MS Excel中查找形状?,excel,vba,office365,Excel,Vba,Office365,如何在MS Excel中的工作表上找到特定形状?在这里回答我自己的问题,因为我找不到原始帖子,而且有许多类似的帖子。简言之,在工作表中查找形状的最佳方法是循环查看工作表中的所有形状,以找到您要查找的形状。例如: ... For Each shp In .Shapes arrShapes(shp.ID, 0) = .Cells(shp.TopLeftCell.row, colItemNum).Value arrShapes(shp.ID, 1) = shp.TopLeftCell.

如何在MS Excel中的工作表上找到特定形状?

在这里回答我自己的问题,因为我找不到原始帖子,而且有许多类似的帖子。简言之,在工作表中查找形状的最佳方法是循环查看工作表中的所有形状,以找到您要查找的形状。例如:

...
For Each shp In .Shapes
    arrShapes(shp.ID, 0) = .Cells(shp.TopLeftCell.row, colItemNum).Value
    arrShapes(shp.ID, 1) = shp.TopLeftCell.Address
    arrShapes(shp.ID, 2) = shp.TopLeftCell.row
    arrShapes(shp.ID, 3) = shp.TopLeftCell.Column
Next shp
这段代码将所有形状放入一个数组中,以便以后搜索

警告!我在使用这段代码时发现了一些怪癖

MS Excel使用形状进行注释!如果您在单元格中有注释,MS Excel将在工作表的形状中包含该注释!这些是AutoShapeType=msoShapeRectangle,很难与其他文本框区分开来。您可以在Type=msoComment的位置对其进行标识。您可以尝试按其默认名称过滤掉特定注释,该名称通常类似于“Commentn”,其中n只是一个序列号。不知道它们是如何编号的。单元格位置参照(左上角、右下角等)指的是注释文本框在显示时的位置,而不是父单元格,尽管它们很接近

形状的ID与索引不同。例如,我发现的工作表中的第一个形状(包含3个实际形状和2个注释)的ID为15361!不是我期待的1-5


相应地编码。

非常好的练习!观察你的答案比你的问题长多少。这是因为这个问题的质量要低得多,实际上是不够的。只有您的答案指定要根据形状在工作表上的位置查找形状。当然,该系统设计用于按名称识别形状。因为每个形状都有一个名字,所以找一个从来都不是问题。顺便说一句,ID标识形状的形状。但是在“Shapes”集合中,每个项目都有一个
索引
。我正在探索一个相关的“怪癖”,Excel会告诉您形状中有n个形状。计数,但最后一个会给您一个错误。到目前为止,我只能找到n-1。(不,索引不是从0开始。)与此相关:导致形状循环崩溃的神秘形状:幽灵形状!