Excel VBA質問箱 IV

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

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


4680 / 13646 ツリー ←次へ | 前へ→

【55238】デフォルトでチェックを入れておくには にしもり 08/4/23(水) 14:45 質問[未読]
【55239】Re:デフォルトでチェックを入れておくには にしもり 08/4/23(水) 15:18 質問[未読]
【55240】Re:デフォルトでチェックを入れておくには neptune 08/4/23(水) 16:46 回答[未読]
【55241】Re:デフォルトでチェックを入れておくには Jaka 08/4/23(水) 16:49 発言[未読]
【55243】Re:デフォルトでチェックを入れておくには にしもり 08/4/23(水) 18:37 質問[未読]
【55244】Re:デフォルトでチェックを入れておくには Hirofumi 08/4/23(水) 21:16 回答[未読]
【55245】Re:デフォルトでチェックを入れておくには neptune 08/4/23(水) 21:56 回答[未読]
【55247】Re:デフォルトでチェックを入れておくには にしもり 08/4/24(木) 10:53 お礼[未読]

【55238】デフォルトでチェックを入れておくには
質問  にしもり  - 08/4/23(水) 14:45 -

引用なし
パスワード
   こんにちは。

ユーザーフォームがあります。

Private Sub CommandButton1_Click()
  'place
  ws1.Cells(i, 10).Value = Me.TextBox2.Value
End Sub

入力されたテキストをws1に転記してるわけですが、いま入力されるテキストは"HONSHA"がほとんどです。
そこでチェックボックスを設けて(ラベルはHONSHA [本社の意])、デフォルトでチェックを入れておきたいです。
また、チェックが入っている間はTextBox2はグレーアウト(Inactive)しておきたいのです。

もし操作者がチェックを入れたままCommandButtonをClickしたら、HONSHAとws1に書かれ、もし操作者がチェックをはずしたら、TextBox2がActiveになり、操作者がTextBox2に入力した値がCommandButton Click時にws1に書かれる、というふうにしたいのです。
そんなことが可能でしょうか。


なおワークシートをダブルクリックするとユーザーフォームが起動するので、ワークシートのモジュールはこう定義しています

Option Explicit
Public ws1 As Worksheet

【55239】Re:デフォルトでチェックを入れておくには
質問  にしもり  - 08/4/23(水) 15:18 -

引用なし
パスワード
   ▼にしもり さん:
自己レスです。

ユーザーフォームにチェックボックスを加え、コードに
Me.CheckBox1.Value= True
をくわえたらデフォルトでチェックを入れることができました。

ただし、それだけではTextBox2をInactive(つまり入力不可状態)にできません。
どうすればよいかどなたかご教示ください。

【55240】Re:デフォルトでチェックを入れておくには
回答  neptune  - 08/4/23(水) 16:46 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは

>ただし、それだけではTextBox2をInactive(つまり入力不可状態)にできません。
>どうすればよいかどなたかご教示ください。
TextBoxのEnabledプロパティをお調べ下さい。

初めてのコントロールを使用するときは、どんなプロパティ、メソッドが
あるか、ざっとでも、目を通しておくと良いです。

【55241】Re:デフォルトでチェックを入れておくには
発言  Jaka  - 08/4/23(水) 16:49 -

引用なし
パスワード
   テキストボックスのプロパティどっちか。

Enabled
Locked

【55243】Re:デフォルトでチェックを入れておくには
質問  にしもり  - 08/4/23(水) 18:37 -

引用なし
パスワード
   ▼neptuneさん、jakaさん、
おかげさまでここまでできました。

Private Sub UserForm_Initialize()

  Me.CheckBox1.Value = True
  Me.TextBox2.Enabled = False

End Sub
-----------------------------------------------
Private Sub CommandButton1_Click()

  'Place
  If CheckBox1.Value = True Then
   ws1.Cells(i, 10).Value = "HONSHA"
  Else
   Me.TextBox2.Enabled = True
   ws1.Cells(i, 10).Value = Me.TextBox2.Value
  End If
  
  Unload UserForm1

End Sub

Thenに入るとうまくいきます。
が、Elseにいった場合にTextBox2をEnableにできません。
というかIf節の位置がCommandButtonのClickプロシージャの中にあるのがおかしいですかね。たぶんロジックが、私のやりたいこととは違っているのですよね。

