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:看到并完全工作的代码了吗?为什么是Dim
col
作为字符串,并用数字填充它???
rw
是一个变量,你声明它的方式是这样的。如果你声明变量时非常合适,你就不必使用
+-0
。@R3uK是的,它应该是整数,会编辑它,但它会作为字符串工作。