[[20230419190904]] 『ドキュメントの回復を無視したい』(ブルーハム) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ドキュメントの回復を無視したい』(ブルーハム)

Excelをタスクスケジューラで5分おきに起動からシャットダウンまでを実行しています。
Excel起動時にはvbaで自動で実行されるコードがあります。

ここから聞きたいことなんですが、エクセルを起動してvba実行中に途中でエラーで止まり、
そこにタスクスケジューラでの強制終了を実行すると、次回エクセルを開いた時にドキュメントの回復というのが出てきます。
vba自体は実行されるのですがシートが何もないドキュメントの回復のみ表示されたExcelが開きっぱなしになり、その後タスクスケジューラも機能しなくなりました。
Excelのオプションから自動回復のチェックなどは外しているのですが状況は変わりません。

私としてはドキュメントの回復自体を表示しないようにできないものかと考えています。
なにか方法はありますか?

< 使用 Excel:Excel2010、使用 OS:Windows10 >


2点確認します。

>Excelのオプションから自動回復のチェックなどは外しているのですが
これは、
「このブックの自動回復を行わない。」にチェックが入っているということですか?
それともチェックしていない?

また、
>タスクスケジューラでの強制終了を実行すると
とは、事前にエラーになるタイミングが分かっているということなんですか?追加説明ください。

(xyz) 2023/04/19(水) 19:57:50


回答します。

1点目の質問について
チェックは入っています。

2点目の質問について
かれこれ1ヶ月間今回の作業を行なっていますが、2日くらい回したところでエラーが出ています。
vbaのコードが長くてここには書けませんが2023年4月18日の質問の「実行時エラー 1004 rangeクラスのcopypictureメソッドが失敗しました。と一定確率で出るのを何とかしたい」ってやつです。
もうエラーが出るのは仕方ないと思い、途中で止まった場合強制終了してしまうようにExcelを強制終了するタスクを組みました。

説明下手ですいません。
(ブルーハム) 2023/04/19(水) 20:20:01


拝見しました。

[[20230418162302]]
の継続案件なんですね。
解答者は全てのスレを見ているわけではないので、
きちんと関連情報は書いてくださいね。
自分にとっては当たり前でも。
(xyz) 2023/04/19(水) 20:35:33


 う〜ん、エラーが出ないのが最善なのですが
 試して無いけど…応急処置になるかどうか?

 VBAには、この「このブックの自動回復を行わない」の設定をコードで行う事が出来ます。
http://blog.livedoor.jp/katsuyausami/archives/52107517.html

(あみな) 2023/04/19(水) 20:48:35


xyz様

申し訳ございません。

以後気をつけます。
(ブルーハム) 2023/04/19(水) 20:50:15


既に実行済みかとも思いますが、
https://answers.microsoft.com/ja-jp/msoffice/forum/all/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9/63090c23-3e6c-4855-80c5-d9e8684972c8
を試してみてはいかがですか?
・タイミング待ちの方法(順序も含む)
・Pictures.Pasteの利用等
(xyz) 2023/04/19(水) 21:44:06

あみな様
xyz様

回答ありがとうございます。

ご提案の方法それぞれ試してみます。
(ブルーハム) 2023/04/19(水) 21:48:47


 昔取った杵柄でPowerShell経由で・・・

[[20230315152401]] 『シート内の画像を個別に保存 指定列のセルから名』(フリスク)

    Option Explicit
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Sub Workbook_Open()
        Dim wb As Workbook: Set wb = ThisWorkbook
        Dim ws As Worksheet
        Dim msg As String
        Dim f As Integer
        Const path As String = "C:\???\???\???\???\???\???\"
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False

        For Each ws In Worksheets
            flgNum = 0
            Select Case ws.Name
                Case "報告書"
                    Call 画像保存(ws.Range("D4:N52"), path & "image" & "1.png", msg)
                Case "グラフ"
                    '範囲1
                    Call 画像保存(ws.Range("A1:Y35"), path & "image" & "2.png", msg)

                    '範囲2
                    Call 画像保存(ws.Range("A36:Y70"), path & "image" & "3.png", msg)
                Case Else
                    '何もしない
            End Select
        Next ws
        msg = Mid(msg, 2)
        f = FreeFile
        Open ThisWorkbook.path & "\出力ログ.log" For Append As #f
            Print #f, msg
        Close #f
        ThisWorkbook.Save
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        Application.Quit
    End Sub
    Private Function 画像保存(rng As Range, filepath As String, ByRef msg As String)
        Dim cmd As String
        Dim filesize As Long
        Dim tmp As Long
        tmp = 0
        filesize = FileLen(filepath) '<--これって何の意味があるの?
        If FileLen(filepath) <= filesize Then
            rng.Copy
            DoEvents
            Sleep 100
            cmd = cmd + "Add-Type -AssemblyName System.Windows.Forms;$ImagePath = '" & filepath & "';  [Windows.Forms.Clipboard]::GetImage().Save($ImagePath, [System.Drawing.Imaging.ImageFormat]::png)"
            'WScriptから、PowerShellにコマンドを渡す。260文字以内
            'Command:="powershell -NoLogo -ExecutionPolicy RemoteSigned -Command "
            '↑がPowershellの定型文
            'WindowStyle 1表示 0非表示
            'WaitOnReturn True同期実行 False非同期実行 ※但し、Runの場合のみ。exeでは必ず同期実行になる
            With CreateObject("WScript.Shell")
                .Run Command:="powershell -NoLogo -ExecutionPolicy RemoteSigned -Command " _
                    & cmd _
                    , WindowStyle:=0 _
                    , WaitOnReturn:=False
            End With
            tmp = 1
        Else
            tmp = -1
        End If
        msg = msg & Chr(10) & Format(Now, "yyyy/mm/dd h:mm:ss") & "," & rng.Parent.Name & "," & rng.Address(0, 0) & "," & IIf(tmp = 1, "成功", "失敗")
    End Function
(稲葉) 2023/04/20(木) 10:15:21

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.