Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 获取单击形状的地址_Excel_Vba_Range_Shapes - Fatal编程技术网

Excel 获取单击形状的地址

Excel 获取单击形状的地址,excel,vba,range,shapes,Excel,Vba,Range,Shapes,我正在寻找一种方法,在它的电子表格上获得点击形状的地址(位置) 换句话说,我想获得在工作表上单击的形状的地址 我正在使用此代码查找单击的形状的名称&ID,它工作正常: Dim CallingShapeName As Variant Dim CallingShapeID As Variant CallingShapeName = ActiveSheet.Shapes(Application.Caller).Name Debug.Print CallingShapeName CallingS

我正在寻找一种方法,在它的电子表格上获得点击形状的地址(位置)

换句话说,我想获得在工作表上单击的形状的地址

我正在使用此代码查找单击的形状的名称&ID,它工作正常:

Dim CallingShapeName As Variant

Dim CallingShapeID As Variant

CallingShapeName = ActiveSheet.Shapes(Application.Caller).Name

Debug.Print CallingShapeName

CallingShapeID = ActiveSheet.Shapes(Application.Caller).ID

Debug.Print CallingShapeID


但是,当我尝试使用此代码获取单击形状的地址时,它不起作用:

Dim ShapeAddress As Range

Set ShapeAddress = ActiveSheet.Shapes.Range(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address)

Debug.Print ShapeAddress

方法是将单击的形状指定给变量,然后可以使用该变量访问其属性,如中所示

Sub Rectangle1_Click()

Dim s As Shape

'assign object variable to clicked shape
Set s = ActiveSheet.Shapes(Application.Caller)

'then access its properties
Debug.Print s.Name
Debug.Print s.TopLeftCell.Address
Debug.Print s.BottomRightCell.Address
'etc

End Sub

Debug.Print ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
您可能还希望将单击的形状分配给变量,然后访问其属性,而不是每次都写出名称。感谢您的提示。我会给它分配一个变量,这肯定会很方便。但有一个问题。当我试图
设置ShapeAddress=ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
时,我得到了运行时错误'424'所需的对象。我在这里遗漏了什么?我添加了一个答案来说明这是一个两阶段的过程<代码>地址返回一个字符串,因此您尝试将字符串分配给形状(对象)变量。现在我有机会测试您的解决方案,效果非常好。非常感谢@SJR!您还让我意识到了我建议的代码不起作用的原因,单击的形状
ShapeAddress
的变量需要声明为字符串
,因为
TopLeftCell.Address
是作为字符串数据类型返回的。但将应用您的方法,因为您的代码更易于阅读和遵循。