テキストボックスとスピンボタンが複数あり、それぞれ対応しているものどうしで値を変更したいのです。またMAX19で”High” Minで”Low"と表記させたいのですが、間違いのようです。何が足りないもしくは間違いなのでしょうか?よろしくお願いします。
Private Sub Userform_Initialize()
With Worksheets("シート名”)
For j = 28 To 91
For i = 10 To 73
Me.Controls("textbox" & j).Value = Me.Controls("SpinButton" & i).Value
Next
if Me.Controls("textbox" & j).Value ="19" then
value="High"
Elseif Me.Controls("textbox" & j).Value ="-19" then
value="Low"
Endif
End With
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは。
これは、掲示板で質問するというよりも制作を依頼するのは、かなり無理のある内容だと思います。私の作ったコードをみて、それで判断されても結構です。おそらく、予想しないコードだと思いますか、規模が大きすぎて、こうでもしないと、収まりません。
スピンボタンとテキストボックス自体の連動は、クラスで別途Index を付けて、そのIndexで目的のオブジェクトを呼び出すような仕組みになっています。
基本的には、コントロールをそれだけの数を使うというのは、無理があるような気がしますが、今回は、コントロール自体を、擬似的なコントロール配列にしました。ただ、かなり規模の大きなものになるのは避けられません。このようなマクロを書くのは、何年ぶりかです。こういうコードを書くと、無視したりボツにする人も多いようですが……。
'//
-----------------
'標準モジュール
Public myTBoxes As Collection
Public mySpines As Collection
-----------
'UserFormモジュール
Dim myClass1() As New Class1 'プロシージャ外変数
Private Sub UserForm_Initialize()
Dim i As Long, T As Long, n As Variant
Dim k As Variant, j As Long
Set myTBoxes = New Collection
Set mySpines = New Collection
On Error Resume Next
k = 1
For i = 28 To 91 'TextBox 38-目的の数91
myTBoxes.Add Me.Controls("TextBox" & i), CStr(k)
k = k + 1
Next
k = 1
For i = 10 To 73 'SpinButton 10-目的の数73
mySpines.Add Me.Controls("SpinButton" & i), CStr(k)
k = k + 1
Next
On Error GoTo 0
T = myTBoxes.Count + mySpines.Count
ReDim myClass1(T)
k = 1
For i = 0 To myTBoxes.Count - 1
Set myClass1(i) = New Class1
With myClass1(i)
.Txbx = myTBoxes(k)
.Index = k
End With
k = k + 1
Next
k = 1
For j = i To T - 1
Set myClass1(j) = New Class1
With myClass1(j)
.Spn = mySpines(k)
.Index = k
End With
k = k + 1
Next
End Sub
--------------
'Class1 クラスモジュール
Private WithEvents mySpn As MSForms.SpinButton
Private WithEvents myTxBx As MSForms.TextBox
Private m_Index As Variant
Const sMax = 19
Const sMin = -19
Public Property Get Spn() As MSForms.SpinButton
Set Spn = mySpn
End Property
Public Property Let Spn(ByVal spnNewValue As MSForms.SpinButton)
Set mySpn = spnNewValue
mySpn.Max = sMax
mySpn.Min = sMin
End Property
Public Property Get Txbx() As MSForms.TextBox
Set Txbx = myTxBx
End Property
Public Property Let Txbx(ByVal txbxNewValue As MSForms.TextBox)
Set myTxBx = txbxNewValue
End Property
Public Property Get Index() As Variant
Index = m_Index
End Property
Public Property Let Index(ByVal NewValue As Variant)
m_Index = NewValue
End Property
Sub SpinBtnUpDown(myChange As Long)
Dim myVal As Variant
myVal = myTBoxes(m_Index).Text
If IsNumeric(myVal) Then
If CInt(myVal) < sMax Or CInt(myVal) > sMin Then
mySpn.Value = CInt(myVal) + myChange
End If
ElseIf myVal = "Max" Then
mySpn.Value = sMax
ElseIf myVal = "Min" Then
mySpn.Value = sMin
End If
myTBoxes(m_Index).Value = mySpn.Value
End Sub
Private Sub mySpn_SpinDown()
If myTBoxes(m_Index).Value = "Max" Then
myTBoxes(m_Index).Value = sMax - mySpn.SmallChange
End If
SpinBtnUpDown -mySpn.SmallChange
End Sub
Private Sub mySpn_SpinUp()
If myTBoxes(m_Index).Value = "Min" Then
myTBoxes(m_Index).Value = sMin + mySpn.SmallChange
End If
SpinBtnUpDown mySpn.SmallChange
End Sub
Private Sub myTxBx_Change()
If myTxBx.Value = sMax Then
myTxBx.Value = "Max"
ElseIf myTxBx.Value = sMin Then
myTxBx.Value = "Min"
End If
End Sub
御回答ありがとうございます。
こんな大変なコードを作っていただきありがとうございます。
また、大変時間を費やしていただいたかと思うと感謝しかありません。
多くの指示が必要なんですね。私の知識ではまだまだ理解に時間がかかるようです。ご指示していただいたコードを1つずつ理解しながらコード作成頑張りたいと思います。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) VBA。複数のChangeイベントをまとめる方法 2 2022/03/31 12:03
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELでactivexコントロールを...
-
ListViewのチェックボックスに...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
カメラスクロールするのを動画...
-
ASP.netのエラー 2005から2008...
-
VB6でのバーコード印字について
-
ExcelVBAでListViewが使用できない
-
チェックボックスをオンにした...
-
ActiveX DLL と ActiveXコント...
-
OCXって何ですか?
-
コントロールを移動できない
-
EXCEL VBAでテンキー...
-
シート上のコントロール(TextB...
-
コンボボックスの文字によるif...
-
AccessのDataGridコントロール...
-
アクセス特有の書き方?
-
優しくされると甘えて調子に乗...
-
excelのリストボックスで選択し...
-
トグルボタン一部を一度にON OF...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
EXCELでactivexコントロールを...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
chr関数の呼び出しで「プロ...
-
変数をコントロール型で使用す...
-
ExcelVBAでListViewが使用できない
-
VBAのエラーについて、”実行時...
-
間違えて配置してしまったコン...
-
VBAのフォームでTextBoxがいっ...
-
Groupboxの配下のコントロール...
-
excelのリストボックスで選択し...
-
ACCESS2010のVBAでフォーム内ク...
-
エクセルVBAでオプションボタン...
-
フォーム上の現在アクティブな...
-
ユーザーフォームで動的(Me.Con...
-
コンボボックスの文字によるif...
-
コントロールを移動できない
おすすめ情報
また、テキストボックスに値が前もって入力されていたらその値から変動するには追加するコードはありますか?
コマンドボタンで、値を指示する事もあります。
こんにちは。
textbox28はspin button10。textbox29はspin button11、、、となり最後はtextbox91はspin button73の並びでのそれぞれ対応したいのです。ご理解いただけますでしょうか?
説明不足で申し訳ありません。よろしくお願いします。