如何提取纯单元格引用而非完整工作簿路径?VBA跨工作簿问题
解决方法:提取目标单元格的列号或纯地址
看起来你是把获取到的单元格引用直接当成字符串处理了,才会得到带工作簿和工作表路径的完整引用。其实当你通过用户选择获取单元格时,得到的是一个Range对象,直接用它的内置属性就能轻松拿到你要的列号或者纯单元格地址,不用去字符串里截取~
方法1:直接获取列号
如果你只需要该单元格对应的列序号(比如B列就是2,C列是3),用Range对象的.Column属性就行:
Dim targetCell As Range ' 弹出选择框让用户点击目标单元格 Set targetCell = Application.InputBox("请点击wbVendor中的目标单元格", "选择单元格", Type:=8) ' 获取列号 Dim columnNumber As Integer columnNumber = targetCell.Column MsgBox "选中单元格的列号是:" & columnNumber
方法2:获取不带工作簿/工作表的单元格地址
如果你需要类似$B$10这样的纯单元格地址,用.Address属性并指定External:=False(默认就是False,明确写出来更直观):
Dim targetCell As Range Set targetCell = Application.InputBox("请点击wbVendor中的目标单元格", "选择单元格", Type:=8) ' 获取纯单元格地址 Dim cellAddress As String cellAddress = targetCell.Address(External:=False) MsgBox "选中单元格的地址是:" & cellAddress
为什么之前会得到完整引用?
如果你的代码是把Range对象直接转成字符串,或者用了.Address(External:=True),就会返回包含工作簿和工作表的完整路径引用。比如下面这种写法就是错误示范:
' 错误示例:会返回带路径的完整引用 Dim wrongAddress As String wrongAddress = CStr(targetCell) ' 或者 wrongAddress = targetCell.Address(External:=True)
核心思路就是直接操作Range对象的属性,不用绕弯子处理字符串,这样就能精准拿到你需要的信息啦。
内容的提问来源于stack exchange,提问作者Dominic Landert
相关产品推荐
相关产品推荐

