Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13221 / 13644 ツリー ←次へ | 前へ→

【6475】テキストボックス Salem 03/7/3(木) 22:22 質問
【6478】Re:テキストボックス ichinose 03/7/3(木) 23:58 回答
【6486】すみません、また質問です。 Salem 03/7/4(金) 9:36 質問
【6487】Re:すみません、また質問です。 つん 03/7/4(金) 10:06 回答
【6490】Re:すみません、また質問です。 ichinose 03/7/4(金) 10:16 発言
【6492】Re:すみません、また質問です。 つん 03/7/4(金) 10:35 発言
【6491】すみません・・・。 Salem 03/7/4(金) 10:31 質問
【6493】Re:すみません・・・。 つん 03/7/4(金) 10:38 回答
【6495】Re:すみません・・・。 Salem 03/7/4(金) 11:22 質問
【6496】Re:すみません・・・。 つん 03/7/4(金) 12:07 回答
【6501】ありがとうございます!! Salem 03/7/4(金) 14:01 お礼

【6475】テキストボックス
質問  Salem  - 03/7/3(木) 22:22 -

引用なし
パスワード
   初めまして。
VBA初心者 SALEMといいます。
早速ですが質問です。

1.VBでテキストボックスはIndexが使用できますが、
VBAのテキストボックスにはそのようなプロパティがないのでしょうか?

2.VBでゴットフォーカス?(カーソルがテキストボックスから離れたとき)
というのがあるのですが、VBAではないのでしょうか?

宜しくお願い致します。

【6478】Re:テキストボックス
回答  ichinose  - 03/7/3(木) 23:58 -

引用なし
パスワード
   ▼Salem さん:
こんばんは。

>初めまして。
>VBA初心者 SALEMといいます。
>早速ですが質問です。
>
>1.VBでテキストボックスはIndexが使用できますが、
>VBAのテキストボックスにはそのようなプロパティがないのでしょうか?

コントロール配列は使えません。これがないので、VBAのコードの記述では
工夫が必要ですし、色々な手法がこのサイトでも紹介されていますが、
VBのコントロール配列を網羅するまでには至っていないようです。

>2.VBでゴットフォーカス?(カーソルがテキストボックスから離れたとき)
>というのがあるのですが、VBAではないのでしょうか?

LostFocusイベントの方ですね?残念ながらこれもありません(あれば便利ですよね)。

近いところでExitイベントがありますが、使用してみればお分かりになると思いますが
仕様が違います(Activecontrolが移る前か後の違い)。
前か後の違いが大きいですよね!!

【6486】すみません、また質問です。
質問  Salem  - 03/7/4(金) 9:36 -

引用なし
パスワード
   >>1.VBでテキストボックスはIndexが使用できますが、
>>VBAのテキストボックスにはそのようなプロパティがないのでしょうか?
>
>コントロール配列は使えません。これがないので、VBAのコードの記述では
>工夫が必要ですし、色々な手法がこのサイトでも紹介されていますが、
>VBのコントロール配列を網羅するまでには至っていないようです。
>
>>2.VBでゴットフォーカス?(カーソルがテキストボックスから離れたとき)
>>というのがあるのですが、VBAではないのでしょうか?
>
>LostFocusイベントの方ですね?残念ながらこれもありません(あれば便利ですよね)。
>
>近いところでExitイベントがありますが、使用してみればお分かりになると思いますが
>仕様が違います(Activecontrolが移る前か後の違い)。
>前か後の違いが大きいですよね!!

お返事ありがとうございます。
また、質問なんですが、テキストボックスで
40文字(CHAR型)入力制限をしたいのですが、
何か良い方法はないでしょうか?
LenBを使用して

IF LenB(TextBox1) > 40 THEN
 ・・・・・・・・・・・
END IF

このようにしようと思ったのですが、メッセージを
出さずに、入力制限の方法がわかりません・・・。
何か良い方法があったら教えてください。
宜しくお願い致します。

【6487】Re:すみません、また質問です。
回答  つん E-MAIL  - 03/7/4(金) 10:06 -

