提示用户选择Power Query数据源

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

我想设置一些 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 vba powerquery
1个回答
0
投票

据我所知,避免使用 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
  • 消除第一个MsgBox
  • 如果您已经知道正确的文件夹,请使用文件名填充列表或组合框
  • 创建一个用户表单来获取文件
© www.soinside.com 2019 - 2024. All rights reserved.