• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Pasteで増やしたフレーム内のボタン操作(続))

Pasteで増やしたフレーム内のボタン操作(続)

kkkkkmの回答

  • kkkkkm
  • ベストアンサー率65% (1645/2495)
回答No.7

TextBoxが5個、ComboBoxが15個で試してみたコードです。時間があれば試してみて下さい。 Private mCmdButton() As Class1 '↑必ず先頭に '大外フレームの外側にコマンドボタンを作成の時 Private Sub ClearCommandButton_Click() Dim i As Long For i = 1 To (5 + 1) * 5 Me.Controls("TextBox" & i).Value = "" Next For i = 1 To (5 + 1) * 15 Me.Controls("ComboBox" & i).Value = "" Next End Sub Private Sub UserForm_Initialize() Dim j As Long Dim i As Long Dim mBoxNameF(5) As String Dim mComboNameF(15) As String Me.Frame1.SetFocus Me.大外フレーム.Copy For i = 1 To 5 mBoxNameF(i) = "TextBox" & i Next For i = 1 To 15 mComboNameF(i) = "ComboBox" & i Next Call Make_Event(1, mBoxNameF(), mComboNameF()) For j = 1 To 5 Me.大外フレーム.Paste With Me.Controls("Frame" & j + 1) .Caption = "Frame" & j + 1 .Left = Me.Frame1.Left .Top = Me.Frame1.Top + Me.Frame1.Height * j End With Me.Controls("TextBox" & j * 5 + 1).Value = Me.Controls("TextBox" & j * 5 + 1).Name Me.Controls("TextBox" & j * 5 + 2).Value = Me.Controls("TextBox" & j * 5 + 2).Name Me.Controls("TextBox" & j * 5 + 3).Value = Me.Controls("TextBox" & j * 3 + 3).Name Me.Controls("TextBox" & j * 5 + 4).Value = Me.Controls("TextBox" & j * 5 + 4).Name Me.Controls("TextBox" & j * 5 + 5).Value = Me.Controls("TextBox" & j * 5 + 5).Name Me.Controls("CommandButton" & j + 1).Caption = Me.Controls("CommandButton" & j + 1).Name For i = 1 To 5 mBoxNameF(i) = "TextBox" & j * 5 + i Next For i = 1 To 15 mComboNameF(i) = "ComboBox" & j * 15 + i Next Call Make_Event(j + 1, mBoxNameF(), mComboNameF()) Next Me.大外フレーム.ScrollHeight = Me.大外フレーム.ScrollHeight + Me.Frame1.Height * j 'j=(Past回数+1) For i = 1 To (5 + 1) * 15 Me.Controls("ComboBox" & i).Value = Me.Controls("ComboBox" & i).Name Next End Sub Function Make_Event(ByVal i As Long, ByRef mBoxNameX() As String, ByRef mComboNameX() As String) ReDim Preserve mCmdButton(i) Set mCmdButton(i) = New Class1 mCmdButton(i).SetCtrl Me("CommandButton" & i), mBoxNameX(), mComboNameX() End Function クラス Private WithEvents Target As MSForms.CommandButton Private mBoxName(5) As String Private mComboName(15) As String '新しくイベントを作成し、変数の値をセット Public Sub SetCtrl(New_Ctrl As MSForms.CommandButton, ByRef mBoxNameX() As String, ByRef mComboNameX() As String) Dim i As Long Set Target = New_Ctrl For i = 1 To 5 mBoxName(i) = mBoxNameX(i) Next For i = 1 To 15 mComboName(i) = mComboNameX(i) Next End Sub Private Sub Target_Click() Dim i As Long For i = 1 To 5 UserForm1.Controls(mBoxName(i)).Value = "" Next For i = 1 To 15 UserForm1.Controls(mComboName(i)).Value = "" Next End Sub

ilovethekaraage
質問者

お礼

