« 2009年8月 | トップページ | 2009年10月 »

2009年9月の7件の記事

2009年9月27日 (日)

ユーザーフォームのテキストボックス内で改行文字列を取り出す(その1)

ユーザーフォームのテキストボックス(textbox)で
改行する方法です。

設定自体は簡単です。

▼方法1
テキストボックスのプロパティウィンドで、
以下の通り設定をします。

MultiLine = True
EnterKeyBehavior = True

▼方法2
ユーザーフォーム立ち上げ時の設定にて、

Private Sub UserForm_Initialize()

  With TextBox1
    .MultiLine = True
    .EnterKeyBehavior = True
  End With

End Sub

▼文字入力
この設定をした場合、テキストボックスに文字を
入力中に[Enter]キーを押すと、改行できます。

では、このような方法で入力された文字列は
どのような記載になるか?ですね。

例えば、テキストボックス(TextBox1)に以下の文字列を
入力したとします。

あいうえお
かきくけこ

上記は「あいうえお」の文字列の後で[Enter]
を押して改行してあります。

▼取得できる文字列
この場合、

TextBox1.Value = "あいうえお" & vbCrLf & "かきくけこ"

となっているようです。

改行は、vbCrではなくて、vbCrLfなんですね。

ここがポイントです。

次回は、この記述を応用して、取得した文字列を
.iniファイルに書き出す方法をメモします。

| | コメント (0) | トラックバック (0)

2009年9月26日 (土)

VBA for DUMMIES 5th Edition (マクロ本の紹介)

VBA本の紹介です。初めて買った洋書です。

ワード専用のマクロ本があることを知らなかった頃、
とにかくVBAの情報源がほしいと思って購入しました。

ワードだけではなく、エクセルやアクセスなどのマクロ
についても説明されていますし、一応、VBA初心者を
対象に書かれたことになっています。

アメリカのアマゾンの書評をみると、けっこう酷評が目立ち
ますが、その理由が、「初心者に難しすぎる」だと思います。

1年以上前に購入したと思うのですが、使う部分は
未だに一部だけです。

私が1年間くらい手元に置いて、良かったと思う点と
やっぱり使いにくいと思う点をまとめました。

▼おすすめする理由

①表紙の裏にある「Cheat Sheet」が使えます。

cheat sheetとは、カンニングペーパーの意味ですが、
これが本当に役に立ちます。

最近は、このカンニングペーパーしか見ていません。

一覧表とその説明が載っているので、ちょっとしたときに
すぐに思い出せます。

・VBAで使えるショートカットキーの一覧 Alt + F11 Alt + F8など
・VBAの共通ファンクション一覧 InputBox, MsgBox, CStr, CIntなど
・変数の種類一覧 Boolean, Date, Double, Integerなど

②Chapter17:Ten Kinds of VBA Resources

ここに、Newsgroupへの登録やMZ-Toolsが紹介されていました。

今では、ワードマクロを作る上で欠かせない情報源であり
ツールになっています。

③Indexページを辞書として活用

以前も紹介したかもしれませんが、この手のマクロ本を
私は隅から隅まで読んでいるわけではありません。

何かほしい情報があったときに調べるために使っています。

この本は、Indexが比較的細かく載っているので、
自分の調べたいメソッドやプロパティの項目がわかる場合
には、その言葉をIndexで調べています。

▼使いにくいと思う点
①記載されているプログラム文は読みにくく感じます。

自分の力不足ではあるのですが、初心者向けというわりに
用語の説明が少ないように感じます。

今もなお、参考例文として使うには難しすぎます。

②Word2007をベースに説明しています。

私はWord2003を使っているので、Word2007の画面だけで
説明してある本書は使いにくく感じてしまいます。

| | コメント (0) | トラックバック (0)

2009年9月20日 (日)

ユーザーフォームの表示位置を保存する(.iniファイル利用)

最近、iniファイルをよく利用します。

変数を覚えさせるのに都合がいいですね。

特に、ユーザーフォームを使う場合には、ユーザーフォームの表示位置を保存したり(前回表示したとき場所を移動させた場合に、次に表示させるときに同じ場所に表示させること)、ユーザーフォームに表示させる文字やオプションボタンの設定を保存したりできます。

これを使うと、ユーザー個人の設定を保存させることができるので、プログラムの使い勝手が非常によくなりますね。

▼参考図書

WORD HACKS (こちらの記事で紹介しています)
P.185 「.iniファイルに設定やデータを保存する」

ここに、iniファイルに値を読み書きする場合のルールが記載されていますので参考にしてみてください。

ポイントは3つの情報で登録する内容を特定できるという点でしょうか。

