使用VBA在单元格中引用其名称中的工作表

时间:2013-11-16 23:21:47

标签: excel vba excel-vba reference excel-2003

我试图找出如何使用VBA创建由单元格值定义的引用。

我有一个表单,可以将工作簿的名称和位置输入到单元格中(例如A1)。然后,我希望我的VBA代码将此单元格的值作为对该文件位置的引用。

而不是引用是“f:test / file.xls”我希望它是'f:test / filedata.xls sheet1 A1'(显然不是文件路径,但希望你能得到这个想法)。

这将允许我构建一组互连的工作簿,这些工作簿可以存储在不同的地方,并且具有不同的名称,而无需每次都对位置进行硬编码(使用userform到单元格中输入位置)。

我不确定这是否可行,我当然也看不到类似的东西。这是希望!

干杯

2 个答案:

答案 0 :(得分:0)

我并不完全清楚你想要达到的目标,所以我不打算明确地回答你的问题。相反,希望这会让你朝着正确的方向前进。

下面是我所拥有的代码片段,它引用电子表格中的单元格,并使用该单元格作为文件路径与包含文件名的相邻单元格组合。然后将它们合并在一起并用于打开该工作簿。

我不得不从我开始的部分中删除一堆代码,以使这个例子更清晰,所以我没有按原样测试。但是,我希望它能为你想要达到的目标提供一个很好的启动点。

Private Sub OpenWBs(iCell)

Dim FilePath As String
Dim iCell As String

'refers to file path in cell A1
FilePath = ActiveSheet.Range("A1").Value

'refers to name of the workbook in cell A2
iCell = ActiveSheet.Range("A2").Value


If Not IsEmpty(iCell) Then 'checks for empty value, if found exits, if not opens workbook
    Workbooks.Open Filename:=FilePath & iCell & ".xls", ReadOnly:=True
Else
    Exit Sub

End If

End Sub
祝你好运!

答案 1 :(得分:0)

让我们说在单元格A1中的活动工作表中,您将拥有这样的字符串:

C:\Temp\VBA\source.xls!Sheet1!A1

然后参考工作簿'source.xls'然后范围'Sheet1!A1'可以完成,例如像这样:

Dim fullRef As String
fullRef = ActiveSheet.Range("a1")
' fullRef = "C:\Temp\VBA\source.xls!Sheet1!A1"

Dim path As String
path = Left(fullRef, InStr(fullRef, "!") - 1)
' path = "C:\Temp\VBA\source.xls"

Dim wb As Workbook
Set wb = Workbooks.Open(path)
' now workbook 'source.xls' should be opened

Dim rangeAddress As String
rangeAddress = Right(fullRef, Len(fullRef) - InStr(fullRef, "!"))
' rangeAddress = "Sheet1!A1"

Dim rn As Range
Set rn = Range(rangeAddress)
' now rn is referencing cell 'A1' on sheet 'Sheet1' in workbook 'source.xls'