[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コンボボックスの選択によってテキストボックスを制御したい』(まーこ)
初めて質問します。過去ログでいつも勉強させていただいておりますが、今回は過去ログでもわからなかったので質問させていただくことにいたしました。
よろしくお願いします。
印刷費や郵送費を請求するための請求リストを作成するフォームを作成し、
やりたいことはできているのですが、入力作業を別の担当にさせるために
制御をかける方法を知りたいです。
やりたいことは2点です
郵送代、印刷代が入っている単価リストがあり、
コンボボックス1で郵送代、印刷代の単価リストのタイトルをセレクト出来、
コンボボックス2でその単価リストを選択できるようになっていまして、
選択したものの単価がラベル13とテキストボックス9に入り、
テキストボックス6、7に入れた数字とテキストボックス9の数字を
掛けた数字がラベル15に表示されるようになっています。
1、コンボボックス1で単価リストM列の印刷代を選んだときにだけ
テキストボックス6(ページ数)が入力できるように制御をかけたいです。
2、コンボボックス2で単価リストのうち"両面"の文字が入っているものが
セレクトされた時、テキストボックス6を「2」以上の数字をいれないと
エラーメッセージが出るようにしたいです。
現在の具体的なコードは以下の通りです。
Private Sub ComboBox1_Change()
Dim c, r As Long
Dim sh As Worksheet
Set sh = Sheets("単価リスト")
If ComboBox1.ListIndex = 2 Then
End If
'単価リストの1行目のリストタイトルを選択
'単価リストはJ列に郵送代、K列に単価、L列空白、M列に印刷代、N列に単価…です
c = Application.Match(ComboBox1.Value, sh.Range("1:1"), 0)
If IsNumeric(c) Then
r = sh.Cells(Rows.Count, c).End(xlUp).Row
ComboBox2.List = sh.Range(sh.Cells(2, c), sh.Cells(r, c)).Value
End If
End Sub
Private Sub ComboBox2_Change()
Dim sh As Worksheet
Set sh = Sheets("単価リスト")
Label13.Caption = "単価 : " & Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W"))
TextBox9.Text = Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W"))
If ComboBox2.ListIndex = 1 Then
Label13.Caption = "単価 : " & Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W"))
End If
End Sub
Private Sub TextBox6_Change()
Dim sh As Worksheet
Set sh = Sheets("物件リスト")
On Error Resume Next
Label15.Caption = "金額: " & Val(TextBox6.Value) * Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W")) & " 円"
End Sub
Private Sub TextBox7_AfterUpdate()
Dim sh As Worksheet
Set sh = Sheets("物件リスト")
On Error Resume Next
Label15.Caption = "金額: " & Val(TextBox7.Value) * Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W")) & " 円"
Label15.Caption = "金額: " & Val(TextBox7.Value) * Val(TextBox9.Value) & " 円"
End Sub
ちなみに単価リストM列のリストは以下の通りとなっています。
行
2 A4 カラ― 片面
3 A4 カラ― 両面
4 A3 カラ― 片面
5 A3 カラ― 両面
6 A4 モノクロ 片面
7 A3 モノクロ 両面
8 A4 モノクロ 片面
9 A3 モノクロ 両面
お力をお貸しくださいよろしくお願いいたします。
< 使用 Excel:Excel2007、使用 OS:Windows10 >
1,EnabledとかVisileプロパティを使えませんか。
2.テキストボックス6は、コンボボックスにしたら駄目なのですか。
で、必要に応じて、リストをセットし直せばよいのでは。
(マナ) 2018/04/12(木) 20:30
Private Sub ComboBox1_Change() Dim c, r As Long Dim sh As Worksheet: Set sh = Sheets("単価リスト")
If ComboBox1.ListIndex = 2 Then '●記述忘れ?● End If
'単価リストの1行目のリストタイトルを選択 '単価リストはJ列に郵送代、K列に単価、L列空白、M列に印刷代、N列に単価…です c = Application.Match(ComboBox1.Value, sh.Range("1:1"), 0) If IsNumeric(c) Then r = sh.Cells(sh.Rows.Count, c).End(xlUp).Row ComboBox2.List = sh.Range(sh.Cells(2, c), sh.Cells(r, c)).Value End If End Sub
Private Sub ComboBox2_Change() Dim sh As Worksheet: Set sh = Sheets("単価リスト") Dim buf As Variant
buf = Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W"))
Label13.Caption = "単価 : " & buf TextBox9.Text = buf
If ComboBox2.ListIndex = 1 Then Label13.Caption = "単価 : " & buf End If
End Sub
Private Sub TextBox6_Change() Dim sh As Worksheet: Set sh = Sheets("物件リスト") Dim buf As Variant
On Error Resume Next buf = Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W"))
Label15.Caption = "金額: " & Val(TextBox6.Value) * buf & " 円" End Sub
Private Sub TextBox7_AfterUpdate() Dim sh As Worksheet: Set sh = Sheets("物件リスト") Dim buf As Variant
On Error Resume Next buf = Application.SumIf(sh.Range("J:V"), ComboBox2.Value, sh.Range("K:W"))
Label15.Caption = "金額: " & Val(TextBox7.Value) * buf & " 円" Label15.Caption = "金額: " & Val(TextBox7.Value) * Val(TextBox9.Value) & " 円" End Sub
もこなさん、コードを整理していただきありがとうございました。
マナさん、何をしたいか理解できないような質問で申し訳ありませんでした。
アドバイス通りEnabledプロパティで制御できました。
考えが浅くてすみませんでした。
1、コンボボックス1で単価リストM列の印刷代を選んだときにだけ
テキストボックス6(ページ数)が入力できるように制御をかけたい
↓これで制御できました。
Private Sub ComboBox1_AfterUpdate()
If Me.ComboBox1.Value = "印刷代" Then Me.TextBox6.Enabled = True Else Me.TextBox6.Enabled = False End If
End Sub
2、コンボボックス2で単価リストのうち"両面"の文字が入っているものが
セレクトされた時、テキストボックス6を「2」以上の数字をいれないと
エラーメッセージが出るようにしたい
コマンドボタンで入力チェックをかける方法としました。
If InStr(ComboBox2.Value, "両面") > 0 Then If TextBox6 = 1 Then MsgBox "2ページ以上を設定してください" Exit Sub End If End If
'両面をセレクトしないときも1以上を設定してほしいので、空欄と0にもエラーを出す
If TextBox6.Enabled = True Then
If TextBox6.Value = "" Then MsgBox ("ページ数を入力してください") TextBox6.SetFocus Exit Sub End If End If
If TextBox6.Enabled = True Then
If TextBox6.Value = 0 Then MsgBox ("ページ数を入力してください") TextBox6.SetFocus Exit Sub End If End If
End Sub
おかげで解決できました
ありがとうございました。
( まーこ) 2018/04/16(月) 09:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.