すみません、どう直せばできるでしょうか。

【55244】Re:デフォルトでチェックを入れておくには
回答  Hirofumi  - 08/4/23(水) 21:16 -

引用なし
パスワード
   Option Explicit

Private ws1 As Worksheet

Private Sub UserForm_Initialize()

  Set ws1 = Worksheets("Sheet1")
  
  CheckBox1.Value = True
  TextBox2.Enabled = False

End Sub

Private Sub UserForm_Terminate()

  Set ws1 = Nothing
  
End Sub

Private Sub CheckBox1_Click()

  With TextBox2
    If CheckBox1.Value Then
      .Text = "HONSHA"
      .Enabled = False
    Else
      .Text = ""
      .Enabled = True
    End If
  End With
  
End Sub

Private Sub CommandButton1_Click()

  Dim i As Long
  
  i = 1 '仮
  ws1.Cells(i, 10).Value = TextBox2.Text
 
  Unload Me

End Sub

【55245】Re:デフォルトでチェックを入れておくには
回答  neptune  - 08/4/23(水) 21:56 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは

>そこでチェックボックスを設けて(ラベルはHONSHA [本社の意])、デフォルトでチェックを
>入れておきたいです。
>また、チェックが入っている間はTextBox2はグレーアウト(Inactive)しておきたいのです。

>もし操作者がチェックを入れたままCommandButtonをClickしたら、HONSHAとws1に書かれ、
>もし操作者がチェックをはずしたら、TextBox2がActiveになり、操作者がTextBox2に入力した値が
>CommandButton Click時にws1に書かれる、というふうにしたいのです。

キチンと考えをまとめる癖を付けましょう。
こう書いた方が考えやすいでしょ?
条件1.UserForm表示時
1.TextBox2はグレーアウト(Inactive)しておきたいのです
2.チェックボックスを設けて(ラベルはHONSHA [本社の意])、デフォルトでチェックを
 入れておきたいです。

条件2.
・チェックが入っている間はTextBox2はグレーアウト(Inactive)しておきたいのです。

条件3.
>もし操作者がチェックを入れたままCommandButtonをClickしたら、HONSHAとws1に書かれ、
>もし操作者がチェックをはずしたら、TextBox2がActiveになり、操作者がTextBox2に入力した値が
>CommandButton Click時にws1に書かれる、というふうにしたいのです。

上記をコード化すると、以下
条件1.
UserForm表示時のInitialize
Private Sub UserForm_Initialize()
  Me.CheckBox1.Value = True
  Me.TextBox2.Enabled = False
End Sub

条件2.
Private Sub CheckBox1_Click()
  TextBox2.Enabled = Not CheckBox1.Value
End Sub

条件3.ここは未確認
Private Sub CommandButton1_Click()
Const csData As String = "HONSHA"

  If CheckBox1.Value = True Then
    ws1.Cells(i, 10).Value = csData
  Else
    'ここでTextBox2を使用可能にしても意味無いので不要。
    '値の取得は可能
'    Me.TextBox2.Enabled = True
    ws1.Cells(i, 10).Value = Me.TextBox2.Value
  End If
  Unload Me
End Sub

あとは Hirofumi さんのを参考にして下さい。

【55247】Re:デフォルトでチェックを入れておくには
お礼  にしもり  - 08/4/24(木) 10:53 -

引用なし
パスワード
   ▼Hirofumiさん,neptune さん:

アドバイスにしたがって直したところ下記のコードでやりたいことができました。
いつも文章で考えてましたが、キチンと考えるには条件を書き出して、それからコード化すればよいのですね。
大変参考になります。
また、CheckBox1_Click()という発想が全くありませんでした。
お聞きしてよかった(勉強になった)と思っております。
本当にありがとうございました。

Private Sub CheckBox1_Click()
  TextBox2.Enabled = Not CheckBox1.Value
End Sub
------------------------------------------------
Private Sub CommandButton1_Click()
  Const csData As String = "HONSHA"

  'Place
  If CheckBox1.Value = True Then
   ws1.Cells(i, 10).Value = csData
  Else
   ws1.Cells(i, 10).Value = Me.TextBox2.Value
  End If
  
  Unload Me
  
End Sub

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