0

ユーザーが情報を入力してから「株式の追加」ボタンを押すExcelのユーザーフォームがあります。このボタンを押すと、情報がスプレッドシートに入力され、スプレッドシートが「ActiveWorkbook.Save」で保存されます。

問題は、仕事用のコンピューターが古く、Excel がクラッシュする傾向があることです。スプレッドシートが自動回復されると、ストックの追加機能が機能しなくなり、コード 75 エラーでクラッシュします。この場合、ユーザーが手動で CTRL-S を押すまで、ActiveWorkbook.Save は機能しないようです。上司は、私たちのユーザーはこれを管理するのに十分なほどコンピュータに精通していないと断固として言っているので、Excel がクラッシュしたかどうかを何らかの方法で確認し、クラッシュした場合は、使用を開始する前にファイルを自動的に保存する必要があります。

自動回復状態にあるかどうかを確認し、(ActiveWorkbook.Save なしで) 保存して、ユーザーが問題なくフォームを引き続き使用できるようにするにはどうすればよいですか? どうもありがとう。

4

1 に答える 1

0

これを確認する直接的な方法は見つかりませんが、いくつかの厄介なオプションがあります。自動回復されたワークブックが存在する可能性のあるワークブックの状態が 2 つある場合、ユーザーによって最後に保存された状態または自動保存された状態のようです。キャプションは、それがどの状態にあるかを反映します。この関数は、キャプションにそのフレーズが存在するかどうかを確認します。

Public Function IsInAutoRecoverMode(wb As Workbook)

    Dim wn As Window

    Set wn = wb.Windows(1)

    IsInAutoRecoverMode = _
        wn.Caption Like "*[Autosaved]?" Or _
        wn.Caption Like "*[Last saved by user]?"

End Function

これとこれだけが英語以外の環境で確実に失敗する州が他にあるかどうかはわかりませんので、注意して使用してください。

ユーザーが最後に保存した場合、Workbook.Path プロパティはファイルが保存されている場所です。Autosaved の場合、Workbook.Path プロパティは Application.AutoRecover.Path と同じです。まあ、それらは私のマシンでは同じです。それは単なる偶然かもしれませんが、私はそれを疑っています。

ユーザーによって最後に保存されたパスは区別できないため、それを使用して自動回復モードかどうかを判断することはできません。ただし、ユーザーが自動保存されたワークブックを開いた場合は、単に保存するのではなく、適切な場所に名前を付けて保存する必要があります。必要なソリューションを得るには、これらの両方の手法を使用する必要がある場合があります。

あなたは非常に勤勉で独創的であるため、これらの回避策を上司に伝えてください。ただし、文書化されておらず、いつでも失敗する可能性があります。少なくとも、推測に基づいていることを理解せずに使用することはありません。最終的な結果をお知らせください。

于 2013-04-05T17:14:45.373 に答える