kkkkkm様、お知らせいただきましたTextBox5個、ComboBox15個のパターンですが期待通りの動きをしてくれました。有難うございます。 現在はテストファイルなので明日、本番ファイルに適用してみようと思います。大外フレームリセットについても活用させていただきます。 ところで1つ(本当は1つではありませんが)疑問な箇所がございましたので宜しければご教示ください。 今回のNo7以前はComboBoxの.nameは15個分書いていた(TextBox分と合わせて20行)のですが No7でお知らせいただいたスクリプトには下記の通り For i = 1 To (5 + 1) * 15 Me.Controls("ComboBox" & i).Value = Me.Controls("ComboBox" & i).Name Next となっており、非常にスッキリしてて良いと感じました。 しかしFor文のTo以降の (5+1)*15 となっている理由がどうしても分からないのです。90と書くのと何か違いがあるのでしょうか?またFrame数が増えますとComboBox数も比例して増え、90または(5+1)*15を超えてしまうと思うのですが、なんのために (5+1)*15 となっているのか後学のためにお知らせいただけますと幸いです。 お礼メッセージなのに質問してしまいまして申し訳ございませんが、お手すきの際にもう少しお付き合いの程、宜しくお願い致します。 ~No7以前に書いていた15行~ Me.Controls("ComboBox" & j * 15 + 1).Value = Me.Controls("ComboBox" & j * 15 + 1).Name ・・・中略・・・ Me.Controls("ComboBox" & j * 15 + 15).Value = Me.Controls("ComboBox" & j * 15 + 15).Name

