2

Excel 2010 を実行すると、このバージョンで常にこれらのシートを実行できます。これは、職場のターミナル コンピューターでローカルにのみアクセスされるためです。

Excel を使用して、多数のインポート プロセスと大きなフォルダーのフィルタリング/印刷バッチ機能を実行しています。関数の処理中に Windows 7 のタスク バー プログレス バーのビジュアルを利用して、関数がどれだけ進んでいるかを把握したいと考えています。進行状況を示すために他の視覚効果を使用することを検討しましたが、(可能であれば) これが最も明白でプロフェッショナルなスタイルのようです。

私はこれを機能させるために徹底的に調べてきましたが、役に立ちませんでした。これまでの私の理解では、Windows API 内で一般的に見られる ITaskbarList3 インターフェイスを実装する必要があるということです。私が見つけたコードから、それを機能させる方法を示しており、一度実装すると、残りはかなり簡単で自明のように思えます。

私はコードの基礎として Excel を使用することに完全に制限されており、職場のコンピューターへのインストール許可はありません。自宅でインストールして必要なファイルを取得し、転送できます。目的はそれが必要とする手段が何であれ正当化するので、目的に到達するために大規模な、または本当に後方の方法を使用することを嬉しく思います。

4

1 に答える 1

4

Excel ステータス バーを使用する方がはるかに簡単です。

Application.StatusBar = "進行状況をユーザーに表示...";


Windows & タスクバー プログレス バーについては、Windows 7 タスクバーをダウンロードする必要があります : Developer Resources .

サンプル ソリューションを開く必要があります。Windows7.DesktopIntegration プロジェクトを右クリックし、[プロパティ] > [ビルド] > [Tick Register for COM] をクリックします。

開発中に IDE で [COM 相互運用に登録] オプションをオンにすると、IDE は /codebase オプションと共にターゲット アセンブリで regasm を呼び出します。

これにより、regasm.exe は、アセンブリからエクスポートされた COM 可視クラスの次のレジストリ エントリを追加します。

HKEY_CLASSES_ROOT\CLSID{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\InprocServer32\CodeBase=

これにより、CLR はアセンブリへのパスをたどってアセンブリを見つけることができます。コードベース パスがない場合、CLR は標準の検索アルゴリズムを使用してアセンブリ (およびその依存関係) を見つける必要があります。

次に、ソリューションをビルドします > Windows7.DesktopIntegration プロジェクトの bin フォルダーに移動し、Windows7.DesktopIntegration.DLL と Windows7.DesktopIntegration.TLB を System32 フォルダーにコピーするか、GAC に登録します。

CLR が必要なアセンブリを見つけるのに役立つ関連手法の 1 つは、すべてのアセンブリ (およびその依存関係) をクライアント アプリケーション自体と同じフォルダーにコピーすることです。ただし、この場合のクライアント アプリケーションは Excel になります。これは、アセンブリを Excel アプリケーションと同じフォルダーにコピーする必要があることを意味します (お勧めできません)。

Windows7.DesktopIntegration DLL をインスタンス化できるようになると、Windows7Taskbar.SetProgressValueVBA コードなどのメソッドを呼び出すことができるようになります。

Set Windows7Taskbar = CreateObject("Windows7.DesktopIntegration")

Windows7Taskbar.SetProgressState(form.Handle, Windows7Taskbar.ThumbnailProgressState.Normal)

Windows7Taskbar.SetProgressValue(form.Handle, progress, maximum)
于 2012-10-02T00:51:10.943 に答える