引用なし
パスワード
   Salem さん、ichinoseさんおはようございます。
横から失礼します。

>また、質問なんですが、テキストボックスで
>40文字(CHAR型)入力制限をしたいのですが、
>何か良い方法はないでしょうか?
>LenBを使用して
>
>IF LenB(TextBox1) > 40 THEN
> ・・・・・・・・・・・
>END IF
>
>このようにしようと思ったのですが、メッセージを
>出さずに、入力制限の方法がわかりません・・・。
>何か良い方法があったら教えてください。
>宜しくお願い致します。

こうかな?

Private Sub TextBox1_Change()

  If LenB(TextBox1.Value) > 40 Then
    TextBox1.Value = LeftB(TextBox1.Value, 40)
  End If

End Sub

これで、40バイト以上入力できへんようになりますが・・・
半角でも2バイトで1文字やから、これで20文字しか入力できへんなぁ。

【6490】Re:すみません、また質問です。
発言  ichinose  - 03/7/4(金) 10:16 -

引用なし
パスワード
   つん さん、Salem さんおはようございます。

>>また、質問なんですが、テキストボックスで
>>40文字(CHAR型)入力制限をしたいのですが、
>>何か良い方法はないでしょうか?
>>LenBを使用して
>>
>>IF LenB(TextBox1) > 40 THEN
>> ・・・・・・・・・・・
>>END IF
>>
>>このようにしようと思ったのですが、メッセージを
>>出さずに、入力制限の方法がわかりません・・・。
>>何か良い方法があったら教えてください。
>>宜しくお願い致します。
>
>こうかな?
>
>Private Sub TextBox1_Change()
>
>  If LenB(TextBox1.Value) > 40 Then
>    TextBox1.Value = LeftB(TextBox1.Value, 40)
>  End If
>
>End Sub
>
>これで、40バイト以上入力できへんようになりますが・・・
>半角でも2バイトで1文字やから、これで20文字しか入力できへんなぁ。

Textboxには、Maxlengthというプロパティもありますので
これを指定すれば、文字数でよければ制御できますよ!

【6491】すみません・・・。
質問  Salem  - 03/7/4(金) 10:31 -

引用なし
パスワード
   ▼つん さん:
>Salem さん、ichinoseさんおはようございます。
>横から失礼します。
>
>>また、質問なんですが、テキストボックスで
>>40文字(CHAR型)入力制限をしたいのですが、
>>何か良い方法はないでしょうか?
>>LenBを使用して
>>
>>IF LenB(TextBox1) > 40 THEN
>> ・・・・・・・・・・・
>>END IF
>>
>>このようにしようと思ったのですが、メッセージを
>>出さずに、入力制限の方法がわかりません・・・。
>>何か良い方法があったら教えてください。
>>宜しくお願い致します。
>
>こうかな?
>
>Private Sub TextBox1_Change()
>
>  If LenB(TextBox1.Value) > 40 Then
>    TextBox1.Value = LeftB(TextBox1.Value, 40)
>  End If
>
>End Sub
>
>これで、40バイト以上入力できへんようになりますが・・・
>半角でも2バイトで1文字やから、これで20文字しか入力できへんなぁ。


説明が足りなかったです・・・。えっとですね、
全角で20文字 半角で40文字 入力制限をしたいんですよ・・・。

*************************************************
全角:あいうえおかきくけこさしすせそたちつてと
半角:1234567890123456789012345678901234567890
*************************************************

【6492】Re:すみません、また質問です。
発言  つん E-MAIL  - 03/7/4(金) 10:35 -

引用なし
パスワード
   ichinose さん、どもども〜

>Textboxには、Maxlengthというプロパティもありますので
>これを指定すれば、文字数でよければ制御できますよ!

.....そやった(>_<)
初心者の頃(いや、いまもスキル的には初心者やけど)使ってたプロパティやメソッドとかも、ちょっと使ってなかったらすぐ忘れちゃって、変に難しく考えてしまいます(T_T)

【6493】Re:すみません・・・。
回答  つん E-MAIL  - 03/7/4(金) 10:38 -

引用なし
パスワード
   >説明が足りなかったです・・・。えっとですね、
