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

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

このQ&Aのポイント
  • 増やしたフレーム内のボタン操作について質問です。
  • 増やした後のボタン操作ができない状況に困っています。
  • 特定のフレーム内のテキストボックス内容を消去したいという要望があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1644/2494)
回答No.2

No.1の コピペ忘れです。 Private Sub UserForm_Initialize() の前、というかフォームモジュールの先頭に Private mCmdButton() As Class1 を追加してください。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1644/2494)
回答No.1

> 過去の質問でユーザーフォーム内のFrameをコピペして増やすという下記のがありました。 > https://okwave.jp/qa/q9794555.html この後日にボタンを追加してセルの値を参照するコードの回答があったと思いますが、URLが分からないので その時のコードにセルに値を参照する部分を削除してテキストボックスをクリアする動作を追加したものです。 無駄な部分やTextBoxは先頭だけにしか対応していませんので変更してください。 Call Make_Eventの部分(2か所)でクリックの動作を設定しています。 Private Sub UserForm_Initialize() Dim j As Long Me.Frame1.SetFocus Me.大外フレーム.Copy Call Make_Event(1, Me.Controls("TextBox1").Name) For j = 1 To 10 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 * 3 + 1).Value = Me.Controls("TextBox" & j * 3 + 1).Name Me.Controls("TextBox" & j * 3 + 2).Value = Me.Controls("TextBox" & j * 3 + 2).Name Me.Controls("TextBox" & j * 3 + 3).Value = Sheets("Sheet1").Range("A1").Value 'Me.Controls("TextBox" & j * 3 + 3).Name Me.Controls("CommandButton" & j + 1).Caption = Me.Controls("CommandButton" & j + 1).Name Call Make_Event(j + 1, Me.Controls("TextBox" & j * 3 + 1).Name) Next Me.大外フレーム.ScrollHeight = Me.大外フレーム.ScrollHeight + Me.Frame1.Height * j 'j=(Past回数+1) End Sub Function Make_Event(ByVal i As Long, ByVal mBoxNameX As String) ReDim Preserve mCmdButton(i) Set mCmdButton(i) = New Class1 mCmdButton(i).SetCtrl Me("CommandButton" & i), mBoxNameX End Function クラスモジュールを追加して Class1のコードを以下にしてください。 Private WithEvents Target As MSForms.CommandButton Private mBoxName As String '新しくイベントを作成する Public Sub SetCtrl(New_Ctrl As MSForms.CommandButton, ByVal mBoxNameX As String) Set Target = New_Ctrl mBoxName = mBoxNameX End Sub Private Sub Target_Click() UserForm1.Controls(mBoxName).Value = "" End Sub

ilovethekaraage
質問者

お礼

