2016-12-13 3 views
-2

Я ищу передачу запросов энергии из одной книги в другую с помощью VBA. Я знаю, как это сделать вручную, но это очень громоздко.Экспорт запросов мощности от одной книги к другой с помощью VBA

Доступ к источнику питания можно получить через объект Workbook.Connections. В настоящее время я пытаюсь передать запросы с помощью функции VBA или Sub.

Ручной процесс выглядит следующим образом

  • для каждого запроса в книге 1
  • открыть книгу 1 и перейти к расширенному редактор - скопировать в текстовый редактор
  • открыть учебное пособие 2 создать запрос, и вставки текста в расширенный редактор
  • обеспечивают исходные таблицы одинаковы - и запустить запрос для проверки
+1

См. Здесь, как задать вопрос: http://stackoverflow.com/help/mcve. Пожалуйста, начните кодирование и вернитесь, когда у вас возникнет конкретный вопрос, если/когда вы застряли, поскольку это не фабрика кода. Возможно, это: https://blog.crossjoin.co.uk/2015/06/10/power-queryexcel-2016-vba-examples/ может помочь вам приступить к работе. Добро пожаловать в SO! – OpiesDad

+0

Спасибо за отзыв, я обновлю его. Я ссылался на другие вопросы, и вопрос действительно. Я упомянул объект Workbook.Connections, который представляет собой технический код. – dfresh22

+0

Объект не является кодом. Если вы не знали, как использовать объект или спрашиваете что-то конкретное об объекте, тогда это будет вопрос по теме. Как обычно, вы в основном сказали: «Я хочу что-то сделать. Я понятия не имею, как это сделать, но, возможно, этот объект имеет значение. Я ничего не пробовал, и я не создал никакого кода. меня." Другие вопросы, вероятно, тоже были не очень хорошими. Как только вы на самом деле пытались сделать это сами, вы на самом деле сделали это менее чем за 2 часа. Я рад, что вы взяли инициативу. – OpiesDad

ответ

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