1

VBAコードを記述して、任意のExcelファイルに対してアクションを実行できますか?

Visual Studioでプロジェクトを作成すると、 Excelファイルをリンクするよう求められます。私が書いたコードはすべて含まれているため、プロジェクトにリンクされたExcelThisWorkbook.vbファイルに対してのみ機能します。


理想的には、次のようなスクリプトが必要です。

  1. ユーザーがダブルクリックしたときに、そのファイルに対して実行するアクションのために選択したExcelファイルを選択できるようにする必要があります。
  2. 上記が不可能な場合は、少なくともExcelファイル内からVBAスクリプトを呼び出したいと思います。

基本的に、VBAコードはExcelファイルから独立している必要があります。

VBScriptを見ましたが、構文が少し異なるようです。

4

2 に答える 2

5

Visual Studio、VBA、およびVBScriptについて言及しました。私が概説しているソリューションは、Visual StudioやVBScriptではなく、VBAで直接機能します。(ただし、以下で概説する内容に沿ってVisual Studio(C#またはVB)を適応させることもできます。)お役に立てば幸いです。

これが私が行うことであり、上記の@chrisがコメントしているように、最終的には.xlamExcelアドインになります。

概要

まず、通常の.xslxブックに、VBAプロジェクトを追加して、.xlsmにします。次に、いくつかのVBAサブ(マクロ)を作成します。次に、ブックのExcel QAT(クイックアクセスツールバー)ボタンをいくつか作成します。これらのボタンは、VBAサブ/マクロにバインドされています(つまり、呼び出されます)。次に、ブック(VBAが含まれている)をExcelアドインである.xlamに変換します。すべて完了したら、任意のブックからボタンにアクセスできます(VBAコードは、.xlsmに元々含まれていたものだけでなく、すべてのユーザーブックにもアクセスできます)。さらに、.xlamに関連付けられているブックは表示されません。したがって、すべてのユーザーの.xlsxウィンドウに表示されるいくつかのボタンをQATに追加したように見えます。.xlamは、ユーザーがインストールするのは非常に簡単です(ただし、バージョンをアンインストール/再インストール/チェックするためのボタンを提供しています)。ユーザーのブックとは関係なく、.xlamをアップグレードできます。

詳細

後で使用するExcelSubsをいくつか作成します

ボタンはパラメータなしでマクロ(VBA Subs)のみを呼び出すことができることに注意する必要があります。そのため、マクロはActiveSheetやActiveWorkbook、Selectionなどをチェックして、ボタンが押されたシート、つまり実際に操作するユーザーデータを確認する必要があります。の上。(VBAコードが含まれているワークブックを参照する必要がある場合は、「ThisWorkbook」を使用してください)。名前の競合が発生する可能性があることに注意する必要があるため、MySomewhatUniqueProjectName_button1などのかなり長い名前でパラメーターなしのサブに名前を付けるようにしてください…</ p>

.xlsmにボタンを追加します

Excel 2010(これは2007以降で機能すると思います)を使用して、リボンのQAT部分にブック固有のボタンを配置します。このボタンはVBAコードのマクロ(VBAサブ)に接続します。

これを行うには、クイックアクセスツールバーのカスタマイズドロップダウン(Excelウィンドウの最上行にある小さな下向き矢印、左から右への最後のアイコン)から[その他のコマンド...]を選択します。[クイックアクセスツールバーのカスタマイズ]ダイアログボックスが表示されたら、(2番目の)[クイックアクセスツールバーのカスタマイズ:]見出し(右上)から、[すべてのドキュメントの場合]ではなく、ドロップダウンから[XYZ.xlsmの場合]を選択します。 (デフォルト)"。また、[コマンドの選択元:]の下から、ドロップダウンから[人気のあるコマンド]の代わりに[マクロ]を使用します。これら2つを選択したら、[追加>>]を使用してVBAサブを左側のボックスから右側のボックスに移動できます。そのように移動するたびに、QATに表示されるボタンになります。これを行っているときに、ボタンのアイコンとテキストを編集することもできます。必要に応じてセパレーターを追加します(他の.xlamがQATを使用する場合に備えて、常にセパレーターで終了します)。(今がこの.xlsmを保存する良い機会です。)

.xlsmを.xlamに変換します

次に、.xlsmを.xlamファイルとして保存するだけで、.xlsmをExcelアドインに変換します。これにより、(1)使用しているコードに関連付けられているブックが非表示になります(ただし、それ自体には引き続きアクセスできます)。さらに、(2)(現在は.xlamであるため、非表示)ブックは、Excelが読み込まれるたびに読み込まれます。(ユーザーがExcelを使用しているが、VBAコードを実行しない場合にこれを高速に保つために、.xlamがロードされているときはコードを実行せず、ボタンが押されたときにのみコードを実行します。) Excelのアドインマネージャー。アドインを更新するには、いくつかのトリックを使用する必要があります。Excelが実行されていないときにコピーすることはできますが、アドインを直接アンインストールすることはできません。Excelからのみ無効にすることができます。ただし、無効にすると、.xlamを削除して、Excelを再起動できます。アドインマネージャに移動して、(現在はなくなっている)アドインを操作してみてください。Excelが見つからないというメッセージが表示されるので、削除しますか。はいと言うと、アンインストールされます。

参考までに、メモ

後で編集するために.xlsmを保持しますが、実際に.xlamをデバッグして編集し、後で少し工夫して.xlsmに戻すことができます。VBAで「ThisWorkbook」エントリを見つけてから、「IsAddIn」を見つけます。プロパティをfalseに設定すると、そのブックが突然表示され、.xlsmとして保存するか、ブックを編集してプロパティをtrueに戻し、.xlamとして直接再保存できます。)

于 2012-09-06T08:05:33.527 に答える
0

答え 1

VB.Netでもそれを行うことができます。通常のプロジェクトを作成するだけです。( @SLaks によるコメント)

これは私にとって非常にうまく機能し、まさに私が探していたものでした.

答え 2

@ErikEidt によって投稿された非常にわかりやすい回答

私はこれを試したことはありませんが、マクロを機能させるための優れた代替方法のようです。

于 2012-12-12T03:49:09.307 に答える