VBA ユーザーフォームの内容を別のブックに反映
皆様、宜しくお願い致します。
私はVBA歴が浅く初心者に近いため、何卒ご教示の程お願い申し上げます。
今回、「ユーザーフォーム.xlsm」のファイル名でVBAのユーザーフォームを作成しました。
このユーザーフォームで入力した内容を別のブックである「ご意見箱.xlsx」の「sheet1」に
反映させたいです。
「ユーザーフォーム.xlsm」と「ご意見箱.xlsx」の両ファイルは、「デスクトップ」上に置いております。
ユーザーフォーム上の「確定保存」という名称のコマンドボタンをクリックしたタイミングで、
下記のような動作をさせるべく、イベントの構文で記述しました。
~動作させたいフロー~
(1)ユーザーフォーム画面上で該当するオプションボタン(キャプション)一つを選択し、テキストボックスにテキストを入力して
(2)「確定保存」のコマンドボタンをクリックすると
(3)バックグラウンドで「ご意見箱.xlsx」の「sheet1」をファイルオープンさせて
(4)「ご意見箱.xlsx」の「sheet1」の最終行(新規行)を取得して
(5)A列の最終行(新規行)の「No.」欄に自動で連番を入力させて
(6)C列の最終行(新規行)にオプションボタン(キャプション)内容を反映させ、D列も同じく最終行(新規行)にテキストボックスの内容を反映させて
(7)そのまま自動で上書き保存させてファイルを閉じさせる。
(8)もし、オプションボタン(キャプション)の未選択やテキストボックスの未入力があった場合は、入力を促すメッセージを表示させる。
~上記フローのように動作させるためのソース~
Private Sub CommandButton_Click()
Dim tBk As Workbook
Dim p As String
Dim tSh As Worksheet
Dim i As Long
Dim j As Long
Dim v As Boolean
If Me.TextBox = "" Then
MsgBox "ご意見入力欄を入力して下さい。m(_ _)m"
Exit Sub
Else
v = False
For i = 1 To 3 'オプションが連番になっているとして、最終番号まで
If Me.Controls("OptionButton" & i).Value = True Then
v = True
Exit For
End If
Next
If v = False Then
MsgBox "所属部署を選択して下さい。m(_ _)m"
Exit Sub
End If
End If
p = ThisWorkbook.Path & "\ご意見箱.xlsx"
If Dir(p) <> "" Then
Application.ScreenUpdating = False
Set tBk = Workbooks.Open(p)
Else
MsgBox "ご意見箱.xlsx 無し"
Exit Sub
End If
Set tSh = tBk.Worksheets("Sheet1")
With tSh
j = .Range("A" & Rows.Count).End(xlUp).Row
.Cells(j + 1, "A") = .Cells(j, "A") + 1
.Cells(j + 1, "C") = i 'Me.Controls("OptionButton" & i).Caption
.Cells(j + 1, "D") = Me.TextBox.Text
End With
tBk.Save
tBk.Close
Application.ScreenUpdating = True
End Sub
~現状で困っている点~
現状では、フローで云うところの(2)と(8)の部分は動作しているのですが、(3)~(7)の部分で動作しないため、つまづいている状況です。
ユーザーフォームの画面構成と反映先となる「ご意見箱.xlsx」ファイルの「sheet1」の構成イメージ図は、画像添付のとおりとなっております。
使用アプリケーション:Excel 2013です。
諸先輩方からの大変貴重なアドバイスを賜り、それをベースにに自助努力でトライ&エラーを繰り返してきたのですが、もし具体的にお分かりになる方がいらっしゃいましたら、皆様からご教示賜りたく何卒宜しくお願い申し上げます。(拝)
お礼
ありがとうございます。出来ました! ディスプレイの方は私には難しすぎてまた次の課題にしようと思いますが、『出来る』ということが分かっただけでもこの先勉強していこうという励みになりました。 本当に感謝します。どうもありがとうございました。