非常に便利ですね。

たとえば、「ファイル名.ini」>「ユーザーフォームの場所」>「左端」

というカテゴリーで分類できます。

同様に、「ファイル名.ini」>「ユーザーフォームの場所」>「上端」

という設定もできます。

上記の場合、ファイル名.iniというファイルにユーザーフォームの場所、という項目名を与えて、そこの上端、または左端という変数が設定されます。

この上端と左端の変数に値を保存するという訳です。

▼ユーザーフォームの設定

ユーザーフォーム(UserForm1)を作ります。

コマンドボタンを一つ作成し、その名前をCMB_cancelとします。

これをキャンセルボタンとして使います。

なお、下記のマクロを実行すると、ファイル名.iniという.iniファイルが作成されてしまいますので、ご注意ください。別に害はないと思いますが。。。

保存先は、C:\WINDOWSのフォルダです。

ドライブ名はみなさんのパソコンによっては、C以外ですね。

ファイル検索で「ファイル名.ini」としても探せます。不要でしたら削除ください。

▼初期設定用マクロ

Private Sub UserForm_Initialize()

      Dim ufLEFT As Single
      Dim ufTOP As Single

10    On Error GoTo UserForm_Initialize_Error

20    ufLEFT = System.PrivateProfileString("ファイル名.ini", _
                   "form_position", "left")

30    ufTOP = System.PrivateProfileString("ファイル名.ini", _
               "form_position", "top")

40    With UserForm1
50        .StartUpPosition = 0
60        .Left = ufLEFT
70        .Top = ufTOP
80    End With

JN:

90    On Error GoTo 0

100     Exit Sub

UserForm_Initialize_Error:

110       If Err = 13 Then
120           GoTo JN
130       Else
140           msgbox "エラーが発生しました。終了します。"
150       End If

End Sub

▼キャンセルボタンのマクロ

Private Sub CMB_cancel_Click()

      '表示位置記憶
10    System.PrivateProfileString("ファイル名.ini", _
                   "form_position", "left") = UserForm1.Left
                
20    System.PrivateProfileString("ファイル名.ini", _
                   "form_position", "top") = UserForm1.Top

      'ユーザーフォーム終了
30    Unload Me

End Sub

▼初期設定のマクロの説明

Dim変数定義
ユーザーフォームの左端と上端の変数を小数点1桁までの数字として、それぞれufLEFT, ufTOPとして宣言しています。

10行 
エラー処理。ファイル名.iniという.iniファイルがない場合(初めてこのマクロを動かす場合)には、20行、30行において値を読み込めませんから、エラーが出ます。

そのときのために、エラー処理をもうけました。

20~30行
ユーザーフォームの左端と上端の値を「ファイル名.ini」から取得して代入。

40~80行
ユーザーフォーム(Userform1)の表示位置を設定。

StartUpPosition = 0 とすると、左端と上端との値を入力して、所定の場所にユーザーフォームを表示させることができます。

90行以降
エラー処理です。

「ファイル名.ini」が存在しないために、値を読み込めなくてエラーになった場合には、エラー番号(err)が13になります。

なので、この場合には、「JNにもどりなさい(goto JN)。」となっています。

つまり、40行から80行の場所決めの処理をスキップするということですね。

エラー番号が13以外の場合には、メッセージとともにプログラムを終了します。

▼キャンセルボタンのマクロの説明

キャンセルボタンをクリックしたときに、ユーザーフォームの位置を保存するように設定されています。

プログラムのコメントに書いたとおりです。

| | コメント (0) | トラックバック (0)

【改良版】図表番号を挿入する(Seqフィールドの利用)

先日紹介した、図表番号を挿入する(Seqフィールドの利用)の改良版です。

前回はプログラムだけ掲載しましたが、今回は機能を追加したテンプレートです。

テンプレートは、ベクターで紹介しようと思っていましたが、それほど説明が複雑なマクロではないので、ここで簡単に紹介します。

「insert_number.dot」をダウンロード

●作用

「図表番号の挿入」と「図表番号の相互参照」を簡単に実施します。

前回紹介したものは、図の番号だけでしたが、表の番号も同じことができるので、ボタンにしてみました。

相互参照をする場合には、自動的にフィールドが更新されますので、図や表の配置を入れ替えた場合でも、最新の番号が表示されます。

●作成背景

マクロのマニュアルを作成しており、表や図を使ってマクロの機能を説明しています。

ワードの機能である、図番の挿入や相互参照を使うことで、簡単にきれいに図表の番号を入れることができます。

それをさらに使いやすくしたのがこのマクロです。

●プログラム

前回紹介したものとほとんど同じです。