関連するQ&A

  • Pasteで増やしたフレーム内のボタン操作

    過去の質問でユーザーフォーム内のFrameをコピペして増やすという下記のがありました。 https://okwave.jp/qa/q9794555.html 上記の通りFrameとその中にあるTextBoxやボタンは期待通りに必要な分だけ増やすことができましたが、増やした後のボタン操作等ができません。オブジェクト名がCommandButton4から始まっているのは分かったので、Private Sub CommandButton4_Click()と簡単な処理を先に記述してもダメでした。 やりたいことのイメージとしては下記URLのFrame2以降の中にあるボタンを押下した際に、そのFrame内のテキストボックス内容を消去したいと言った感じです。 https://multimedia.okwave.jp/image/answers/12/124335/124335_original.jpg もしお分かりの方がいらっしゃいましたらご教示いただけないでしょうか?宜しくお願い致します。

  • Userform内のFrameのCaptionが印刷できないのですが

    VBAでUserFormを印刷しようとしたのですが、UserForm内のFrameのCaptionのみ印刷されません。その他Frameの枠とかUserForm内のLabelとかは印刷できるのですが、何か設定等あるのでしょうか?一応UserForm内にCommandButtonを作りクリックで印刷させようと考えているのですが、ちなみにコードは Private Sub CommandButton1_Click() Userform1.Printform End Sub としています。なにか方法があれば教えてもらえないでしょうか。よろしくお願いします。

  • 値渡しについて

    UserForm1で以下のように求めた値「R」を UserForm2に渡すにはどのようにすればよいのでしょうか。 **************************************** <UserForm1(コード)> Public R As Integer ----------------------------------- Private Sub CommandButton1_Click()    Dim N As Integer        :    N = TextBox1.Text    R= N * 2 + 3        : End Sub **************************************** <UserForm2(コード)> Private Sub CommandButton1_Click()   Dim i As Integer       :   For i = 4 To R       :   Next i       : End Sub **************************************** どなたか教えて下さい。

  • ユーザーフォームに入力したデーターが転記できない

    いつもお世話になります。 Windows7 excell2010 です。 いろんなものに勉強してここまでに作成したユーザーフォームですが、データーは入力できるのですがコマンドボタンをクリックしても各セルに反映されません。 色々と試行錯誤していますがうまくゆきません。 どこに不具合があるかわからず恐れ入りますがどなたかご指導いただけませんか。 参考にコードは参考に下記にします。 ユーザフォームのVBAは下記です コード ※Module1 Sub 売上() Do UserForm1.Show Loop End Sub Sub 入金() Do UserForm2.Show Loop End Sub ※UserForm1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm1.TextBox1.Text Cells(n, 3) = UserForm1.TextBox2.Text Cells(n, 4) = UserForm1.TextBox3.Text Cells(n, 11) = UserForm1.ComboBox1.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※UserForm2 Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm2.TextBox1.Text Cells(n, 3) = UserForm2.TextBox2.Text Cells(n, 4) = UserForm2.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • EXCEL VBAのユーザーフォームのコマンドボタンでBSキーと同様の役割を持たせる方法について

    すいません、EXCEL VBAで教えていただきたいことがあります。 EXCEL VBAでユーザーフォームを作る。 フォーム内にはTextBox1とCommandButton1を設置。 TextBox1に書き込んだ文字をドラッグ →CommandButton1を押す →ドラッグした文字を消去 という機能をコマンドボタンに持たせたいのですが 可能でしょうか。 下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim i As Integer With Me.TextBox1 i = .SelStart If i > 0 Then .Text = Left(.Text, i - 1) & Mid(.Text, i + 1) .SelStart = i - 1 End If End With TextBox1.SetFocus End Sub

  • ユーザーフォームVBAでCells(n, 7)が

    いつもお世話になります Windows7 excell2010 です ご指導を仰ぎたいのは参照図で言うと、 TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び 参照図のG13に入力されません。 VBAを勉強し始めたはかりですのでどこが悪いかわかりません。 恐れ入りますがご指導願えませんでしょうか。 下記参考にします。 Module のコードには Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub UserForm1 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Cells(n, 4) = UserForm1.TextBox4.Text Cells(n, 5) = UserForm1.TextBox5.Text Cells(n, 6) = UserForm1.TextBox6.Text Cells(n, 7) = UserForm1.TextBox7.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • テキストボックスを配置したいのですが

    以下のコードですと、失敗します。 Private Sub CommandButton3_Click() Dim nu7 As MSForms.TextBox Set nu7 = UserForm1.Controls.Add("Forms.TextBox.1", "TextBox1", True) With nu7 .Left = 20 .Top = 50 End With End Sub 間違いをご指摘頂けると、助かります。 どうぞ、宜しくお願い致します。

  • 12個のCommandbuttonをスマートに

    はじめまして 2003 XP UserFormにCommandbuttonが12個あります。 Private Sub CommandButton1_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "1" Else: TextBox1.Value = TextBox1 & "1" End If End Sub Private Sub CommandButton2_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "2" Else: TextBox1.Value = TextBox1 & "2" End If End Sub Private Sub CommandButton3_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "3" Else: TextBox1.Value = TextBox1 & "3" End If End Sub Private Sub CommandButton4_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "4" Else: TextBox1.Value = TextBox1 & "4" End If End Sub Private Sub CommandButton5_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "5" Else: TextBox1.Value = TextBox1 & "5" End If End Sub Private Sub CommandButton6_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "6" Else: TextBox1.Value = TextBox1 & "6" End If End Sub Private Sub CommandButton7_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "7" Else: TextBox1.Value = TextBox1 & "7" End If End Sub Private Sub CommandButton8_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "8" Else: TextBox1.Value = TextBox1 & "8" End If End Sub Private Sub CommandButton9_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "9" Else: TextBox1.Value = TextBox1 & "9" End If End Sub Private Sub CommandButton10_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "0" Else: TextBox1.Value = TextBox1 & "0" End If End Sub Private Sub CommandButton11_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "00" Else: TextBox1.Value = TextBox1 & "00" End If End Sub Private Sub CommandButton12_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "000" Else: TextBox1.Value = TextBox1 & "000" End If End Sub  これをもっとスマートに出来ないでしょうか? 宜しくお願いします。

  • Excel2000 VBA シート名の変更

    なかなかうまくいかずに困っています。 Excel2000  OS:WindowsXp ユーザーフォーム(UserForm1)上に ・Textbox1 ・Textbox2 ・Commandbutton1 があります。 Commandbutton1をクリックすると、Textbox1とTextbox2の値をつなげた文字列を、 アクティブなワークシートの名前にしたいと思っています。 今現在の、うまく動かないコードは以下のとおりです。 Private Sub CommandButton1_Click() 'ユーザーフォーム上のCommandButton1 Dim snday As Variant 'Textbox1に入力される、『日』を取得するための変数 Dim snyoubi As Variant 'Textbox2に入力される『曜日』を取得するための変数 Dim namae As Variant 'シート名になる変数。 Dim Sh As Worksheet snday = UserForm1.TextBox1.Value snyoubi = UserForm1.TextBox2.Value namae = snday & snyoubi Sh.Name = namae End Sub これを実行すると、 実行時エラー’91’ オブジェクト変数または withブロック変数が設定されていません のエラーが出ます。 Sh.Name = namae のところを with ActiveSheet ~End with で挟んでみてもだめでした。 どなたかご教授ねがえませんか。 よろしくお願いいたします。

  • エクセルVBA「スピンボタン」について

    エクセルVBA「スピンボタン」について スピンボタンとテキストボックスを組み合わせて Private Sub SpinButton1_Change() Me.TextBox1.Value = Me.SpinButton1.Value End Sub Private Sub UserForm_Initialize() With Me.SpinButton1 .Min = 1 .Value = .Min End With Me.TextBox1.Value = Me.SpinButton1.Min End Sub というコードを書きました。 「1、2、3、・・・10、11、・・・」という数の増加を「01、02、03・・・10、11・・・」という風にしたいのですがどのようにコーディングすればよいのでしょうか?お願いします。.