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

Public blnClosedVBA as Boolean1:ブックを閉じる前に、モジュールでブールフラグを定義し、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

これは、自分でcloseイベントをトリガーした場合にのみルーチンを実行します。ルーチンの最後に、フラグを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.また、このマクロを 1 つのワークブックでのみ機能させ、アクティブなワークブックでは機能させないという問題があります。

これを処理できます: この行:

With ActiveSheet.QueryTables.Add(Connection:= _

次のコードは、常にフォーカスのあるワークシートに対して実行されることを意味します (つまり、「アクティブ」 - 何かを入力した場合にキーボード入力を受け取るシート)。それActiveSheetがそうです。`ActiveSheet with something likeThisWorkbook.Sheet1を置き換えてみてください, whereSheet1` は、VBA エディタの [プロパティ] ウィンドウに表示されるシートの名前で、「(名前)」と表示されています。

于 2013-03-22T13:59:25.727 に答える