●使い方

①マクロテンプレートをインストールします。

②ツールバーに以下のようなボタン(4つ)が表示されます。

Insert_number

③【図No.】ボタンで、図番号を挿入します。このボタンをクリックすると、カーソル位置にあわせて適切な図番号が挿入されます。

たとえば、文書の末尾であれば、新しい図番が入ります。

また、図1と図2がすでに書かれており、図1と図2の間に図を追加する場合、新たに図2として追加されて、現在の図2は図3に自動で更新されます。

④「参照」ボタンをクリックすると、どの図を参照するのかインプットボックスが表示されます。

Insert_number2

すでに使われている図の番号(たとえば1)を入力すると、その番号が参照されたフィールド表示で「図1」などと入力されます。

フィールドで表示される、というのがみそです。

先ほどのように、マニュアル作成中に、図を追加していくと、それ以降の番号が順送りでずれますね。

フィールドで設定しておけば、「図2に示した配置で、」のような文中で使われる図番号も一緒に「図に示した配置で、」と更新されます。

ツールバーの右半分にある「【表No.】」ボタンおよびその右隣の「参照」ボタンでも表の番号挿入で上記の作用をします。

| | コメント (0) | トラックバック (0)

2009年9月14日 (月)

ワードで日記を書く場合のマクロ(改良前と改良後)

先日、OKwaveの掲示板でのワードマクロに関する質問に回答しました。

ワードで日記を書いていたら50ページにもなってしまったので、毎回日記ファイルを開くたびに「Ctrl + End」を押したときのような作業を自動でしてほしい、みたいな問いかけです。

詳細はこちら

そのときに紹介したプログラムのコードはこちらです。

▼プログラム1(改良前)

Sub AutoOpen()
      '文書の末尾へカーソル移動
10    Selection.EndKey Unit:=wdStory
      '改行
20    Selection.TypeParagraph
      '日付入力
30    Selection.InsertDateTime _
      DateTimeFormat:="MM/dd/yyyy", _
      InsertAsField:=False
      '改行
40    Selection.TypeParagraph
End Sub

プログラムは、ノーマルテンプレートのNewMacrosにコピペすれば使えますが、何らかのファイルを開くたびに日付が入ってしまってうっとおしかったので、以下のように修正しました。

▼プログラム2(改良後)

Sub AutoOpen()

      Dim myMessage As String
      Dim myTitle As String

10    myMessage = "文書の終わりに日付を入力しますか?"
20    myTitle = "日記の日付自動入力"

30    Select Case MSGBOX(myMessage, _
        vbOKCancel Or vbQuestion Or vbDefaultButton1, _
        myTitle)

      Case vbOK

          '文書の末尾へカーソル移動
40        Selection.EndKey Unit:=wdStory
         
          '改行
50        Selection.TypeParagraph
         
          '日付入力
60        Selection.InsertDateTime _
          DateTimeFormat:="MM/dd/yyyy", _
          InsertAsField:=False
         
          '改行
70        Selection.TypeParagraph

80    Case vbCancel
90        End
100   End Select

End Sub

▼プログラム解説

30行のselect caseがポイントです。

メッセージボックスで、「OK」ボタンと「キャンセル」ボタンとを表示するようにしています。

クリックしたボタンの種類により、実行するプログラムが変わります。

場合分けをする場合に重宝する表現です。

vbOKCancel Or vbQuestion Or vbDefaultButton1

これは合わせ技的な書き方ですね。3つの条件を Or でつなげています。

vbOKCancel:「OK」ボタンと「キャンセル」ボタンを表示。

vbQuestion :はてなマークを表示。

vbDefaultButton1:一つ目のボタンをデフォルトで選択する設定。

つまり、OKとキャンセルのボタンでは、OKボタンがデフォルトボタンになっているということ。

デフォルトボタンというのは、メッセージボックスが表示されたときにEnterキーを押したときに反応するボタンということ。

ちなみに、

vbOKCancel + vbQuestion + vbDefaultButton1

という表示でも同じ意味です。Or を + に変えました。

Case vbOK: これは、「OK」ボタンの場合、という意味。

Case vbCancel: これは、「キャンセル」ボタンの場合という意味(80行)。

| | コメント (0) | トラックバック (0)

2009年9月 5日 (土)

見出しマップの文字サイズを変更するマクロ

見出しマップに表示される文字の大きさを変更するマクロです。

見出しマップというのは、文書中の「見出し」をワードの作業画面の左側に階層表示する機能です。

メニューの 表示>見出しマップ で表示のオン・オフを切り替えられます。

見出し設定した位置までカーソルをワンクリックで移動できるので、文書の編集作業において非常に便利です。