kkkkkm様、早速のご回答有難うございました。 一旦、ご回答いただいた内容をそのまま新規フォームにコピペして動作するか試したところ、なかなか動かすことができず、Class1など今まで知らなかったこと等を調べながら修正を行ったところ無事TextBox4以降の先頭のTextBoxの消去ができるようになりました。 現在はTextBox5とTextBox6以降の2番目、3番目のTextBoxを消去できるようにしたいので、FormソースとClass1とにらめっこしながら取り組んでいますがまだまだ未熟なもので簡単にはできなさそうです。 取り急ぎお礼までご連絡させていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    すみません。一旦、解決かと思ったのですが続きで不可思議な問題が発生したので質問させてください。 添付した画像の通り、UserForm1を起動させた際、Frame1が5個コピペされます。 次に各Frame内のボタンを押下するとそのFrame内のTextBox3つが消去されるようにできました。※画像は比較を容易にするために2番目と5番目のボタンを押下しています。 当初はこれで完全に解決だと思ったのですが、念の為、新規Excelファイルで.xlsm形式で保存した後、まったく同じ内容のフォームとVBAを記述したところ、そちらは一番右側のTextBox(TextBox3など)しか消去されないのです。 2枚並べて正常に動くVBAをコピペしても、ダメなVBAは正常な動作をしてくれませんでした。しかし一度全てのExcelファイルを保存して閉じた後、再度、ダメな方を開いたところ正常動作が確認できました。 話が長くなって申し訳ございませんが、話はもう少し続きます。 実は今回、正常動作したファイルのPC1とは別のPC2ではどうにもこうにもダメなままなのです。 【PC1】Office2021 ・正常動作VBA ・ダメなVBA → 保存・閉じる・再度開いたら正常動作 【PC2】Office365 ・ダメなVBA → 保存・閉じる・再度開いてもダメなまま そこでこのような症状はExcelバージョンの違いにより発生していると思われますでしょうか?それとも私のVBAの書き方(For i 文のところ)に誤りがあるのかご教示いただけないでしょうか? ちなみに下記のVBAはPC1であれば意図した通りに動きました。 ------------------------------------------------------------- ◆Class1 ------------------------------------------------------------- Private WithEvents Target As MSForms.CommandButton Private mBoxName As String ------------------------------------------------------------- '新しくイベントを作成する Public Sub SetCtrl(New_Ctrl As MSForms.CommandButton, ByVal mBoxNameX As String) Set Target = New_Ctrl mBoxName = mBoxNameX End Sub ------------------------------------------------------------- Private Sub Target_Click() UserForm1.Controls(mBoxName).Value = "" End Sub ------------------------------------------------------------- ◆UserForm1 ------------------------------------------------------------- Private mCmdButton() As Class1 Private Sub UserForm_Initialize() Dim j As Long Me.Frame1.SetFocus Me.大外フレーム.Copy 'このFor文でTextBox1~TextBox3を消去する・・・ダメな場合はText3のみ消去される For i = 1 To 3 Call Make_Event(1, Me.Controls("TextBox" & i).Name) Next For j = 1 To 5 Me.大外フレーム.Paste Me.Controls("Frame" & j + 1).Caption = "Frame" & j + 1 Me.Controls("Frame" & j + 1).Left = Me.Frame1.Left Me.Controls("Frame" & j + 1).Top = Me.Frame1.Top + Me.Frame1.Height * j Me.Controls("TextBox" & j * 3 + 1).Value = Me.Controls("TextBox" & j * 3 + 1).Name Me.Controls("TextBox" & j * 3 + 2).Value = Me.Controls("TextBox" & j * 3 + 2).Name Me.Controls("TextBox" & j * 3 + 3).Value = Me.Controls("TextBox" & j * 3 + 3).Name Me.Controls("CommandButton" & j + 1).Caption = Me.Controls("CommandButton" & j + 1).Name 'このFor文でTextBox4~TextBox6等を消去する・・・ダメな場合は一番右側のTextBoxのみ消去される For i = 1 To 3 Call Make_Event(j + 1, Me.Controls("TextBox" & j * 3 + i).Name) Next Next Me.大外フレーム.ScrollHeight = Me.大外フレーム.ScrollHeight + Me.Frame1.Height * j 'j=(Past回数+1) End Sub Function Make_Event(ByVal j As Long, ByVal mBoxNameX As String) ReDim Preserve mCmdButton(j) Set mCmdButton(j) = New Class1 mCmdButton(j).SetCtrl Me("CommandButton" & j), mBoxNameX End Function

  • フレームでのResponse.Redirect

    はじめまして。 ASP.NET(C#)初心者です。 仕事上、現在づまづいている個所があり、どなたかご教授いただけないでしょうか。 今現在、下記のようなtestページを作成しています。 --- フレーム1-------------フレーム2------------------- 【TextBox】        | *CustomValidator    | ボタン押下時、画面Response.Redirectで別ページ表示 【Button】         | --------------------------------------------------- ボタン押下時、TextBoxはCustomValidatorで検証し、 OKならばResponse.Redirectで、 フレーム2に別ページを表示(targetでフレーム2を指定)する。 といったものを作成したいのです。 1回目の検証OK時には上記の動作をするのですが、 それ以降、ボタンを押下するとフレーム1と同じ画面が フレーム2に表示されるようになってしまいます。 分かる方、もしくはヒントがありましたら教えていただけると幸いです。 よろしくお願いいたします。

  • コマンドボタンのEnterイベント後に、フォーカスを移動したい。

    コマンドボタンのEnterイベント後に、フォーカスを移動したい。 フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。 CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。 以下のようなサンプルを作成しました。 Private Sub CommandButton1_Enter() CommandButton1_Click End Sub Private Sub CommandButton1_Click() MsgBox ("OK") TextBox2.SetFocus End Sub この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。 (正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。) Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。 要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。 よろしくお願いいたします。

  • 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

  • マザーボードから取り外す

    写真に写っている黒いようなものをマザーボードから外すにはどうすればいいですか? https://multimedia.okwave.jp/image/answers/10/103018/103018_original.jpg

  • 元のサイズで添付画像を表示するには

    質問・回答に添付された画像を投稿時の解像度で表示するにはどのように操作すればいいのでしょうか。7/28のリニューアルからやり方が分からなくなってしまいました。リニューアル後の投稿分も~_original.jpgにあるのは変わらないようなのですが。 例: 質問ページに表示される画像 https://multimedia.okwave.jp/image/answers/11/112345/112345_L.jpg 画像をクリックしてイメージを拡大、で表示される画像 https://multimedia.okwave.jp/image/answers/11/112345/112345.jpg 投稿時の解像度(たぶん) https://multimedia.okwave.jp/image/answers/11/112345/112345_original.jpg

  • EXCEL VBAのユーザーフォーム上のテキストボックスの入力方法について

    すいません教えていただきたいことがあります。 EXCEL VBAのユーザーフォームについて、 コマンドボタンにタグを設定して、これにキーボードと同じ機能を持たせて テキストボックス内に入力することは可能でしょうか。 例えばコマンドボタンを「あ」~「ん」まで作り、それぞれのボタンに「あ」~「ん」までのタグを設定する。 Private Sub UserForm_Initialize() CommandButton1.Tag = "あ" CommandButton2.Tag = "い" ・・・・「ん」までボタンを作成する。 次に、 Private Sub CommandButton1_Click() TextBox1.Value = TextBox1.Value & CommandButton1.Tag End Sub Private Sub CommandButton2_Click() TextBox1.Value = TextBox1.Value & CommandButton3.Tag End Sub ・・・「ん」まで作成する。 この設定では、コマンドボタンのクリックで文字の追加はできますが、ボタンを押すと常に文字が一番後ろに追加されるため、 テキストボックスをクリックしても文章の途中に文字を挿入することが出来ません。 通常のキーボードの入力と同じようにテキストボックス内でクリックした箇所からコマンドボタンで入力を開始するような設定は可能でしょうか。 よろしくお願いします。

  • EXECEL VBA コマンドボタンからのモジュール呼び出し 

    お世話になります. Excelのワークシート上にコマンドボタンを表示させ, そのコマンドボタンを押下することで, 作成したモジュールを実行させたく思っています. 下記記述のUserFormの****の部分に, 作成した標準モジュールを呼び出す記述が必要と考えておりますが, 上手くいきません. ちなみに標準モジュールは完成済みです. Private Sub CommandButton1_Click() ***************** End Sub 有識者の方,ご存知の方がいらっしゃいましたらご教授願います.

  • VBAのユーザーフォームのframeとTabIndexについて

    見よう見まねでやっているのでわからなくなってしましました。 1つのユーザーフォームの中に3つのフレームを作成しています。 わかりやすく順番にフレーム1、フレーム2、フレーム3とします。 フレーム1の中には、複数のTextBoxなり、ComboBoxがあるのですが。 ちゃんと思い通り動くようにTabIndexは0から順番に設定しました。 フレーム1の最後TextBoxの次にフレーム2のtextboxに飛んでほしいのですが、うまく動きません。 その設定には、特別な設定は必要なのでしょうか。 因みに各フレームとも「Cycle」を「fmCycleAllForms」にしてあります。 また、この現象の際に、何度かtabを押して動きを確認していると、既存のtextboxの上に全く同じtextboxが作成されてしまいます。 勝手に作成されないためにはどうしたらよろしいでしょうか? 乱筆で大変わかりづらいとは思いますが、よろしくお願い致します。

  • EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります

    EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります。 (1)ユーザーフォームにテキストボックスを2つ作る (2)コマンドボタンを1つ作る。 この場合に、コマンドボタンを押すと、セットフォーカスされている方のテキストボックスに「新春」と表示させることはできるのでしょうか。 キーボードは当然セットフォーカスされているテキストボックスに入力されますが それと同じ機能をコマンドボタンにも持たせたいのです。 Private Sub CommandButton1_Click() で TextBox1がセットフォーカスされているならTextBox1に"新春"と入力する TextBox2がセットフォーカスされているならTextBox2に"新春"と入力する というような条件式になるのでしょうか。 色々調べましたが答えが見当たりません。 よろしくお願いいたします。

既婚男性の行動の意味とは?
このQ&Aのポイント
  • 既婚男性の行動の意味について知りたいです。職場で別部署の既婚男性の行動が気になります。4年前から関わりがあり、最近は顔を合わす機会も増えてきました。しかし、彼の行動の意図や心理が読み取れません。
  • 既婚男性の行動には何か特別な意味があるのでしょうか?職場で別部署の既婚男性が私に関わろうとしてきます。容姿を褒めたり、プライベートを探ったり、仕事に関与したがったりと様々な行動をとります。しかし、私との会話は業務中心であり、本当の意味が分かりません。
  • 既婚男性の行動の真意を知りたいです。職場で別部署の既婚男性が私に関心を持っているようです。最近は顔を合わす機会も増え、私の仕事やグループにも関与しようとしてきます。しかし、彼の言動や態度からは、本当の意味が読み取れません。何が彼の行動の背後にあるのか、知りたいです。
回答を見る

専門家に質問してみよう