« 【改良】クイックソートを用いてアルファベットの文字列を並び替え | トップページ | 文頭の文字を大文字化 »

2009年12月 5日 (土)

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

ようやく、最終回です。ユーザーフォームのテンプレートを用意しました。

Get_data

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

こちらの記事のコメントでkonnoさんから教えていただいた「Replace関数」を用いました。

おかげさまで、Split関数を用いないためエラー処理が簡易になり、
結果として短いプログラムになりました。

英文を書くときの「ワンセンテンス・ワンミーニング」のルールを意識して、
1つの行に、ひとつの機能を書いてみました。

プログラムの作成経緯は、下記をご覧ください。

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

▼使い方
1.インストールします。こちらをご覧ください。
2.ツールバーに表示された[ユーザーフォーム表示]ボタンをクリックします。
3.表示されたユーザーフォームに文字をいれたり保存したりして
  機能を試してみてください。

▼留意点
前回までのプログラムと違い、「みんなのワードマクロ_get_data.ini」という
ファイル名のini.ファイルにデータを保存することにしました。

よって、前回のプログラムで保存した文字列を呼び出すことはできません。

前回のプログラムで用いた「ファイル名.ini」というini.ファイルが不要になります。

ini.ファイルはWindowsフォルダに入っていますので、気になる方は、お手数ですが
ご自身で削除ください。

削除しなくても、基本的なパソコンの使用において悪影響はありません。
ごみファイルとして、たまっているというかんじです。

▼プログラムの解説

①(保存用)
プログラムを短く書くことができます。

      'テキストボックスの文字列の改行記号(vbCrLf)を★●★に置換する
20    myTextData = Replace(TextBox1.Value, vbCrLf, "★●★")

      '保存用文字列を.iniファイルに保存
30    System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1) = myTextData

とありますが、

'テキストボックスの文字列の改行記号(vbCrLf)を★●★に置換して、.iniファイルに保存
20    System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1) = Replace(TextBox1.Value, vbCrLf, "★●★")

こう書けば、1行になります。

②(データ取得用)
80行の「MsgBox Err.Description」は、エラーの内容を表示してくれるので
便利です。

エラーが発生すると通常は、エラー番号(Err)が表示されますが(例えば、13など)、
これでは何が起こったのかよくわかりません。

なので、エラーの内容を示すErr.Descriptionは便利だと思います。

今回のプログラムでは、特にエラーは想定しておりませんが、
新しく覚えた技なので、自分用のメモとして書いてみました。

③(ユーザーフォームの初期化)
ユーザーフォームを使うときには、この書き方をまねしています。

20行~30行
ユーザーフォームの表示位置の取得

90行~120行
テキストボックスの設定(改行表示) こちらで説明したものです。

130行
カーソルのフォーカスを移動

160行
はじめてこのマクロを起動したときのエラー処理です。

最初は、「みんなのワードマクロ_get_data.ini」のファイルがないため、
20行でこの実在しない.iniファイルから値を取得しようとするので
エラーが発生します。

その場合には、エラー番号13となるため、このエラー番号31が出たら
JNの場所に制御を移動させるような記述になっています。

▼プログラム①(保存用)

Sub StoreTextData()

      '保存用のプログラム

      Dim myTextData As String '保存用文字列

10    On Error GoTo StoreData_Error

      'テキストボックスの文字列の改行記号(vbCrLf)を★●★に置換する
20    myTextData = Replace(TextBox1.Value, vbCrLf, "★●★")

      '保存用文字列を.iniファイルに保存
30    System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1) = myTextData
               
40       On Error GoTo 0
50       Exit Sub

StoreData_Error:
         
60        MsgBox Err.Description

End Sub

▼プログラム②(データ取得用)

Private Sub CommandButton2_Click()
       
      '「取得」ボタン

      Dim myIniData As String  '.iniファイルから取得した文字列
      Dim myTextData As String 'テキストボックスに入力する文字列

10    On Error GoTo Errorhandler

      '「みんなのワードマクロ_get_data.ini」から保存済みの文字列を取得(→myIniData)
20    myIniData = System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "textdata", 1)
               
      'myIniDataの★●★を改行記号(vbCrLf)に置換(→myTextData)
30    myTextData = Replace(myIniData, "★●★", vbCrLf)

      'TextBox1に、置換後の文字列(myTextData)を入力
40    TextBox1.Value = myTextData

      'フォーカスをテキストボックスに移動
50    TextBox1.SetFocus

60       On Error GoTo 0
70       Exit Sub

Errorhandler:
         
80        MsgBox Err.Description
         
End Sub

▼プログラム③(ユーザーフォームの初期化)

Private Sub UserForm_Initialize()

      Dim ufLEFT As Single
      Dim ufTOP As Single

10    On Error GoTo UserForm_Initialize_Error
         
20    ufLEFT = System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
                   "form_position", "left")

30    ufTOP = System.PrivateProfileString("みんなのワードマクロ_get_data.ini", _
               "form_position", "top")

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

JN:

      'テキストボックスの設定(改行表示)
90    With TextBox1
100       .MultiLine = True
110       .EnterKeyBehavior = True
120   End With

      'カーソル(フォーカス)をテキストボックスへ移動
130   TextBox1.SetFocus

140   On Error GoTo 0

150     Exit Sub

UserForm_Initialize_Error:
       
          '20行で値を取得できなかった場合のエラー処理

160       If Err = 13 Then
170           GoTo JN
180       Else
190           MsgBox Err.Description
200       End If

End Sub

|

« 【改良】クイックソートを用いてアルファベットの文字列を並び替え | トップページ | 文頭の文字を大文字化 »

マクロテンプレート」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/46879260

この記事へのトラックバック一覧です: ユーザーフォームのテキストボックス内で改行文字列を取り出す(その4)最終回:

« 【改良】クイックソートを用いてアルファベットの文字列を並び替え | トップページ | 文頭の文字を大文字化 »