- 締切済み
VBA
Excel VBAでユーザーフォームを使ったアンケート入力フォームを作成しましたが、「確定」という名称のコマンドボタンをクリック実行時に別のExcelブック内の各セルにオプションボタンのキャプション(値)とテキストボックスの内容を反映(転記)させて、上書き保存させていく記述内容についてご教示頂けませんでしょうか。 具体的には、問(1)の回答は、別ブックのセルC5に反映させ、 問(2)の回答は、D5に反映、 問(3)の回答は、E5に反映、 問(4)の回答は、F5に反映、 問(5)の回答は、G5に反映、 問(6)の回答は、H5に反映、 その他のテキストは、I5に反映させる といった動作にさせるため、下記の内容で「標準モジュール」の構文と「フォーム」の構文を記述してみたのですが、このとおりどうさせるための具体的な構文が思い当たりません。 環境はExcel 2013です。どうにもならず困っているため、どうか宜しくお願い致します。 ~標準モジュールの構文~ 'ユーザーフォームに入力された転記先Book(アンケート回答結果.xlsx)の有無を確認 '及び転記先Book(アンケート回答結果.xlsxを開く事が可能な状況かどうかの確認 Sub Confirm_posting_place( _ ByVal myInformation As String, _ ByRef PostingOK As Boolean, _ ByRef StoragePath As String, _ ByRef PostFileName As String, _ ByRef PostSheetName As String) Dim buf As Variant StoragePath = "U:\Director" '転記先Bookファイルが存在するフォルダーのパス PostFileName = "アンケート回答結果.xlsx" '転記先Bookのファイル名 PostSheetName = "Sheet1" '転記先Bookのファイル上のワークシート名 buf = "" On Error Resume Next buf = Windows(PostFileName).Caption On Error GoTo 0 If buf = PostFileName Then PostingOK = Windows(PostFileName).Parent.Path = StoragePath Else PostingOK = True End If If Dir(StoragePath, vbDirectory) = "" Then PostingOK = False MsgBox "「アンケート回答入力フォーム」の投書内容の保存先のファイルがあるフォルダーとして" _ & "設定されているフォルダが見当たらないため、" & myInformation _ & vbCrLf & vbCrLf & "「アンケート回答入力フォーム」を利用される方は、このトラブル内容を" _ & "「アンケート回答入力フォーム」の開発者へ報告して対応してもらうようにして下さい。" _ , vbExclamation, "《トラブル報告》保存先ファイル不明" ElseIf Dir(StoragePath & "\" & PostFileName) = "" Then PostingOK = False MsgBox "「アンケート回答入力フォーム」の投書内容の保存先のファイルとして設定されている" _ & vbCrLf & vbCrLf & PostFileName & vbCrLf & vbCrLf & _ "が所定のフォルダー内には見当たらないため、" & myInformation _ & vbCrLf & vbCrLf & "「アンケート回答入力フォーム」を利用される方は、このトラブル内容を" _ & "「アンケート回答入力フォーム」の開発者へ報告して対応してもらうようにして下さい。" _ , vbExclamation, "《トラブル報告》保存先フォルダー不明" Else buf = Chr(0) On Error Resume Next buf = ExecuteExcel4Macro("'" & StoragePath _ & "\[" & PostFileName & "]" & PostSheetName & "'!R65536C256") On Error GoTo 0 If buf = Chr(0) Then PostingOK = False MsgBox "「アンケート回答入力フォーム」の投書内容の保存先として設定されている" _ & vbCrLf & vbCrLf & PostFileName & vbCrLf & vbCrLf & _ "というExcelBookの中には、投書内容の転記先として設定されている" _ & vbCrLf & vbCrLf & PostSheetName & vbCrLf & vbCrLf & _ "というシート名のシートが見当たらないため、" & myInformation _ & vbCrLf & vbCrLf & "「アンケート回答入力フォーム」を利用される方は、このトラブル内容を" _ & "「アンケート回答入力フォーム」の開発者へ報告して対応してもらうようにして下さい。" _ , vbExclamation, "《トラブル報告》保存先シート不明" ElseIf Not PostingOK Then Windows(PostFileName).Activate MsgBox "「アンケート回答入力フォーム」の投書内容の保存先のExcel Bookとして設定されている" _ & vbCrLf & vbCrLf & PostFileName & vbCrLf & vbCrLf & _ "と同名の別Book(保存先フォルダが異なるBook)が開いているため、 " _ & myInformation & vbCrLf & vbCrLf _ & "「アンケート回答入力フォーム」を利用される場合には、現在開かれている" & vbCrLf & vbCrLf _ & Left(PostFileName, InStrRev(PostFileName, ".") - 1) & vbCrLf & vbCrLf & _ "というWindowのExcel Bookを閉じても問題がないか否かを確認し、" _ & "特に問題がない場合には、そのWindowのExcel Bookを閉じてから、" _ & "このフォームを開き直して下さい。" _ , vbExclamation, "保存先ファイルへのアクセス不能" End If End If End Sub ~フォームの構文~ の内容については、文字数制限で収まりきれないため、この後すぐ私のユーザー名で新規質問の方で続きを書き込みいたしますので、そちらをご覧ください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
続きは https://okwave.jp/qa/q9500922.html にポストしました。
- HohoPapa
- ベストアンサー率65% (455/693)
追記します。 >>おそらく、 >>>問(1)の回答は、C5に反映、 >>から >>>問(6)の回答は、H5に反映、 >>これら用のラジオボタンを6つのFrameに分け >>6回転、もしくは6回実行するように変更する必要がありましょう。 Frameに分けずとも、 それぞれにラジオボタンごとに設定する co.GroupName を問ごとに別なものと設定すれば済むと思います。 (Frameに分けたほうがわかりやすいとは思います) なお、選択されたラジオボタンがあるかどうかをチェックしているようですので これも、問ごとに行うことになりましょう。
- HohoPapa
- ベストアンサー率65% (455/693)
このサイトにそのまま上げたためか、 ソースコードの字下げ https://s8a.jp/tab-space-or-space が行われていないので、とても読みにくいです。 じっくりとは眺めてませんが >問(1)の回答は、別ブックのセルC5に反映させ、 >問(2)の回答は、D5に反映、 >問(3)の回答は、E5に反映、 >問(4)の回答は、F5に反映、 >問(5)の回答は、G5に反映、 >問(6)の回答は、H5に反映、 >その他のテキストは、I5に反映させる この7つの情報を フォームのコンポーネントから取得しなければなりませんね? >問(1)の回答は、別ブックのセルC5に反映させ、 から >問(6)の回答は、H5に反映、 までは、 For Each co In Opinion_Box.Controls If TypeName(co) = "OptionButton" Then If co.Value = True And co.GroupName = "DepartmentSelect" Then _ Department = co.Caption End If Next co myText = Contents_of_posting.Value が担っているものと思います。 が... その1 "Opinion_Box" が どのコンポーネントを指しているかがわかりません その2 "DepartmentSelect" が どのラジオボタンたちに設定しているのかがわかりません。 その3 このルーチンが6回転する必要があるものと思いますが コードを見る限り1回しか走っていないように見えます。 おそらく、 >問(1)の回答は、C5に反映、 から >問(6)の回答は、H5に反映、 これら用のラジオボタンを6つのFrameに分け 6回転、もしくは6回実行するように変更する必要がありましょう。