ken3memo (三流君)

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)




[記事一覧、バックナンバーを見る]

2011-03-08

QA110307 Excel テキストボックス 選択位置の取得 は Me.TextBox1.SelStart

下記のような質問がHPに来ました。

質問です。

Q: ユーザーフォーム(TextBox)に、下書きをTemplateで作って、呼び出しています。

その下書き文章の中に、場所を選んで(カーソルクリックなど)から、

別のListBoxにある文字列を挿入(挿入ボタンをクリックして)したいのですが、

1.TextBoxの中の位置を関数でとることができますか?

2.カーソルが一度TextBoxから離れますが、その時の1を保持して、

ListBox(Selected(I))の文字をセットする方法がありますか?

で、かなり失敗しながらチャレンジしてみました。

作成過程

いつもの作成動画です、やはり カッコつけて即興でサッと作るつもりが、

途中ハマった動画です。

http://www.youtube.com/watch?v=JScb1-DgxZ8

D

(※まぁ、ハマって途中固まるのは三流君らしいけど、いいかげんにしないと、

  正解を速くほしい 質問者が怒ってしまうか。。。)

処理のポイント

Me.TextBox1.SelStart で 選択位置の先頭 を取得できます。

(今回は、使わなかったのですが、.SelLengthで長さ、.SelTextで選択テキスト )

.SelStartこの値(選択位置)を利用して

テキストボックスの文章を

Left と Mid 関数を利用して分割して、

分割前半 = Left(元のテキスト, 選択位置.SelStart)

分割後半 = Mid(元のテキスト, 選択位置.SelStart + 1, Len(元のテキスト))

で、リストボックスの値と&でつなげてみました。

'結果を代入

Me.TextBox1.Text = 前半 & Me.ListBox1.Value & 後半 '文字を挿入して再代入


複数行の処理で、選択位置がなぜかうまく取得できなかったので、

strWORK = Replace(Me.TextBox1.Text, vbCrLf, vbCr) '改行コードの調節

'*1↑マルチラインの時

なんて感じで、vbCrLf 2文字を vbCr 1文字に直して対応してみました。

(原因が違う気もするが、宿題です。詳しくは操作動画を見たり、自分で動かしてみてください)

作成結果

結果は、下記のような感じです。

※作成過程と合わせてみてください。

Option Explicit

Private Sub CommandButton1_Click()
    Debug.Print Me.TextBox1.SelStart  '選択位置の先頭
    Debug.Print Me.TextBox1.SelLength
    Debug.Print Me.TextBox1.SelText
    
    Dim s1 As String '前半
    Dim s2 As String '後半
    
    Dim strWORK As String 'ワーク、一時変数
    
    strWORK = Replace(Me.TextBox1.Text, vbCrLf, vbCr) '改行コードの調節
    '*1↑マルチラインの時
    
    s1 = Left(strWORK, Me.TextBox1.SelStart)
    s2 = Mid(strWORK, Me.TextBox1.SelStart + 1, Len(strWORK))
    
    '結果を代入
    Me.TextBox1.Text = s1 & Me.ListBox1.Value & s2  '文字を挿入して再代入
    
    
End Sub

Private Sub CommandButton2_Click()  'テストで保存
    Open ActiveWorkbook.Path & "\テスト.txt" For Output As #1
    Print #1, Me.TextBox1.Text
    Close #1
End Sub

終わりのあいさつ

なんか、テキストボックス、マルチラインのCrLf変換が気になるなぁ。

LfとCrをいじらないで、違う方法があるような気もするし、

まぁ、いつもの宿題ですね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ken3memo/20110308/1299515820




[記事一覧、バックナンバーを見る]








ブログトップ 記事一覧 ログイン 無料ブログ開設