1

セルをダブルクリックして編集できないようにする、C# で Excel XP 用の COM アドインを作成しようとしています。

この方法でセルを編集することは禁止されているというボックスをポップアップして、すべての実行を停止したいと考えています。

Microsoft のドキュメントを見ると、これは非常に簡単な作業のように思えますAppEvents_SheetBeforeDoubleClickEventHandler。シグネチャを使用して Application イベントを作成し、実行を停止するように truefunc(object sheet, Range Target, ref bool Cancel)に設定します。Cancel

私は次のものを持っています:

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
    Excel.Application app = application as Excel.Application;
    app.SheetBeforeDoubleClick += Excel.AppEvents_SheetBeforeDoubleClickEventHandler(beforeDoubleClick);
}

void beforeDoubleClick(object sheet, Excel.Range Target, ref bool Cancel)
{
    MessageBox.Show("Cannot edit cells this way sorry.");
    Cancel = true;
}

メッセージボックスが表示されますが、セルは編集モードになりますが、VBA から同じものがあれば機能します。

次のコードを使用する VB.NET アドインでも同じことが起こります。

Private WithEvents app As Excel.Application
Public Sub OnConnection(ByVal application As Object, 
                            ByVal connectMode As Extensibility.ext_ConnectMode, 
                            ByVal addInInst As Object, 
                            ByRef custom As System.Array) 
                            Implements Extensibility.IDTExtensibility2.OnConnection
    app = application
End Sub

Sub Worksheet1_BeforeDoubleClick(ByVal obj As Object, 
                                 ByVal Target As Excel.Range, 
                                 ByRef Cancel As Boolean) 
                                 Handles app.SheetBeforeDoubleClick
    MsgBox("Double-clicking in this sheet is not allowed.")
    Cancel = True
End Sub
4

1 に答える 1

3

コードの実行に問題はありませんでした。「キャンセル」により、ダブルクリック操作が妨げられました。

一部の検索で、MSKB から次の情報が見つかりました。 BUG: Visual Studio .NET 2003 では、Office イベントのキャンセル パラメータが無視されます

キャンセル パラメータを無視するこの動作は、Visual Studio .NET 2003 (.NET Framework 1.1) を使用して作成された .NET コードを使用する場合、Excel バージョン 2002 以下に存在するようです。

この記事には、Interop Assembly を手動で調整する複雑な回避策が記載されています。ただし、かなりの量の努力があれば、かなり実行可能に見えます。

VS 2005 または VS 2008 にアップグレードする方が簡単です。.NET 3.5 を対象とする VS 2008 を使用してコードをコンパイルし、Excel 2007 でコードを実行しました。

ちなみに、ユーザーは、数式バー内で入力するか、コピーと貼り付けコマンドを実行するなどして、値を入力できます。ユーザーが値を入力できないようにするには、代わりにワークシートを保護します。

于 2009-04-15T21:48:09.320 に答える