我想设置一些 VBA,以便提示用户选择 2 个不同的文件路径,然后将这些文件设置为两个不同的 powerquery 表中的源。我只想设置它,以便 powerquery 代码可以引用 VBA 定义的变体,而不是引用 Excel 工作表中的命名单元格。有什么解决办法吗?
我当前的解决方法是,我有一些 VBA 提示用户选择一个文件路径,然后选择另一个文件路径。然后,这些文件路径将设置为工作表上的两个不同的单元格值。我已命名这些单元格(“PopManFilePath”和“ClinComFilePath”)。 我的 powerquery 中的源设置为那些命名的单元格。 请参阅下面的 VBA:
Sub FileSelectandRefreshQueries()
Dim answerpop As Integer
answerpop = MsgBox("Please select your population management file in the following window. It must be a .csv file.", vbOKCancel, "Instructions")
If answerpop = vbOK Then
Dim PopManFileName As Variant
PopManFileName = Application.GetOpenFilename(fileFilter:="CSV Files (*.csv),*.csv", Title:="Please select population management file")
If PopManFileName <> False Then
ThisWorkbook.Worksheets("FilePaths").Range("B1").Value = PopManFileName
End If
End If
Dim answerclin As Integer
answerclin = MsgBox("Please select your clinical complexity file in the following window. It must be a .csv file.", vbOKCancel, "Instructions")
If answerclin = vbOK Then
Dim ClinComName As Variant
ClinComName = Application.GetOpenFilename(fileFilter:="CSV Files (*.csv),*.csv", Title:="Please select clinical complexity file")
If ClinComName <> False Then
ThisWorkbook.Worksheets("FilePaths").Range("B2").Value = ClinComName
End If
End If
ThisWorkbook.RefreshAll
End Sub
这是我非常简单的 powerquery 代码,用于在我的一个表中设置源:
let
LocalPath = Excel.CurrentWorkbook(){[Name="PopManFilePath"]}[Content]{0}[Column1],
Source = Csv.Document(File.Contents(LocalPath),[Delimiter="#(tab)", Encoding=1200, QuoteStyle=QuoteStyle.None]),
我觉得必须有一种更好的方法来做到这一点,而不涉及将文件路径写入单元格。
据我所知,避免使用 Excel 范围的唯一方法是更新公式。
Sub UpdateFileQuery(FilePath As String)
Const QueryName As String = "TestQuery"
Dim Query As WorkbookQuery
Set Query = ThisWorkbook.Queries(QueryName)
Query.Formula = "let" & vbNewLine & _
"Source = Folder.Files(" & Chr(34) & FilePath & Chr(34) & ")" & vbNewLine & _
"in" & vbNewLine & _
" Source"
Query.Refresh
End Sub
改善用户体验 (UX) 的方法有很多。
Application.GetOpenFilename