首页 > 解决方案 > Excel VBA 间接解决方法

问题描述

更新

请参阅下面的原始问题。

代码现在是:

函数 Getvalue(CellRange As String) 作为 Variant

Dim path As String
Dim file As String
Dim sheet As String
Dim str As String 
set rng = Range(Cell Range)

    yr = Format(CStr(Now), "yy")
monthn = Format(CStr(Now), "mmmm")

path = "C:\Folder\Subfolder\"
file = "File-" & monthn & ", FY''" & yr & ".xls"
sheet = "Sheet1"
rng = Range(CellRange)

str = "'" & path & "[" & file & "]" & sheet & "'!" & rng.Address( , ,xlR1C1)

GetValue = Application.ExecuteExcel4Macro(str)
结束函数


Sub Routine()
Call GetValue("A1")
End Sub

当我在 VBA 中使用子程序并使用 F8 执行函数时,正在监视“GetValue”,GetValue 的值返回我想要的值。它从关闭的工作簿中提取数据。但是,当我将 =GetValue("A1") 放入工作表上的单元格时,它会返回 #VALUE!


老的:

我有一个工作表,它在多列中引用来自一个工作簿的数据。我的问题是工作簿每个月(和每年)都会更新和重命名。我可以每个月浏览并更改链接,但我觉得应该有一种自动化的方式来做到这一点。

假设文件名是 (File-August, FY''20),所以每个月/年我都会更改文件名中的月/年。

我不想使用间接函数,因为我希望能够保持参考工作簿关闭。

但基本上我想要一个替代方案:

=INDIRECT("'C:\Folder\Subfolder\[File-" & TEXT(TODAY(),"mmmm") & ", FY''" & TEXT(TODAY(),"yy") & ".xls]Sheet1'!" & A1)

(完整路径是 'C:\Folder\Subfolder[File-August, FY''20.xls]Sheet1'!A1)

月、年和单元格是动态的。

我是 VBA 的初学者,所以我从研究中拼凑了一些代码,但我知道它可能有很多问题。我试图做到这一点,以便我可以使用 UDF 并调用单元格,但我不知道这是否可能。

Function Getvalue(CellRange As String) As Variant

    Dim path As String
    Dim file As String
    Dim sheet As String
    Dim str As String 
    Dim rng As Range
    
        yr = Format(CStr(Now), "yy")
    monthn = Format(CStr(Now), "mmmm")
    
    path = "C:\Folder\Subfolder\"
    file = "File-" & monthn & ", FY''" & yr & ".xls"
    sheet = "Sheet1"
    rng = Range(CellRange)
    
    str = "'" & path & "[" & file & "]" & sheet & "'!" & rng
    
  Result = ExecuteExcel4Macro(str)
    
End Function

输入时返回#VALUE

谢谢你!

标签: excelvbaexcel-indirect

解决方案


推荐阅读