使用VBA将公式分配给Excel单元格

问题描述 投票:2回答:1

如何将公式(从网络驱动器上的另一个文件中读取数据而不打开它)分配到另一个Excel文件中的单元格,在同一个驱动器上,但在另一个文件夹中?

最终用户拥有网络驱动器上所有文件夹的访问权限,因此无需用户名和密码。

我是VBA的新手,并尝试使用以下代码但提示找到并打开数据文件:

Dim Network_Path As String

Network_Path = "\\MyNetworkDrive\folder\subfolder"

With ThisWorkbook.Sheets("Sheet1")
    .Range("C2").Formula = "=SUM('Network_Path\[Source_File.xlsx]Data'!$B$2:$B$20)"
End With
excel vba excel-vba excel-formula
1个回答
2
投票

尝试将NetworkPath写为公式中的变量:

.Range("C2").Formula = "=SUM(" & Network_Path  &  "\[Source_File.xlsx]Data'!$B$2:$B$20)"

关于带变量的公式的一般调试,请尝试以下简单技巧:

Public Sub TestMe()
    Dim np              As String 'do not use "_" in file name FWIW
    np = "C:\Users\"      'or something else
    Debug.Print "=IFERROR(INDEX('" & np & "[Source_File.xlsx]Data'!A:A; MATCH('Sheet1'!C3;'" & np & "[Source_File.xlsx]Data'!R:R; 0)); "")"
End Sub

然后查看即时窗口中的内容。按Ctrl + G将其打开。目前公式的结果是:

=IFERROR(INDEX('C:\Users\[Source_File.xlsx]Data'!A:A; MATCH('Sheet1'!C3;'C:\Users\[Source_File.xlsx]Data'!R:R; 0)); ")

因此,您可能必须找到一种方法来删除最后一个"标志:enter image description here

然后尝试将公式复制到Excel文件中,如果有效,则可以。


另一种选择是尝试做相反的事情。例如,在Excel中编写公式,因为它应该编写并确保它有效。然后选择具有公式的单元格并运行以下命令:

Public Sub PrintMeUsefulFormula()

    Dim myFormula  As String
    Dim myParenth  As String

    myParenth = """"

    myFormula = Selection.Formula
    myFormula = Replace(myFormula, """", """""")

    myFormula = myParenth & myFormula & myParenth
    Debug.Print myFormula

End Sub

它将在即时窗口中打印公式,因为它应该在VBA中使用。然后用变量替换路径并尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.