>全角で20文字 半角で40文字 入力制限をしたいんですよ・・・。
>
>*************************************************
>全角:あいうえおかきくけこさしすせそたちつてと
>半角:1234567890123456789012345678901234567890
>*************************************************

あ、ほんなら、こちらのスレッドが参考になると思います♪
[#3255]

【6495】Re:すみません・・・。
質問  Salem  - 03/7/4(金) 11:22 -

引用なし
パスワード
   ▼つん さん:
>>説明が足りなかったです・・・。えっとですね、
>>全角で20文字 半角で40文字 入力制限をしたいんですよ・・・。
>>
>>*************************************************
>>全角:あいうえおかきくけこさしすせそたちつてと
>>半角:1234567890123456789012345678901234567890
>>*************************************************
>
>あ、ほんなら、こちらのスレッドが参考になると思います♪
>[#3255]

ありがとうございます。
バイト数を取得まではできました。

しかし、制限するにはどうしたら良いかわかりません。
半角で40文字制限できましたが、全角で20文字制限ができません。

aa=LenB(StrConv(TextBox1.Text, vbFromUnicode)) 
if aa = 40 then
 入力制限処理
 TextBox1.Value = LeftB(TextBox1.Value, 80)
 ↑このようにすると半角制限ができるのですが、
  全角制限はできません。
end if

【6496】Re:すみません・・・。
回答  つん E-MAIL  - 03/7/4(金) 12:07 -

引用なし
パスワード
   Salem さん

以前、こちらの常連さんのJuJuさんに教えてもらったコードですが、

'*************************************
Private Sub txtTest_Change()

  txtTest.Text = fncLeftA(txtTest.Text, txtTest.MaxLength)

End Sub

'==============================================
Private Sub txtTest_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

  With txtTest
    If fncLenA(.Text & ChrW$(KeyAscii)) > .MaxLength Then
      KeyAscii = 0
    End If
  End With

End Sub

'==============================================
Private Function fncLeftA(ByVal szWord As String, ByVal lLength As Long) As String
  'szWord=テキストボックスに入力された文字列
  'lLength=テキストボックスに設定された制限文字数
  
  fncLeftA = StrConv((LeftB(StrConv(szWord, vbFromUnicode), lLength)), vbUnicode)
  
  If fncLeftA <> Left$(szWord, Len(fncLeftA)) Then
  
    fncLeftA = Left$(szWord, Len(fncLeftA) - 1)
    
  End If
        
End Function

'==============================================
Private Function fncLenA(ByVal szWord As String) As Long

  fncLenA = LenB(StrConv(szWord, vbFromUnicode))

End Function
'*************************************

こんな感じです。

【6501】ありがとうございます!!
お礼  Salem  - 03/7/4(金) 14:01 -

引用なし
パスワード
   >'*************************************
>Private Sub txtTest_Change()
>
>  txtTest.Text = fncLeftA(txtTest.Text, txtTest.MaxLength)
>
>End Sub
>
>'==============================================
>Private Sub txtTest_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
>
>  With txtTest
>    If fncLenA(.Text & ChrW$(KeyAscii)) > .MaxLength Then
>      KeyAscii = 0
>    End If
>  End With
>
>End Sub
>
>'==============================================
>Private Function fncLeftA(ByVal szWord As String, ByVal lLength As Long) As String
>  'szWord=テキストボックスに入力された文字列
>  'lLength=テキストボックスに設定された制限文字数
>  
>  fncLeftA = StrConv((LeftB(StrConv(szWord, vbFromUnicode), lLength)), vbUnicode)
>  
>  If fncLeftA <> Left$(szWord, Len(fncLeftA)) Then
>  
>    fncLeftA = Left$(szWord, Len(fncLeftA) - 1)
>    
>  End If
>        
>End Function
>
>'==============================================
>Private Function fncLenA(ByVal szWord As String) As Long
>
>  fncLenA = LenB(StrConv(szWord, vbFromUnicode))
>
>End Function
>'*************************************
>

こちらで解決しました。
ありがとうございました!!

13221 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free