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
Vba 对包含工作表名称的字符串使用.range属性_Vba_Excel - Fatal编程技术网

Vba 对包含工作表名称的字符串使用.range属性

Vba 对包含工作表名称的字符串使用.range属性,vba,excel,Vba,Excel,我在工作簿中的单元格中有一个字符串,我正在使用该字符串定义一个范围的地址,应该在该范围内进行查找 例如,假设字符串名为LookupRange,其值为: ''Rate Sheet'!Y111:AA126 我的问题是,在我的代码中,当我设置范围时,我必须使用: Set yRange = ThisWorkbook.Worksheets("Rate Sheet").Range(LookupRange) 有没有一种方法可以在不使用.Worksheets()属性的情况下使用.Range()属性 例如,也

我在工作簿中的单元格中有一个字符串,我正在使用该字符串定义一个范围的地址,应该在该范围内进行查找

例如,假设字符串名为LookupRange,其值为:

''Rate Sheet'!Y111:AA126
我的问题是,在我的代码中,当我设置范围时,我必须使用:

Set yRange = ThisWorkbook.Worksheets("Rate Sheet").Range(LookupRange)
有没有一种方法可以在不使用.Worksheets()属性的情况下使用.Range()属性

例如,也许有一种方法可以做到:

Set yRange = ThisWorkbook.Range(LookupRange)

如果不是,我想我可能需要编写一些代码来从工作表范围中提取工作表名称?

假设
LookupRange
是一个字符串,您可以使用
Mid()
InStr()
从字符串中提取工作表和范围:


我不知道您正在进行什么样的查找,但这应该可以工作..(将其解析为字符串)


其中命名范围
“LookupRange”
是单个单元格,其中包含要在“查找”中使用的工作表地址
“Sheet2!Y111:AA126”
(或其他任何内容)。

该范围是工作表的属性。工作表应该被引用。我知道这并不是对你具体问题的确切回答,但你为什么要把查找范围放在单元格内?您是否考虑过创建命名范围,或者如果查找经常更改,甚至创建动态命名范围。然后,您可以使用
application.names(MyNamedRange).referestorange.Value
在vba中引用它们,因为我希望非vba excel用户能够根据需要更改范围。因为我接管了最初用公式完成的一些工作。我只是很惊讶没有VBA函数来获取包含工作表名称和区域地址的字符串,并将其转换为VBA可以使用的特定工作表对象和单元格区域。我的意思是Excel一直都在做这件事,对吗?@CharBram你已经看到我的答案了,对吧?…这到底发生在哪里。通过执行
debug.print rr.parent.name
检查它是否引用了正确的范围,以检查它是否引用了您期望/设置的工作表,不管是什么。是的,每次我尝试此操作时,在尝试设置rr时,我都会收到运行时错误。不起作用。似乎应用程序的range方法不接受字符串中的工作表名称。我很确定它可以工作。您从哪里得到错误?今天晚些时候我将再次尝试一个示例并报告。也许我做错了什么!这可能是目前最好的答案,只需使用字符串函数提取工作表名称和范围地址。我想最后,我将简单地重新设计他们如何在单元格中存储工作表名称和地址,或者简单地这样做。尽管如此,我还是很惊讶没有一个内置的方法或属性能够自动完成这项工作!!
Sub TestIt()
Dim LookupRange As String

LookupRange = "'Rate Sheet'!Y111:AA126"

SheetL = Mid(LookupRange, 2, InStr(2, LookupRange, "'") - 2)
RangeL = Mid(LookupRange, InStr(1, LookupRange, "!") + 1, Len(LookupRange))

Set yRange = ThisWorkbook.Sheets(SheetL).Range(RangeL)

End Sub
Sub range_set()

Dim rr As Range
Set rr = Range(CStr(Range("LookupRange")))

Debug.Print Application.WorksheetFunction.VLookup(1, rr, 2, False)

End Sub
Set yRange = Application.Range("'Rate Sheet'!Y111:AA126")