【问题标题】:Excel VBA Export to Excel - Removing ConnectionsExcel VBA 导出到 Excel - 删除连接
【发布时间】:2018-11-09 14:52:46
【问题描述】:

我有一个工作簿,其中包含一些通过 VBA 脚本导出到 excel 的工作表。我正在导出的工作表之一有一个数据库连接,用于提取该报告期间的值。当我导出到 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

【问题讨论】:

    标签: excel database vba connection export


    【解决方案1】:

    也许是这样的:

    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
    

    【讨论】:

    • 更简单:For i = 1 To .Connections.Count : .Connections(1).Delete : Next
    • @MathieuGuindon touché 先生
    • 感谢您的回复。我添加了我目前正在使用的脚本。我正在导出 3 张纸。其中 2 个有一个数据库连接,用于提取所需的数据。您提供的剪辑在这种情况下仍然有效吗?如果它存在,我会将它插入脚本的哪个位置?还是我应该定义特定的表格以从中删除连接?
    • @MathieuGuindon 你好。我收到编译错误。我在脚本的“删除公式”部分之后添加了您的行。 '删除连接 Dim i 只要 i = 1 To .Connections.Count: .Connections(1).Delete: Next i
    • @JasonYuen . 暗示 With 块,就像这里的答案一样。 : 冒号也应该是换行符;我使用了说明分隔符,因为我不能在评论框中换行。
    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多