2

我有一个挑战,至少对我来说,我显然无法应对。有人可以帮助我或建议如何在 Excel 关闭时运行宏吗?

通过 VBA 关闭 Excel 时,如何使宏运行?

Sub Upload0()
    ' Upload Webpage content
    Application.OnTime Now + TimeValue("00:00:15"), "Upload0"

    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://cetatenie.just.ro/ordine/articol-11", Destination:=Range("A1"))
        .Name = "CetatenieOrdine"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = True
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 1
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With

' Deletes empty cells
Columns("A:A").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp

' Adjust column width and delet useless rows
Rows("1:31").Select
Selection.Delete Shift:=xlUp
Range("B28").Select
Selection.End(xlDown).Select
Rows("17:309").Select
Selection.Delete Shift:=xlUp

End Sub

非常感谢大家!

4

2 回答 2

1

1:在模块中定义一个布尔标志,Public blnClosedVBA as Boolean并在关闭工作簿之前在 VBA 例程中将其设置为 true。然后在您的 Workbook_BeforeClose 事件处理程序(在 ThisWorkbook 下)中,执行以下操作:

If blnClosedVBA = True Then 
Cancel = True 'Stops the workbook from closing
'Rest of your code here
blnClosedVBA = False ' Set so next time you try to close the workbook, it actually closes
'Workbook.Close or ThisWorkbook.Close - depends on your answer to my question below

仅当您自己触发了关闭事件时,才会运行该例程。在例程结束时,将标志设置为 False 并触发另一个Workbook.Close将关闭工作簿

2:它应该适用于哪个工作簿?它应该是“ThisWorkbook”(您从中运行代码的那个)、“ActiveWorkbook”(激活的那个)还是另一个?

于 2013-03-22T12:15:09.600 回答
1

1.通过VBA关闭工作簿时如何使宏运行?

简短的回答:你不能那样做。您的代码是工作簿的一部分,除非在 Excel 中加载工作簿,否则它无法运行。当 Excel 启动时,您可能能够将代码移动到您选择默认加载的单独加载项工作簿(使用“Excel 选项|加载项”)。但是 Excel 仍然需要在您计算机上的某个位置运行。

您可以编写一个完全独立的程序来执行您想要的操作,将 Web 查询的结果写入 Excel 工作簿。我在这里假设您希望工作簿在您自己(当然是在 Excel 运行时)或其他资源引用时始终包含最新数据。如果您可以获得 Visual Basic 6 的副本(可能无法合法获得),那么这在语法上与 VBA 基本相同。下一个最接近的是 VB.Net。这在技术上会有些复杂。

2.另外,我有问题使这个宏只适用于一个工作簿而不是活动的工作簿:

我们可以处理这一行:这一行:

With ActiveSheet.QueryTables.Add(Connection:= _

意味着以下代码将始终针对具有焦点的工作表运行(即“活动” - 如果您键入内容将接收键盘输入的工作表)。就是ActiveSheet这样。尝试替换`ActiveSheet with something likeThisWorkbook.Sheet1 , whereSheet1` 是您在 VBA 编辑器的“属性”窗口中看到的工作表的名称,其中显示“(名称)”。

于 2013-03-22T13:59:25.727 回答