●作成背景
私の場合は、明細書作成時に段落番号を見出し登録して、画面左側に段落番号一覧が「見出しマップ」として表示されるようにしています。

よって、特定の段落の文章を編集したい場合に、見出しマップの段落をクリックしてその段落に移動できるというわけです。

今回は、その「見出しマップ」の表示文字の大きさを変更するマクロです。

この表示文字が大きすぎると、編集領域が圧迫されて不便ですので、簡単に変更できるようにしました。

●参考資料
前回のブログで紹介した「Wordでテキパキ」のP.57に「『見出しマップ』のフォントを変える」という記事があります。

この作業(7ステップで説明)を1ステップでできるようにしました。

●プログラム
Sub 見出しマップの文字サイズ変更()

      Dim Message As String
      Dim Title As String
      Dim MyValue As Integer

      'メッセージ、タイトルの設定
10    Message = "ポイントを入力してください。"
20    Title = "見出しマップの文字のポイント設定"

      'インプットボックスを表示
30    MyValue = InputBox(Message, Title)

      '文字サイズを変更
40    ActiveDocument.Styles("見出しマップ").Font.Size = MyValue
         
End Sub

●プログラム解説
10行~30行
文字のサイズを入力します。

Inputbox関数を用いており、入力された数字は、整数型の変数であるMyValueに格納されます。

40行
見出しマップに表示される文字の大きさをMyValueに格納されている数値に設定します。

●作り方
フォントサイズを8にする場合の作業を、マクロの自動記録で記録してコードを書き出します。

具体的な作業内容は、「Wordでテキパキ」のP.57に記載されているとおりです。

すると、以下のようなコードが得られます。

ぱっと見て、着色部分しかいらないことに気がつきます。

Stylechange_2 なぜなら、他の項目は、左のイメージに示したとおり、「スタイルの変更」ダイアログボックスの項目に対応しているだけで、自動で記録されてしまっているコードだからです。

このあたりの判断は、マクロの自動記録を何度もやって、不要箇所を削除する作業を繰り返してみると感覚的にわかるようになります。

では、必要なコードを抜き出します。

With ActiveDocument.Styles("見出しマップ").Font
     .Size = 8
End With

は、

ActiveDocument.Styles("見出しマップ").Font.Size = 8

と同じ意味ですから、この上記のコードを用いて40行をつくってみました。

●自動記録されたコード
Sub Macro()

    With ActiveDocument.Styles("見出しマップ")
        .AutomaticallyUpdate = False
        .BaseStyle = "標準"
        .NextParagraphStyle = "見出しマップ"
    End With
    With ActiveDocument.Styles("見出しマップ").Font
        .NameFarEast = "MS ゴシック"
        .NameAscii = "Arial"
        .NameOther = "Arial"
        .Name = "MS ゴシック"
        .Size = 8
        .Bold = False
        .Italic = False
        .Underline = wdUnderlineNone
        .UnderlineColor = wdColorAutomatic
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .Color = wdColorAutomatic
        .Engrave = False
        .Superscript = False
        .Subscript = False
        .Scaling = 100
        .Kerning = 1
        .Animation = wdAnimationNone
        .DisableCharacterSpaceGrid = False
        .EmphasisMark = wdEmphasisMarkNone
    End With
End Sub

| | コメント (0) | トラックバック (0)

Wordでテキパキ 定型処理&日常業務 (書籍紹介)

またまた関連書籍の紹介です。

例の「ワードで実践」マクロ本の著者である西上原裕明さんの別の本を紹介します。

最近、私はワードのスタイルを学び始めたのですが、本書にもスタイル処理関連の情報がたくさん記載されています。

前回紹介した「エンジニアのためのWord再入門講座」は、どちらかというと、ワードを使いこなしている人向けのさらにひとつ上の段階の知恵が書かれているように思います。

この「Wordでテキパキ」は、まだワードの動作をはっきりとは理解しきれていない人向け、かもしれません。

私の場合、「エンジニアのための」でヒントを得たものの、具体的なやり方がわからない場合に、この「Wordでテキパキ」を読んで理解しています。

本書の「はじめに」に書かれているように、「いらない機能は気にしない」というスタイルで本書はまとめられているので、ちょうどいいくらいに機能が紹介されていると思います。

スタイルを学びたい方にお勧め。

スタイル以外にもオートコレクトやツールバーの作り方、ショートカットキーの登録など、おなじみの機能が多くの図(Word2003だと思います)で説明されているので分かりやすいと思います。

| | コメント (0) | トラックバック (0)

« 2009年8月 | トップページ | 2009年10月 »