森田森田

今回はコメントでテキストボックスの設定についてご質問を頂いていましたので、その回答になります。

ご質問と回答

デフォルトの設定でテキストボックスを枠線なし、塗りつぶし無しとしたいのですがいい方法はないでしょうか?ちなみにテンプレートファイルで規定のテキストボックスの設定を試しましたが、既存のファイル等に対応できずに困っています。
テンプレートファイルで規定のテキストボックスの設定は、これから作成する「新規」ブックでのみ適用されます。
もし、既存のブックにもその設定を適用したい場合は、VBAしかないですね。

【対応方法例】VBAで既存ブックのテキストボックスの規定の設定を変更する

参考までに既存ブックのテキストボックスの規定の設定を「枠線なし」「塗りつぶしなし」にするためのVBAコードを書いてみました。

コードの解説

ポイントを絞って解説していきますね。

変数” myDocument”

2行目ですね。こちらの変数は、マクロを起動した時点でアクティブなブックの1番左にあるワークシートが格納されます。

1つ目のWithステートメント

3行目に記載した方ですね。

こちらで変数” myDocument”のShapesコレクションを指定しています。

Shapesコレクションはブック内のすべての図形が含まれます。

つまり、1番左のシートのすべての図形を操作対象にしているわけですね。

その上で、4~9行目に入れ子にしてある2つ目のWithステートメントの内容で設定しているのです。

ちなみに、ブックのいずれかのシートで図形の規定の設定を行えば、同じブック内であればその設定は共通になります。

2つめのWithステートメント

4~9行目に記載した方ですね。

実質、こちらの内容で具体的なテキストボックスの設定をしていることになります。

まず、4行目は、AddTextboxメソッドで新しいテキストボックスを作成しています。

AddTextboxメソッドは5つの変数(msoTextOrientationHorizontal, 10, 10, 10, 10)があり、左から次のような意味です。

  • テキストボックスの文字列の向き:横
  • テキストボックスの左上隅の位置(左側):10ポイント
  • テキストボックスの左上隅の位置(上側):10ポイント
  • テキストボックスの幅:10ポイント
  • テキストボックスの高さ:10ポイント

正直このテキストボックスはこのあと削除するので、2~5番目の変数は何ポイントでも支障はありませんので、10ポイントはなんとなくです。

5行目は、Fillプロパティですね。こちらでテキストボックスの塗りつぶしをなしにしています。

6行目は、Lineプロパティですね。こちらでテキストボックスの枠線をなしにしています。

7行目は、SetShapesDefaultPropertiesメソッドですね。こちらが今回の肝となるメソッドですね。

このメソッドで上記の書式をテキストボックスの規定の設定にすることができます。

そして、8行目は、Deleteメソッドです。このメソッドにて4行目で新規作成したテキストボックスを削除しています。

上記マクロの前提

実際に、テキストボックスの設定を変えたい対象のブックを開いている状態で上記マクロを起動すれば、以降に挿入するテキストボックスは「枠線なし」「塗りつぶしなし」になります。

ただし、質問者の方の質問だけでは、VBAの設定を細かく指定できていないため、上記マクロは以下の前提のもとに作成していますので、ご容赦ください。

  • 上記マクロはあくまでも1ブックだけが対象に設定変更するもの
  • 実際質問者の方が、「既存のファイル等」と表現している内容が複数ブックがあるのか不明(データもドライブ上にどのように格納しているか)
  • 該当ブックに読み取り・書き込みパスワードの設定があるのか不明
  • 該当ブック内にすでにテキストボックスがあるのか不明(ある場合は、そのテキストボックスの書式も変更するのかも不明)

よって、質問者の方の環境や意向によっては、上記マクロのカスタマイズが必要になりますよ。

たとえば、次のようなイメージですね。

  1. 対象の既存ブックを開く
  2. 上記マクロ
  3. 上書き保存
  4. ブックを閉じる
    ※複数ブックある場合は上記をループ

正直、どれだけ既存ブックのテキストボックスを挿入する予定なのか不明ですが、その頻度によっては手作業でも問題ない可能性もありますよ。

さいごに

通常業務で図形やテキストボックスをVBAで操作することはほぼないので、個人的に勉強になりました。

オブジェクトごとのメソッドやプロパティは多いですが、マクロ記録で実際にどのようなVBAコードが書かれるのかを調べてから、知らないコードを個別にググれば何とかなりそうなレベルですね。

ちなみに、質問者の方が設定してみたという「テンプレートファイルで規定のテキストボックスの設定」については、別記事でまとめてみる予定です。

ご参考になれば幸いですm(_ _)m

森田森田

質問者のmasaさん、回答が遅くなり申し訳ありませんでした。
もし、不明点や質問の取り違い等あれば、コンタクトフォーム経由でご連絡くださいね。

この記事が気に入ったら
いいね ! しよう