1

SaveAsコマンドを正しく機能させるのに苦労しています。地元の病院の場合、テンプレート ファイルから作成された患者カルテがあり、そこに患者データが入力された後、(名前を付けて保存を使用して) 手動で名前を変更し、バックアップとして別の場所にコピーします。テンプレートは何度も再利用されます。

私のコードの目標は、このプロセスを自動化することです。したがって、テンプレート ファイルから始めて、2 つの異なる場所に保存したいと考えています。テンプレート ファイルは上書きしないでください。テンプレートでは、ユーザーは部門名とベッド番号をセル K1 と N1 にそれぞれ設定します。これらのフィールドは、そのフォルダー内のフォルダーとファイル名を決定します。

保存ボタンが押されると、私のコードが実行を開始します。SaveCopyAs を使用してバックアップ ファイルを保存し、その後、SaveAs を使用してプライマリ フォルダーに保存します。SaveAs は、この新しいファイルを作業ファイルとして設定する必要があるため、テンプレートを上書きしません。少なくともこれは私が信じていることです...

問題: を実行するSaveAsと、Excel がクラッシュします (明確なエラー メッセージは表示されません)。SaveAs(私にとって)奇妙なことは、に置き換えてもクラッシュしないことですSaveCopyAs

質問: この時点で Excel がクラッシュするのはなぜですか? この動作を修正または回避する方法はありますか? テンプレートを変更しない適切なソリューションが見つかりません。ヘルプや提案は大歓迎です。

以下のコードは「ThisWorkbook」フォルダーに配置され、「保存」ボタンをクリックするたびに実行されます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    department = Range("K1").Value 'Name of department: CHIC, THIC, ICB or NCIC
    bedNumber = Range("N1").Value 'bednumber or roomnumber: Bed 1. Bed 2 or Room 1, Room 2.
    newFileName = department & "\" & bedNumber & ".xls"

    If IsEmpty(department) Then
        MsgBox "You haven't entered a department. Please try again."
    ElseIf IsEmpty(bedNumber) Then
        MsgBox "You haven't entered a bed or room number. Please try again."
    Else
        ActiveWorkbook.SaveCopyAs "C:\myBackupFolder\" + newFileName
    End If


    ActiveWorkbook.SaveAs "C:\myPrimaryFolder\" + newFileName 'Doesn't work

    'ActiveWorkbook.SaveCopyAs "C:\myPrimaryFolder\" + newFileName 'Does work, but I end up with a messed up template!
End Sub
4

1 に答える 1

1

デフォルトの保存動作を防止するように設定するだけでなくCancel = True、以下を追加します。

Application.EnableEvents = False
ActiveWorkbook.SaveAs "C:\myPrimaryFolder\" + newFileName 'Doesn't work
Application.EnableEvents = True

同じプロシージャが再度呼び出されるのを防ぐため (そしてもう一度..)。これがおそらくクラッシュする理由です。

于 2013-07-03T17:38:46.923 に答える