.Cells(j + 1, "C") = i 'Me.Controls("OptionButton" & i).Caption さらに、下記のことができたらと思ってるのですがどうしたら良いのかわかりません。 このユーザーフォームで入力した内容値を別ブックである「ご意見箱.xlsx」のsheet1に反映させたいです。 j = .Range("A" & Rows.Count).End(xlUp).Row Dim v As Boolean こんなことができるのでしょうか? 直接book2に個人個人が記入すると誤ってデータを消されてしまう可能性があるので '操作できないのであればWindows(hyoubook).Activateなどで操作するのはhyoubookとしてあげればいいかと。 Private Sub 確定保存_Click()     .Cells(j + 1, "C") = i 'Me.Controls("OptionButton" & i).Caption (5)自動で上書き保存して閉じる。 とんちんかんな内容でしたらごめんなさいです。 ~現状で困っている点~ できるのなら、コードを教えてください。 4.C.xlsmのB18~D18に手動で貼付け というファイルがあり、すべて開いている状態です。 テキストボックス3には「さしす」と入力。 Exit For (4)オプションボタンの選択値とテキストボックスの内容を書き込み反映して 困っています。教えてください。, ExcelVBAでユーザフォームを作成していますが行き詰まっています。 Set tBk = Workbooks.Open(p) また宜しくお願い致します。, 教えてください。 よろしくお願いします。, ExcelVBAに詳しくないので恐縮ですが、バックグラウンドで開いても普通に開いても操作できるのは開いたブックである「ご意見箱.xlsx」のはずです。   これをBOOK10.xlsxまで続けて保存 Dim tBk As Workbook 「ユーザーフォーム.xlsm」と「ご意見箱.xlsx」は、「デスクトップ」上に置いております。   If Dir(p) <> "" Then MsgBox "ご意見入力欄を入力して下さい。m(_ _)m" Worksheets(5).Select Application.ScreenUpdating = False    'この箇所の操作でa=Cells(Rows.Count, 1).End(xlUp).Rowとすると「ご意見箱.xlsx」の最終行が取得できています。     Application.ScreenUpdating = False (3)バックグラウンドで「ご意見箱.xlsx」の「sheet1」をファイルオープンさせて If Me.Controls("OptionButton" & i).Value = True Then (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (8)もし、オプションボタン(キャプション)の未選択やテキストボックスの未入力があった場合は、入力を促すメッセージを表示させる。   End If VBA処理 ⇒ 結果反映WorkSheet(1)作成   Dim tBk As Workbook (5)A列の最終行(新規行)の「No.」欄に自動で連番を入力させて   Dim i As Long    '質問者様の環境に合わせて調整をお願い致します。 この状態でコマンドボタンをクリックすると、Sheet1には For i = 1 To 3 'オプションが連番になっているとして、最終番号まで  選択肢ウィンドウが現れ選択したほうのユーザーフォームが開く 2行目 あいう      かきく      さしす       1 (A列のデータ最終行がA30なら、A31に31と番号をふる) 3行目 あいう      かきく      さしす       2 ユーザフォーム表示 : (1)を表示したい 「Frame8」BF1~BI1オプションボタン一つ必ず選択。 MsgBox "ご意見箱.xlsx 無し" End Sub, こんにちは、お世話になります。 End If 誰かの疑問に誰かが答えることでQ&Aが出来上がり、後で見に来たたくさんの人の悩みの解決に役立てられています。 同じユーザーフォームのボタンコマンドが押されたら かなりの初心者です。 反映させたいです。 Dim p As String   Dim p As String B.xlsm プログラムはどのようにしたらよいのでしょうか?教えてください。   tBk.Close MsgBox Err.Description Worksheets("AAA").Cells(n, 3).Value = Me.テキストボックスの値.Text キャプションか番号か? 如何せん私もVBA歴が浅いので、勉強になりました。   Set tSh = tBk.Worksheets("Sheet1") (6)もしオプションボタンの未選択かテキストボックスの未入力があった場合は、警告メッセージを表示させる     A列       B列       C列        D列 (2)book2の特定のセルに(1)で記入したハイパーリンクを反映させる エンドユーザに直接編集してもらおうと思っています。 Dim n As Long Book1.xlsmのSheet1のA2と同じ日付、B1と同じ項目が交差するところにB2の数値を転記したい場合はどのようにしたら良いのか教えていただけませんでしょうか?, こんばんは、 (7)そのまま自動で上書き保存させてファイルを閉じさせる。 Application.ScreenUpdating = True ご質問にございました、オプションボタンの選択値は、キャプションになります。 チェックボックスがsheet1に自動入力できるようにしたいです。 このように、チェックボックスにチェックがあった数だけ、テキストボックスも A.xlsm テキストボックス2には「かきく」 あなたもQ&Aで誰かの悩みに答えてみませんか?. ユーザーフォーム上の「確定保存」という名称のコマンドボタンをクリックしたタイミングで、 オプションボタンの選択値とは何ですか? 1行目 テキスト1    テキスト2    テキスト3     チェックボックス Excel(エクセル) - VBA ユーザーフォームの内容を別ブックに反映 「ユーザーフォーム.xlsm」のファイル名でVBAのユーザーフォームを作成しました。 このユーザーフォームで入力した内容値を.. 質 … n = 19     If v = False Then   End If ふと「出来るのかな?」と思ったことを質問しておりますので Private Sub CommandButton_Click() 早速、具体的で親身なアドバイスを下さり真に有難うございます。 開いた後にActiveで他のブックを選択していないかの確認が必要ではないでしょうか。 ここにComboBox7(日付)、ComboBox8(項目)、TextBox11(数値)を配置しています。コンボボックス やテキストボックスに入力があるとBook1.xlsmのSheet1にそれぞれComboBox7はA2、ComboBox8はB1、TextBox11はB2に入力されるようになっています。 出来るだけbook2は閲覧とハイパーリンクをクリックするのみにしたいのです。   Dim v As Boolean Windows(mybook).Activate 'ここで「ユーザーフォーム.xlsm」に操作を移します その内容をユーザフォームへWorkSheetとして表示させて 飛ぶようにしたいのですが macro1というマクロを実行(A~E列をマクロでB.xlsmのA~E列にコピー&貼付け) 「Frame5」AV1~AZ1複数選択         v = True Book2.xlsxのSheet2では、A列に日付、B1~AZ1に項目が入っています。 Set tSh = tBk.Worksheets("Sheet1") その旨、お返事いたします。     Next     For i = 1 To 3 'オプションが連番になっているとして、最終番号まで 頂戴したご回答アドバイスも一つの事例としての構文も参考にさせて頂きました。 ※できたらでよいのですが、もう一つボタンを作成し『クリア』ボタンということで、テキストボックスに入力した内容だけをクリアさせるボタンも作ろうとおもうのですが、それはどうしたらよいのでしょうか? 私はVBA歴が浅く初心者に近いため、何卒ご教示の程お願い申し上げます。 以上のことを加えたいのですが、できますでしょうか。 おかげさまで動作させたいことに対する全体像のロジックが少し理解できました。 チェックボックス1から10のうち、「1」「2」「3」にチェック。 下記のような動作をさせるべく、イベントの構文で記述しました。 Else Workbooks.Open hyoubook 'この時点で操作できるのは開いた「ご意見箱.xlsx」です。    '開いたブックを保存しないでとじています。保存する場合は別処理になります。 これをA,B,Cのファイルを使用したまま   Application.ScreenUpdating = True Exit Sub nの値の受け渡しを方法を教えてください。, 現在Book1.xlsmでユーザーフォームを作成しています。 使用アプリケーション:Excel 2013です。 (1)ハイパーリンク先を指定するテキストボックスのようなものを設ける 内訳の「Frame2」AA1~AK1のオプションボタン一つ必ず選択。 tBk.Close (2)ユーザーフォーム内のテキストボックスには2と表示される     Set tBk = Workbooks.Open(p) End If いの一番に具体的で親身なアドバイスを下さり真に有難うございます。 Exit Sub Private Sub CommandButton2_Click() この方法って見つかりそうで見つからなかったんですよね。ヒントになりそうな情報はインターネットでいくつか見つけることができたんですが、自分が欲しいそのままの形では見つかりませんでした。, ツールをつくっていると、もしかしたら「ExcelVBAで別ブックのユーザーフォームを操作」したい時があるかもしれません。, 例えばツールをつくるにしても1から全てつくる場合もあるでしょうが、既にできたツールを流用したツールを作りたい時もあるかもしれません。, というのも、その既存のツールがある程度の規模で業務の中でも便利に使われている、とは言ってももう少し手間が少なくなると助かるなんて時があるかもしれません。, そういった時に最初から全てコーディングするのではなく、既存のツールを補完、もしくは流用できたら工数も手間も少なくなるでしょう。, 例えばその方法のひとつとして「ExcelVBAで別ブックのユーザーフォームを操作」できたらどんなに良いでしょうか。今回はこのコードについて備忘録としても自分の勉強としても整理していこうかと思います。.     Exit Sub ・・・・・   tBk.Save テキストボックスを3つ、チェックボックスを10個作りました。 早速、具体的なアドバイスを下さり真に有難うございます。 ' Application.ScreenUpdating = False 一応Bookを開いたのが見えるようにしています。 ここに辿り着くまでにさんざん書籍やWEBなどで調べに調べまくってトライ&エラーを繰り返してきたのですが、もしお分かりになる方がいらっしゃいましたら、皆様にご教示賜りたく何卒宜しくお願い申し上げます。, こんにちは ExcelVBAで別ブックのユーザーフォームを操作するためのコード(操作元ファイル), ExcelVBAで別ブックのユーザーフォームを操作するためのコード(操作先ファイル), ExcelVBAとTransferTextを使ってAccessにCSVを取り込ませる方法, ExcelVBAのOLEObjectsでシート上のActiveXコントロールを使用不可にする方法, ExcelVBAのShapesとIf文でシート上のフォームコントロールを無効にする方法, ExcelVBAでシートのActiveXコントロールの文字色と背景色を変更する方法, ExcelVBAで外部アプリ操作やクラスモジュールのコードが見つからない問題の考察. あなたも誰かを助けることができる Worksheets(5).Range("A1").Select End If テキストボックス1には「あいう」 ユーザフォームの『コントロールの追加』で「Microsoft Office Spreadsheet XX.X」を追加して 「Frame6」BA1~BC1複数選択   C19~D19に貼付け という事は可能ですか?, 仕事上システムを作り始めたVBA初心者です。すみませんが、ご教示下さい。     .Cells(j + 1, "A") = .Cells(j, "A") + 1 5.1に戻ってBOOK2.xlsxで以下同じ作業 使用しているのはすべてSheet1のみです。 それと、このエクセルファイルを開き、マクロを有効にするのボタンを押すと思うのですが、そのときにすでにユーザフォームが表示されているようにしたいのですが・・・どうすればいいのでしょうか? Workbooks(datbook).Close   p = ThisWorkbook.Path & "\ご意見箱.xlsx" (2)「ご意見箱.xlsx」の「sheet1」の最終行を取得して   Else n = n + 1 ここで、B2の数値を別なブックBook2.xlsxのSheet2に転記したいと考えております。 このWorkSheetを空でなく前出の処理内容を反映したSheetにすることは出来るでしょうか? 1.2種類のユーザーフォームを作成し、ファイルを開くと こんにちは、お世話になります。 (1)バックグラウンドで「ご意見箱.xlsx」をファイルオープンさせて     MsgBox "ご意見箱.xlsx 無し" このような流れで、A列のデータ最終行に番号をふっていきたいです。 If Me.TextBox = "" Then チェックボックスは複数チェックすることができます。 ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 Page1 「Frame4」チェックボックス複数選択「#11」AO1・PO1、 「#12」AQ1・AR1、「#13」AS1、AT1(記入ない場合有り) If Dir(p) <> "" Then Application.DisplayAlerts = False '警告非表示  book1のユーザーフォームに datbook = "ご意見箱.xlsx" エラー処理: With tSh つたない説明ですが御回答の程宜しくお願い致します。, エクセルのユーザーフォームについての質問です。 コマンドボタンをクリックすると、テキストボックスに入力された値とチェックされた       Exit Sub それぞれに入れるコードを教えていただけないでしょうか。 mybook = "ユーザーフォム.xlsm" End Sub 選択セルが全てC列なのですが、複数選択する場所があるのと、シートが1日~31日と多いのです。(中身は全て一緒です。) book2.xlsxの特定のセルに反映させるマクロがあります。  指定のセルへ○を反映させたい。 'ファイルオープン Else エクセル2013使用のVBA初心者です。 「Frame7」BD1~BE1複数選択 BOOK1.xlsx ~ BOOK10.xlsx(ファイルごとに行数はバラバラ、列数はA~Dで固定) コピーされて、次々と下の行に入って行くようにしたいのです。 その行は1で終了で今後足していきません。他の行に移ります。 (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 Dim i As Long   If Me.TextBox1 = "" Then       End If End If         Exit For v = True ActiveSheet.Paste 'コピーした部分を貼り付けています。     .Cells(j + 1, "D") = Me.TextBox1.Text ~上記フローのように動作させるためのソース~ (1)ユーザーフォーム画面上で該当するオプションボタン(キャプション)一つを選択し、テキストボックスにテキストを入力して とSetRowHeightという名前のマクロは、Book1 に保存されているModule1というモジュールに含まれています。, [開発] タブで、[ visual basic ] をクリックしてvisual basic Editorを開きます。, Visual Basic Editor で、[表示] メニューの [プロジェクトエクスプローラー(z0z_)] をクリックするか、CTRL キーを押しながら Rキーを押します。, [プロジェクトエクスプローラー ] ウィンドウで、コピーするマクロが含まれているモジュールを貼り付け先のブックにドラッグします。 この場合、Module1 を Book2 から Book1 にコピーしています。, Excel Tech Community では、いつでも専門家に質問できます。Microsoft コミュニティでは、サポートを受けられます。また、Excel User Voice では、新機能についての提案や改善案を送信することができます。. 使用アプリケーション:Excel 2013です。 .Cells(j + 1, "D") = Me.TextBox.Text v = False また頂いた内容で試させていただきます。, 皆様、宜しくお願い致します。 Dim tSh As Worksheet Range("date1[#All]").Copy 'この時点で「ご意見箱.xlsx」のデータベースの範囲がコピーされます。 マクロと VBA ツールは [開発] タブにあります。このタブは既定で非表示になっているため、 … C.xlsm (adsbygoogle = window.adsbygoogle || []).push({}); 上記のコードを順番に解説していきます。ちなみに自分がこのコードを確認した環境は「Excel2013」です。, まず前提としては、デスクトップ上に「AAA」エクセルファイルと「BBB」エクセルファイルの2つのブックがあるとします。, 上記のコードは「BBB」エクセルファイルの標準モジュールに記述しており、「BBB」エクセルファイルから「AAA」エクセルファイルにあるフォームモジュールの「UserFormA」を操作するというものです。, まず、上記のコードの2行目で「AAA」エクセルファイルのパス格納用の変数pを宣言、3行目で「AAA」エクセルファイルを格納するためのオブジェクト変数wbを宣言します。, 5行目の「p = “C:\Users\user\Desktop\AAA.xlsm”」で変数pに「AAA」エクセルファイルがある場所のパスを格納します。, 6行目の「Set wb = Workbooks.Open(p)」で「AAA」エクセルファイルを開いて、それをオブジェクト変数wbに格納します。, 8行目の「wb.VBProject.VBComponents(“UserFormA”).Designer.Controls(“textbox1”).Value = “テスト”」では、まず「AAA」エクセルファイルのVBProjectオブジェクトを操作します。, 「VBProject.VBComponents」というコードですが、このコードを使用すると場合によっては「Visual Basic~信頼性に~」といったエラーが出てしまうときがあるかと思います。, このような時は、エクセルを開いた画面からファイルタブを選択、そこから、オプション→セキュリティセンター→セキュリティセンターの設定→マクロの設定まで進みます。, その画面の開発者向けのマクロ設定の項目で「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する(V)」にチェックを入れます。これで「VBProject.VBComponents」を使う場合のエラーは出なくなるかと思います。, このVBProjectオブジェクトは一般的には「VBEを操作する」という風に言われたりしますが、VBEの画面の左上にあるプロジェクトエクスプローラの部分を見るとわかりやすいかと思います。, 「VBAProject(~)」とか「フォームモジュール」「シートモジュール」「標準モジュール」などがあるところです。この部分を操作すると考えるとイメージしやすいのではないでしょうか。, 「VBProject」はそのエクセルファイルにある各モジュールがまとめられている所で、VBComponentsでその中の構成要素の一つ(例えば標準モジュールとかフォームモジュール)を取得できるというイメージになるかと思います。, 次の「Designer」というコードですが、インターネットで調べても詳しく書いてある所をなかなか見つけられなくて、VBEのオブジェクトブラウザで調べた所、次のように表示されました。, 「IHTMLEditDesigner」をインターネットで調べてみてもイマイチよくわからなくて「MSHTML」を調べてみたら「Trident」について多く表示されました。ちなみにWikipediaには以下のように書かれています。, Trident (トライデント)は Internet Explorer に搭載されている HTML レンダリング エンジンの名称で、ライブラリ ファイルの名称から MSHTML とも呼ばれている。, Internet Explorer 4.0 より導入されたもので、Windows 向けではアップデートを重ねているが、Macintosh 向けの Internet Explorer for Mac は次のバージョンの 5.0 で Tasman に置き換えられた。Internet Explorer 7 とそれ以降に含まれるバージョンではウェブ標準に準拠するように開発されている。, Trident はソフトウェア開発者が自分のソフトウェアにウェブ ブラウズ機能を容易に追加できるよう、ソフトウェア コンポーネントとして設計されている。, う~ん・・・。これも難しくてよくわかりませんが、Webページをつくるための道具、といった感じでしょうか。, いろいろと試行錯誤してみましたが、とにかくこの「Designer」という部分がないと他のブックのユーザーフォームのコントロールは操作できませんでした。, この後の「.Controls(“textbox1”).Value = “テスト”」はUserFormAフォームモジュールに設定されているtextbox1というオブジェクト名のテキストボックスに「テスト」という値を入れる、という意味になります。, 「Designer」の後に「.Controls(“textbox1”).Value = “テスト”」と繋げないとテキストボックスを操作できません。, 「MsgBox wb.VBProject.VBComponents(“UserFormA”).Designer.Controls(“CommandButton1”).Caption」ですが、「AAA」エクセルファイル内にあるUserFormAの中のコマンドボタンに表示されているキャプションをメッセージボックスで表示するというものです。, 11行目の「Application.Run “AAA.xlsm!フォームを開く”」は、「AAA」エクセルファイル内にあるUserFormAを表示するマクロを実行するというものです。, 「Application.Run」を使うことで別ブックのマクロを実行することができます。ポイントとしては、”(ダブルクォーテーション)で囲む必要があるということです。, 「フォームを開く」というのは、「AAA」エクセルファイル内にあるフォームを開くためのプロシージャ名です。実際にフォームを表示させるには、この中に「UserFormA.Show」といったように別途コードを入れておく必要があります。, 12行目の「Application.Run “AAA.xlsm!コマンドボタンクリック”」は次の項の操作先ファイルのコードで説明しますが、「AAA」エクセルファイルで開いたフォームに設置したコマンドボタンのクリックイベントを実行するコードです。, 以上が「ExcelVBAで別ブックのユーザーフォームを操作する方法」のコードの操作元ファイルで必要なコードの説明になります。, 先程書いたのが操作元ファイル(BBB.xlsm)のコードで、ここでは操作先ファイル(AAA.xlsm)のコードの説明に入ります。結論としては以下のコードが必要になります。, 標準モジュールの「コマンドボタンクリック」プロシージャでフォームモジュールのCommandButton1_Clickの処理を実行するという流れです。フォームモジュールに入力したコードでポイントがひとつあります。, 1行目、「Sub CommandButton1_Click()」のSubの前に「Private」を入れると「コマンドボタンクリック」プロシージャでCallしても受け付けてくれません。, フォームモジュールでコマンドボタンなどのコントロールを設置すると、基本的にはPrivateが入ったクリックイベントのコードが自動で作成されてしまいます。ですので、標準モジュールからのCallで動作させられるように忘れずに削除する必要があります。, なぜこのような順番にしたかというと、操作元ファイルからのクリックイベントは直接は操作できなかったからです。例えば次のようなコードだと動作しません。, Application.Runは基本的には「マクロ」じゃないと動作しないようなので、Excelからするとクリックイベントは違うという認識なのでしょう。, 以上のことから、フォームモジュールの「MsgBox “メッセージ”」の部分を適宜必要な処理を実行できるコードに変更すれば「ExcelVBAのDesignerで別ブックのユーザーフォームを操作する」ことができます。, 今回のコードを見つけるのはなかなか大変でした。Googleで他のエクセルファイルのユーザーフォームを操作する方法について検索してみても「Application Run~」という風に、他のエクセルファイルのマクロを実行するためのコードはたくさん見つけることは出来ます。, けれども、他のエクセルファイルにあるユーザーフォームを操作する方法はなかなか見つかりませんでした。どうすればこのコードを見つけられるか考えた所、エクセルの「オブジェクト構造」を考えれば良いかもしれないと思いました。, 例えばエクセルの特定のブックの特定のシートの特定のセルを参照するためには以下のようなコードを書くと思います。, Workbooks(“A”).WorkSheets(“B”).Range(“A1”).value, このように他のエクセルファイルも参照できるようなコードを書けば、そのファイルにあるユーザーフォームも操作できるはず、と考えました。, しかし現実は厳しいもので、例えば以下のコードのようにいろいろ試行錯誤はしてはみました。, Workbooks(p).UserForm1.Controls(“textbox1″).value=”テスト”, 上記のような感じのコードを手を変え品を変え延々と打ち込んではみたのですが、うんともすんとも言わず、画面には無常にも黄色のラインとエラーのメッセージが表示され続ける状態でした。, 「自分のイメージではなくて、ちゃんとしたエクセルのオブジェクト構造を確認するべき」だと考え直してインターネットで調べてはみたのですが、これもユーザーフォームを操作できる所まで書かれたものは見つけることが出来ませんでした。, あーでもないこーでもないといろいろとコードをいじっている内に、とある事に気づきます。「そういえば、VBEのプロジェクトエクスプローラの部分て階層構造っぽいな」と。, なぜここに気づいたかというと、今回の動作を実行するとなると二つのエクセルファイルのモジュールを見比べたり、行ったり来たりする必要があったので必然的にこの部分を見ていたからです。, ですから「VBAProject」とか、この部分のコードがあるんじゃないかと思いました。調べてみるとVBProjectとかVBComponentsというコードが見つかり、「おっ、これはいけるかもしれない!」と思ったのですが、また壁が立ちはだかります。, wb.VBProject.VBComponents(“UserFormA”).Controls(“textbox1”).Value = “テスト”, 何が足りないかというと「Designer」というコードです。今だからこれがあれば動作するとわかります。ですがこれに気づく前は、まさかこんなコードが必要だとは夢にも思っていなかったので偶然にもこのコードを見つけて動作した時は本当に驚きました。, 「これはいけるか?」と思ったらまた壁が立ちはだかります。長くなるのでここで割愛しますが、この後もSendkeysを使ったりPowerShellを試してみたり、そもそもフォームを表示させる必要があるのか?と考えたりもしました。, このブログでは自分がさせたい動作のコードを見つけるまでに四苦八苦してきたことをいろんな所で書いてきましたが、今回の件でAccessとかOutlookだけではなくてExcelでもオブジェクト構造の理解は必要なんだなと感じました。, 別に注意点というわけでもないのですが、今回のコードはユーザーフォームを表示しなくても必要な処理を実行出来ます。, つまり、今回使った「Application.Run “AAA.xlsm!フォームを開く”」でフォームを表示しなくても, 「Application.Run “AAA.xlsm!コマンドボタンクリック”」だけで必要な処理を実行できるということです。, とりあえず「こういうこともできる」という自分への確認の意味で、今回のようなコードの形にしてみました。, もっと良い方法はたくさんあるとは思いますが、いろんなやり方のひとつとして見ていただければと思います。.

Usb Wifi 親機 5, アンチテーゼ さもじろう 立ち回り 46, 天パ 芸能人 女 12, 早稲田 社学 合格最低点 4, エポス 保険 電話 20, 韓国芸術高校 ジミン テテ 11, Matplotlib カラーマップ 範囲 14, トイレ 黄ばみ 水の中 5, Cd リッピング Flac Mac 5,

Write a comment