【问题标题】:Export Power Queries from One Workbook to Another with VBA使用 VBA 将电源查询从一个工作簿导出到另一个工作簿
【发布时间】:2016-12-14 03:34:53
【问题描述】:

我希望使用 VBA 将电源查询从一个工作簿转移到另一个工作簿。我知道如何手动执行此操作,但非常麻烦。

可以通过 Workbook.Connections 对象访问电源查询。 我目前正在尝试使用 VBA 函数或 Sub 移植查询。

手动流程如下

  • 对于工作簿 1 中的每个查询
  • 打开工作簿 1 并转到高级编辑器 - 复制到文本编辑器中
  • 打开工作簿 2 创建查询,并将文本粘贴到高级编辑器中
  • 确保源表相同 - 并运行查询来验证

【问题讨论】:

  • 请参阅此处了解如何提问:stackoverflow.com/help/mcve。如果/当您遇到困难时,请开始编码并在遇到特定问题时回来,因为这不是代码工厂。也许这:blog.crossjoin.co.uk/2015/06/10/… 可以帮助您入门。欢迎来到 SO!
  • 感谢反馈,我会更新的。我参考了其他问题,这个问题是有效的。我提到了 Workbook.Connections 对象,它是技术代码。
  • 对象不是代码。如果您不知道如何使用该对象或询问有关对象的特定内容,那么这将是一个主题问题。照原样,您基本上说:“我想做某事。我不知道该怎么做,但也许这个对象是相关的。我没有尝试过任何事情,也没有创建任何代码。请为整个解决方案编写代码我。”其他问题可能也不好。一旦你真正尝试自己做,你实际上在不到 2 小时内就做到了。我很高兴你采取了主动。
  • 我同意。我是一个堆栈菜鸟。我的坏
  • 另一种手动过程是:打开源文件的工作簿查询窗格,选择所有查询,右键单击并选择复制,打开目标文件的工作簿查询窗格,右键单击并选择粘贴。

标签: vba excel powerquery


【解决方案1】:

我能够通过使用 Workbook.Query 对象来解决它。

这是我的解决方案。

            Public Sub FunctionToTest_ForStackOverflow()
                ' Doug.Long
                Dim wb As Workbook

                ' create empty workbook
                Set NewBook = Workbooks.Add
                Set wb = NewBook

                ' copy queries
                CopyPowerQueries ThisWorkbook, wb, True

            End Sub

            Public Sub CopyPowerQueries(wb1 As Workbook, wb2 As Workbook, Optional ByVal copySourceData As Boolean)
                ' Doug.Long
                ' copy power queries into new workbook
                Dim qry As WorkbookQuery
                For Each qry In wb1.Queries
                    ' copy source data
                    If copySourceData Then
                        CopySourceDataFromPowerQuery wb1, wb2, qry
                    End If

                    ' add query to workbook
                    wb2.Queries.Add qry.Name, qry.formula, qry.Description
                Next
            End Sub

            Public Sub CopySourceDataFromPowerQuery(wb1 As Workbook, wb2 As Workbook, qry As WorkbookQuery)
                ' Doug.Long
                ' copy source data by pulling data out from workbook into other
                Dim qryStr As String
                Dim sourceStrCount As Integer
                Dim i As Integer
                Dim tbl As ListObject
                Dim sht As Worksheet

                sourceStrCount = (Len(qry.formula) - Len(Replace$(qry.formula, "Source = Excel.CurrentWorkbook()", ""))) / Len("Source = Excel.CurrentWorkbook()")

                For i = 1 To sourceStrCount
                    qryStr = Split(Split(qry.formula, "Source = Excel.CurrentWorkbook(){[Name=""")(1), """]}")(0)
                    For Each sht In wb1.Worksheets
                        For Each tbl In sht.ListObjects
                            If tbl.Name = qryStr Then
                                If Not sheetExists(sht.Name) Then
                                    sht.Copy After:=wb2.Sheets(wb2.Sheets.Count)
                                End If
                            End If
                        Next tbl
                    Next sht
                Next i

                qryStr = qry.formula


            End Sub


            Function sheetExists(sheetToFind As String) As Boolean
                'http://stackoverflow.com/questions/6040164/excel-vba-if-worksheetwsname-exists
                sheetExists = False
                For Each sheet In Worksheets
                    If sheetToFind = sheet.Name Then
                        sheetExists = True
                        Exit Function
                    End If
                Next sheet
            End Function

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多