ラベル VBA の投稿を表示しています。 すべての投稿を表示
ラベル VBA の投稿を表示しています。 すべての投稿を表示

2020-02-04

Excelのルビ振り機能を有効に使う

Excelのルビ振り機能にはちょっと変わった制約があります。
  • フォントリボン→ふりがなボタンによりルビ振りを呼び出す場合、シートに直接手入力した文字でないとルビを振ってくれない。つまりコピー&ペーストした文字についてはルビを振ってくれない
  • VBAでSetphonetic関数を使用すれば、コピー&ペーストした文字についてもルビ振りが可能(ただしWindowsのみ、Macでは不可)
なんでこんな事になってるんですかね?下記はSetphonetic関数の呼び出し例です。



2016-05-16

VBA:非同期処理を考慮したダブルクリック防止処理

GUIコンポーネントに対するユーザの操作はしばしば、こちら(開発者側)の思惑から外れることが多いです。例えばボタンなどの場合は、ワンクリックすべきところをダブルクリックしてしまったり、何度もクリックしてしまうことがあります。そのような誤操作が起きないよう工夫が開発側に求められるわけで、一般的には、
  • ボタンの無効化
が解決策として出てきます。VBAでは、クリックイベントのサブモジュールがの中でenableやlockedのプロパティをfalseにする処理を入れれば解決できます。

しかし、ボタンクリック時の処理に「非同期処理」が入ってくると厄介です。例えば、クイズゲームのプログラムで
  • ボタンをクリックした時に「ピンポーン」と音を鳴らして正誤判定をする
という処理を考えます。VBAでは、サウンド再生にはAPIを利用しますが、これは非同期処理です。つなりサウンド再生の後のコードはすぐに実行されるので、音が鳴り終わるまでは無効化しておく必要があります。そこで、waitメソッドを呼び出してコードの実行を停止すればいいのですが、その際には、
  • Doeventの呼び出しが必須
という1点だけTIPがあります。下記のコードは、クリックをしたあと3秒間はボタンを無効にするという処理を書いています。実は、Doeventを書かないと、ダブルクリックをすると、2秒後に2回目のクリックに反応してしまいます。



VBA:フォームは既に表示されているので、モーダル表示することはできませんというエラーが出た場合

Form1に配置したボタンをクリックした際に、別のフォーム(Form2)を表示するとともに、自分のフォーム(Form1)は消し、Form2に配置されたボタンを押して再度Form1を表示するという処理を考えます。
この処理を行うには、showメソッドやhideメソッドを組み合わせたらできるということは用意に想像できますが、時々、表題にあるように
  • フォームは既に表示されているので、モーダル表示することはできません
というエラーが出る時があります。これは、各メソッドの呼び出し順に注意する必要があります。結論から言えば、
  • Hideメソッドで自身(Me)を消した後に、新しいフォーム(呼び出したいフォーム)をshowする
という手順ならエラーがでることなくきちんと動きます。



2015-05-15

VBAでWin32APIを利用したサウンドの再生と停止

VBAにはサウンドを再生するメソッドは標準で用意されていません。そこで、Win32APIを利用することになります。ここでの注意事情ですが、
  • VBAのアプリを終わらせてもサウンドは鳴り続けるので、終了処理において必ず停止させる必要がある。
  • 再生できるフォーマットはmp3、wav、mid
  • mp3については再生できない場合がある
最後のmp3についてですが、詳細はわかりませんが、OSの何かの設定の違いにより、mp3を読み込ませるとフリーズすることがあります。同一のプログラムを異なるPCで実行させた時に、片方は再生成功、片方は再生失敗(フリーズ)という状況が起こりました。そのPC自体がmp3を再生できないというわけではないので、何かの設定の問題でしょう。


2015-03-09

VBAにてPDF形式で保存する

VBAを利用してExcelのシートをPDF形式で保存する処理は下記のようになります。下記ではファイル保存ダイアログを呼び出してますが、別名でファイル保存を使ってファイル形式を指定させる手間が省けます。

2012-08-30

Excel:VBA開発を有効にする

ExcelでVBAを利用する際、デフォルトでは有効になっていないので以下の手順で有効にします。

1.オプションを開く


2.リボンのユーザー設定

リボンのユーザ設定を選ぶと、右側のペインに「開発」というのがリストにあると思います。それにチェックを入れます。


3.開発リボンを確認

開発のリボンが新しくできていると思います。