Excel VBA Экспорт в Excel - Удаление подключений - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть книга с несколькими листами, которые я экспортирую в Excel через VBA Script. На одном из листов, который я экспортирую, есть соединение с БД для получения значений за этот отчетный период. Когда я экспортирую в Excel, я замечаю, что соединение с БД все еще существует. Есть ли фрагмент кода, который я могу использовать для экспорта значений в листе, но удалить соединение с БД? Ниже приведен скрипт, который я сейчас использую для ежедневного экспорта отчета. Спасибо!

Sub refreshsummary()

    ' refreshsummary Macro

    Dim strdate As String

    'Refresh Data Summary View
    Sheets("Data").Select
    Range("b1").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

    'Fill Down Formula for Summary Data
    Sheets("Data").Select
    Range("A2:A10000" & LastRow).Formula = "=B2&"" ""&C2&"" ""&E2&"" ""&F2&"" ""&G2&"" ""&D2"

    'Refresh Data Export View
    Sheets("Data Export").Select
    Range("a1").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

    Sheets("Control").Select
    strdate = Format(Range("c2").Value, "mmm-dd-yyyy")

    ActiveWorkbook.Save

    'excel read only
    Application.DisplayAlerts = False
    Sheets(Array("Template", "Data Export", "Sales Breakdown")).Copy

    Dim ExternalLinks As Variant
    Dim x As Long

    'Create an Array of all External Links stored in Workbook
    ExternalLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)

    'Loop Through each External Link in ActiveWorkbook and Break it
    For x = 1 To UBound(ExternalLinks)
    ActiveWorkbook.BreakLink Name:=ExternalLinks(x), Type:=xlLinkTypeExcelLinks
    Next x

    'Removes Formulas
    Dim sh As Worksheet

    For Each sh In ActiveWorkbook.Worksheets
        With sh.Cells
            .Copy
            .PasteSpecial xlPasteValuesAndNumberFormats
        End With
    Next sh

    ActiveWorkbook.SaveAs Filename:="MYFILE.xlsx", FileFormat:=51, CreateBackup:=False

'End If

End Sub

1 Ответ

0 голосов
/ 09 ноября 2018

Может быть, что-то вроде этого:

With Workbooks("target workbook name")
    For i = 1 To .Connections.Count
        .Connections(1).Delete
    Next
End With

В вашем случае, похоже, вам нужно использовать With ActiveWorkbook. Обратите внимание, что удаление индекса i в конечном итоге приведет к ошибке, поскольку удаление изменяет итерируемую коллекцию: i в конечном итоге будет больше, чем размер коллекции.

В качестве альтернативы:

With Workbooks("target workbook name")
    Do While .Connections.Count > 0
        .Connections(1).Delete
    Loop
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...