VBA代码不会跳转到单元格
为什么我要做一个跳转到单元格的代码 地址存储在一个变量中 我尝试了两个选项,但这两个选项都不适用于该变量 他们和具体的牢房地址配合得很好VBA代码不会跳转到单元格,vba,excel,Vba,Excel,为什么我要做一个跳转到单元格的代码 地址存储在一个变量中 我尝试了两个选项,但这两个选项都不适用于该变量 他们和具体的牢房地址配合得很好 Dim stMsg As String Dim x As String x = Left(stMsg, Len(stMsg) / 2) 'x = 'Sheet2'!$C$8 '1 Option Application.Goto Reference:="x" 'this works with format: Sheet2!R8C3
Dim stMsg As String
Dim x As String
x = Left(stMsg, Len(stMsg) / 2) 'x = 'Sheet2'!$C$8
'1 Option
Application.Goto Reference:="x" 'this works with format: Sheet2!R8C3
'2 Option
With Range("x") 'this works with format: 'Sheet2'!$C$8 , which is exactly x
.Parent.Activate
.Activate
End With
它给了我
方法“范围”或对象“全局”失败”错误
stMsg
是在宏的第一部分中找到的一个变量。第一部分在单元格中获取一个公式,并在公式中找到前导项,即2。stMsg
存储它们,这就是为什么我将其拆分为x。stMsg
的值为'Sheet2'!$C$8'Sheet2'!$C$8
如何使其与x一起工作?
x
是您的变量,您试图将其用作“x”
,该文本仅包含字母x
因此,您的代码应该更像这样:
Dim x As String
x = Left(stMsg, Len(stMsg) / 2)
'''Option 1
Application.Goto Reference:=x
'''Option 2
With Range(x)
.Parent.Activate
.Activate
End With
并使用:OP提供的输入:
'Sheet2'!$C$8'Sheet2'!$C$8
Sub test_tombata(stMsg As String)
Dim x As String
x = Left(stMsg, Len(stMsg) / 2) 'x = "'Sheet2'!$C$8"
'Debug.Print x
'''Option 1
Application.Goto Reference:=Sheets(Replace(Split(x, "!")(0), "'", vbNullString)).Range(Split(x, "!")(1))
'''Option 2
With Range(x)
.Parent.Activate
.Activate
End With
End Sub
Sub test_tombata2(x As String)
'''Option 1
Application.Goto Reference:=Sheets(Replace(Split(x, "!")(0), "'", vbNullString)).Range(Split(x, "!")(1))
'''Option 2
With Range(x)
.Parent.Activate
.Activate
End With
End Sub
并使用:OP提供的输入:
'Sheet2'!$C$8
Sub test_tombata(stMsg As String)
Dim x As String
x = Left(stMsg, Len(stMsg) / 2) 'x = "'Sheet2'!$C$8"
'Debug.Print x
'''Option 1
Application.Goto Reference:=Sheets(Replace(Split(x, "!")(0), "'", vbNullString)).Range(Split(x, "!")(1))
'''Option 2
With Range(x)
.Parent.Activate
.Activate
End With
End Sub
Sub test_tombata2(x As String)
'''Option 1
Application.Goto Reference:=Sheets(Replace(Split(x, "!")(0), "'", vbNullString)).Range(Split(x, "!")(1))
'''Option 2
With Range(x)
.Parent.Activate
.Activate
End With
End Sub
尝试这两种方法的代码:
Sub TEST_test_tombata()
test_tombata "'Sheet2'!$C$8'Sheet2'!$C$8"
test_tombata2 "'Sheet2'!$C$8"
End Sub
通过假设K9包含目标范围,以下是希望:
Dim rw, col As integer
rw = Range(Range("K9").Value).Row
col = Range(Range("K9").Value).Column
Application.Goto ActiveSheet.Cells(rw + 0, col - 0)
你说你有两个选择:为什么不使用它们?它们不适用于variable@tombata:这是因为它不是一个变量,请检查我的答案!;)你为什么要这样做?可能有更好的方法。stMsg的值是多少?该变量是如何创建的?取str的长度似乎很奇怪ing,将该长度除以2(将任何1/2四舍五入到最近的偶数-例如,如果
stMsg
长度为11、12或13个字符,则计算6;如果长度为14个字符,则计算7;如果长度为15、16或17个字符,则计算8,等等),然后期望字符串开头的许多字符是有效的范围地址。@tombata:stMsg的输入是什么?stMsg
来自宏的第一部分。它是单元格中公式的先例。因此stMsg
在公式中查找先例(有两个先例)然后我想进入第一个先例。我使用x分割它们,这很好,但跳转到单元格却不行。@tombata:那么stMsg
的值是什么呢?使用Debug.Print stMsg
并告诉我它是什么。stMsg
的值是'Sheet2'!$C$8'Sheet2'!$C$8@tombata:看到并完全工作的代码了吗?为什么是Dimcol
作为字符串,并用数字填充它???rw
是一个变量,你声明它的方式是这样的。如果你声明变量时非常合适,你就不必使用+-0
。@R3uK是的,它应该是整数,会编辑它,但它会作为字符串工作。