Excel VBA質問箱 IV

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

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


7629 / 13645 ツリー ←次へ | 前へ→

【37857】テキストボックスの入力不可について テラ 06/5/21(日) 3:37 質問[未読]
【37859】Re:テキストボックスの入力不可について Marin 06/5/21(日) 9:26 発言[未読]
【37860】Re:テキストボックスの入力不可について Kein 06/5/21(日) 12:30 回答[未読]
【37862】Re:テキストボックスの入力不可について 電脳しゅん 06/5/21(日) 14:34 回答[未読]
【37865】Re:テキストボックスの入力不可について ichinose 06/5/21(日) 15:30 発言[未読]
【37867】Re:テキストボックスの入力不可について テラ 06/5/21(日) 22:03 お礼[未読]
【37868】Re:テキストボックスの入力不可について ichinose 06/5/22(月) 8:26 発言[未読]

【37857】テキストボックスの入力不可について
質問  テラ  - 06/5/21(日) 3:37 -

引用なし
パスワード
   はじめまして。テラと申します。

テキストボックスのことについて教えてください。

Excel2002で、コントロールツールボックスでシートにテキストボックスを
作成して、LockedをTureにしたのですが、入力不可になりません。
ユーザフォームだとLockedをTureにすると入力不可になるのですが・・・。

コントロールツールボックスのテキストボックスだと、入力不可には出来ないのでしょうか?

ご存知の方がいらっしゃいましたら、ご教授ください。

【37859】Re:テキストボックスの入力不可について
発言  Marin  - 06/5/21(日) 9:26 -

引用なし
パスワード
   ▼テラ さん:

おはよう御座います。
これで入らないと思いますが・・・

TextBox1.Value = ""
Locked = True

シートのテキストもフォームの同じだと思いますが・・・
一度試してみます。

【37860】Re:テキストボックスの入力不可について
回答  Kein  - 06/5/21(日) 12:30 -

引用なし
パスワード
   Excel2000で試してみましたが、確かに True でも False でも入力できて
しまいますね・・。図形描画のテキストボックスなら

ActiveSheet.Protect DrawingObjects:=True

とすれば、入力できなくなりますが。

【37862】Re:テキストボックスの入力不可について
回答  電脳しゅん  - 06/5/21(日) 14:34 -

引用なし
パスワード
   msdnには、TextBox.Lockedプロパティについて、つぎのように記述されています。

保護されているシートで、TextBox をデザイン時に変更できるかどうかを示す値を取得または設定します。
TextBox は、シートが保護されている場合のみロックできます。ロックされた TextBox は、デザイン時に移動またはサイズ変更できません。

つまり、ユーザフォームとは違うようです。

シートのテキストボックスの入力不可には、Enablesd=Falseがよさそうです。

【37865】Re:テキストボックスの入力不可について
発言  ichinose  - 06/5/21(日) 15:30 -

引用なし
パスワード
   みなさん、こんにちは。
>msdnには、TextBox.Lockedプロパティについて、つぎのように記述されています。
>
>保護されているシートで、TextBox をデザイン時に変更できるかどうかを示す値を取得または設定します。
>TextBox は、シートが保護されている場合のみロックできます。ロックされた TextBox は、デザイン時に移動またはサイズ変更できません。
>
>つまり、ユーザフォームとは違うようです。
>シートのテキストボックスの入力不可には、Enablesd=Falseがよさそうです。

テラさんのご希望の処理は
  Enablesd=False
でも良いかもしれません
(私もEnabledを設定することが圧倒的に多いです)。

ただ、ユーザーフォーム上のTextboxコントロールにたいして
  Locked=True
としたときの動作とちょっと違いますよね?

Locked=Trueは、フォーカスを取得することはできますよね?
(たいした問題ではないですけど・・・)


コントロールツールボックスのテキストボックスを
適当なシート(Sheet1)に配置した場合(Textbox1とします)、
コントロール名を直接指定して

Worksheets("Sheet1").Textbox1.Locked=True

では、
>TextBox は、シートが保護されている場合のみロックできます。ロックされた >TextBox は、デザイン時に移動またはサイズ変更できません。

という設定をしていることになってしまいます。
何故なのか?は、わかりません、私も不可解です。

しかし、

  With Worksheets("sheet1").OLEObjects("textbox1").Object
    .Locked = True
    End With

とすれば、ユーザーフォーム上のテキストボックスのLockedプロパティと
同じ動作をしてくれます。

因みに

  Worksheets("sheet1").OLEObjects("textbox1").Locked = True

とすれば、

>TextBox は、シートが保護されている場合のみロックできます。ロックされた >TextBox は、デザイン時に移動またはサイズ変更できません。

という制御を行っています。

試してみて下さい

【37867】Re:テキストボックスの入力不可について
お礼  テラ  - 06/5/21(日) 22:03 -

引用なし
パスワード
   みなさん、ありがとうございました。

テキストボックスを入力不可にすることがでました。

ユーザフォームとツールボックスでは、Lockedの意味が違ってたんですね・・・。
それにしても、なぜなんでしょう・・・。


みなさんのおかげで、テキストボックスとスピンボックスを連動させて、スピンボックスのみで年月日を設定するという動作ができるようになりました。
以前、ユーザーボックスで同じような機能を作ったことがあったので、そのままやってみたのですが、うまくいかなかったので、随分と悩んでしまいました。

ほんとうにありがとうございました。

【37868】Re:テキストボックスの入力不可について
発言  ichinose  - 06/5/22(月) 8:26 -

引用なし
パスワード
   ▼テラ さん:
おはようございます。

>テキストボックスを入力不可にすることがでました。
解決後ですが、気がついた点を記述しておきます。
>
>ユーザフォームとツールボックスでは、Lockedの意味が違ってたんですね・・・。
>それにしても、なぜなんでしょう・・・。
私は、バグだと思いますけどね!!

新規ブックのシートSheet1に「コントロールツールボックス」の
テキストボックス(TextBox1)ひとつ配置してください。

標準モジュールに

'=================================================================
Sub test1()
  With Worksheets("sheet1").TextBox1
    .Locked = Not .Locked
    End With
End Sub
'=================================================================
Sub test2()
  Dim txt As MSForms.TextBox
  Set txt = Worksheets("sheet1").TextBox1
  txt.Locked = Not txt.Locked
End Sub
'=================================================================
Sub test3()
  Dim txt As Object
  Set txt = Worksheets("sheet1").TextBox1
  txt.Locked = Not txt.Locked
End Sub


プロシジャーtest1〜test3で、

TextBox1の入力制御ができているのは、

test2だけなんです。

test1とtest3は、OleobjectのLockedプロパティを更新しています。

どれも同じコードに見えますけどね!!


バグだと思いませんか??

以下のようにした場合には、

'=================================================================
Sub test4()
  With Worksheets("sheet1").OLEObjects("TextBox1").Object
    .Locked = Not .Locked
    End With
End Sub
'=================================================================
Sub test5()
  Dim txt As MSForms.TextBox
  Set txt = Worksheets("sheet1").OLEObjects("TextBox1").Object
  txt.Locked = Not txt.Locked
End Sub
'=================================================================
Sub test6()
  Dim txt As Object
  Set txt = Worksheets("sheet1").OLEObjects("TextBox1").Object
  txt.Locked = Not txt.Locked
End Sub

test4〜test6いずれも

TextBox1の入力制御ができました。

コントロールツールボックスのコントロールも
オブジェクト名の直接指定より、Oleobjectのコレクションを通しての
指定のほうが間違いが少ないのでしょうかねえ?

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