三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

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

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

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
www.youtube.com

(※まぁ、ハマって途中固まるのは三流君らしいけど、いいかげんにしないと、
  正解を速くほしい 質問者が怒ってしまうか。。。)

処理のポイント

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をいじらないで、違う方法があるような気もするし、
まぁ、いつもの宿題ですね。

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)