0

作業中のプロジェクトでは、プロジェクトごとにメインのワークブックを保存することはできないため、ユーザーがデータのエクスポートを作成して単一のプロジェクトに保存できるようにしたいと考えています。

データを別のワークブックにエクスポートする関数を作成しましたが、エクスポートされたデータをユーザーが直接変更しないようにしたいと思います (別のファイル形式を設定することで、ユーザーはワークブックを開くことについてもっと考え、したがって、「偶然」にそれをしないでください)

だから私の質問は: ユーザーにファイルを .clg ファイルとして保存するように強制できますか?

編集:

.SaveAsファイルを保存し、形式を「51」(.xlsx と同じ) として指定することで問題を解決しました。以前GetSaveAsFilenameは、ユーザーが場所 (つまり、プロジェクト フォルダー) を決定し、.clg ファイルのみを参照できるようにしていました。 .

Dim sFullName As String
sFullName = exportFile.Application.GetSaveAsFilename(thisFile.Sheets("Project information").Cells(1, 2).Value, "Export files (*.clg),*.clg", , "Choose export location", "Export")
If Not Len(sFullName) = 0 Or sFullName = "False" Then

    exportFile.SaveAs Filename:=sFullName, FileFormat:=51

End If

exportFile.Close

誰かが Monshaw 氏のアプローチを使用したい場合、1 つの方法は、変数 withevents を持つクラス モジュールを作成することです。つまり、変数で発生するイベントはすべて、モジュールで発生します。

Public WithEvents wbk As Workbook

クラスのインスタンスをコレクションに追加するなどして、メモリ内に保持することを忘れないでください。

を使用するもう 1 つの方法BeforeSaveは、コードを動的に記述することです。http://www.ozgrid.com/forum/showthread.php?t=163903を参照してください。

4

2 に答える 2

1

「clg」は使用する形式ですか? または、ランダムではなく xls/x 拡張子だけですか?

ファイルを表示して Excel で表示する必要がある場合 (Windows カタログ ファイルをエクスポートしていないと思いますか?)、拡張子を変更することは最善の方法ではない可能性があります。

VBA を使用してエクスポートを作成する場合、いくつかのことを自動化して、ユーザーがデータを編集してはならないことをより明確にすることができます。

このWorkbook.SaveAsメソッドには、ワークブックを開くときに読み取り専用で開く必要があることをユーザーに通知する "ReadOnlyRecommended" のオプションがあります。(ただし、オプションであるため、無視することができます)

データが常に読み取り専用であると仮定すると、変更を加えられないようにブックをロックすることもできます。

アップデート

Excel ブックをカスタム拡張子 (カスタム形式ではなく) で保存する場合は、Workbook.SaveAsメソッドを使用すると機能します。元:ThisWorkbook.SaveAs "Report.clg"

エクスポート コードでこれを行う必要があります。または、より手動のプロセスの場合は、標準の名前を付けて保存ダイアログを使用する代わりに、名前を付けて保存を呼び出すボタンを備えたマクロを作成することができます。

カスタム形式として保存したい場合、それがサポートされている形式Workbook.SaveAs(サポートされている形式) の 1 つでない場合は、@Mr.Monshaw が提案したように実行し、onbeforesave を監視してファイルを手動で生成する必要があります。(誰かが Excel から Windows カタログへのコンバーターを作成した可能性は低いです)

于 2013-08-09T13:31:26.570 に答える
0

clg の定数が何であるかはわかりませんが、vba の SaveAs の fileformat プロパティを使用すると、保存する形式を決定できます

ファイル形式を見つけることができれば、これに似たものに対する巧妙な解決策を見ました。次のようなワークブック イベントを使用してブックにマクロを追加するだけです。

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

    Call SaveAsCLG(SaveAsUI)          'set save type
    Cancel = True                                 'cancel user save

End Sub

ユーザーの名前を付けて保存要求をオーバーライドします

于 2013-08-09T13:36:45.460 に答える