我正在尝试编写一个UDF,它将把包含路径,工作簿名称,工作表名称和单元格引用的字符串转换为公式,以便我可以轻松地从其他工作簿返回值。例如,我的字符串如下所示:
='C:\FolderAlfa\SubfolderBeta\[Book1.xlsx]Sheet2'!$D$4
我尝试了Application.Evaluate(string)
和ExecuteExcel4Macro(string)
方法,但是它们都不起作用。
我将不胜感激!
答案 0 :(得分:0)
您不能使用UDF插入公式。恐怕您将不得不使用XLM宏来引用已关闭文件中的范围。我发现此信息HERE
所以在实践中:
我的测试文件值:
经过一些编辑的代码:
Private Function GetValue(path, file, sheet, ref)
Dim arg As String
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function
Sub TestGetValue()
With ActiveWorkbook.Sheets(1)
path = .Cells(1, 3)
file = .Cells(2, 3)
sheet = .Cells(3, 3)
ref = .Cells(4, 3)
.Cells(1, 1) = GetValue(path, file, sheet, ref)
End With
End Sub
使用按钮并分配宏以在点击时运行
答案 1 :(得分:0)
根据我发现的here,可以使用UDF更改单元格并插入公式。
这有点麻烦(也许有人可以改善它),但是它可以工作。您还需要重新计算无法从函数getValue和子addFormula触发的内容。您必须将它放在其他地方。参数rg是要放置公式的单元格。确保不是放置getValue的单元格。
Function getValue(rg As Range, path As String, file As String, sheet As String, ref As String)
Evaluate "addFormula( " & Chr(34) & rg.Address & Chr(34) & "," & Chr(34) & "'" & path & "[" & file & "]" & sheet & "'!" & ref & Chr(34) & ")"
getValue = ""
End Function
Sub addFormula(trgAddress As String, myFormula As String)
Dim trgRg As Range
Set trgRg = Range(trgAddress)
trgRg.Formula = "=" & myFormula
End Sub
在工作表选择更改中,我添加了计算方法。当然,这不是最好的方法,但它表明是可能的。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.Calculate
End Sub
关于如何使用它:函数在D5中,结果在E5中