質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2179閲覧

Excel VBA データ追加した際、シートを自動的に更新させたい

EDM

総合スコア30

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/08/11 04:14

編集2020/08/11 05:00

処理の流れとして、シート上にある”フォーム起動”ボタンをおしてフォーム起動、データを入力し、”データ追加”ボタンを押したとき、データベース(Oracle)にアクセスして、データを追加しています。
また、別ボタンで”シート更新”というのがあり、押したときに、データベース(Oracle)にアクセスして、すべてのデータを取得、シート上に表示しています。
この時にデータを入力して、”データ追加”ボタンを押したときに、追加に加えて自動的にシートも更新させ、追加したデータも含め表示させたいのですが、うまくいきません。
データを追加し、Final処理でデータベースから切断する際、SELECTしたらすべてのデータを取得して表示させているので追加したデータを含め表示できると思ったのですが、”オブジェクトが開いている間は操作が許可されません。”とのエラー。
final処理ではダメなのか

現状フォームで入力し、追加した時点ではシート上にに追加データが表示されなくて、わざわざ”シート更新”ボタンを押さないと追加データが見えないのです。

”シート更新”については、SELECT文で取得、表示させているだけですので省きます。
call db1については、NOのMAXを取得、max+1した数字をラベルに表示という内容なのでこれも省きます。

VBA

1Private Sub CommandButton3_Click()  フォーム起動ボタン 2 UserForm2.Show vbModeless 3 Call db1 4End Sub

VBA(UserForm2)

1Private Sub CommandButton1_Click() データ追加ボタン 2 Call db3 3End Sub

VBA(call

1Public Function db3() 2 On Error GoTo ERROR 3 Dim con As New ADODB.Connection 4 Dim cmd As New ADODB.Command 5 Dim rs As New ADODB.Recordset 6 Dim param As New ADODB.Parameter 7 Dim ds As String 8 Dim user As String 9 Dim pass As String 10 11 ds = "Provider=OraOLEDB.oracle;" 12 ds = ds & "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)));" 13 ds = ds & "User ID=hoge;Password=hogehoge" 14 15 con.ConnectionString = ds 16 con.Open 17 18 cmd.ActiveConnection = con 19 cmd.CommandTimeout = 0 20 cmd.CommandType = adCmdText 21 cmd.CommandText = "insert into EDM values(?,?,?,?,?,?)" 22 23 Set param = cmd.CreateParameter("NO", adVarNumeric, adParamInputOutput, 4) 24 cmd.Parameters.Append param 25 Set param = cmd.CreateParameter("DJNAME", adVarChar, adParamInputOutput, 45) 26 cmd.Parameters.Append param 27 Set param = cmd.CreateParameter("SONGNAME", adVarChar, adParamInputOutput, 40) 28 cmd.Parameters.Append param 29 Set param = cmd.CreateParameter("GENRE", adVarChar, adParamInputOutput, 22) 30 cmd.Parameters.Append param 31 Set param = cmd.CreateParameter("LABEL", adVarChar, adParamInputOutput, 25) 32 cmd.Parameters.Append param 33 Set param = cmd.CreateParameter("YEAR", adVarNumeric, adParamInputOutput, 4) 34 cmd.Parameters.Append param 35 36 If UserForm2.Text1.Value = "" Or UserForm2.Text2.Value = "" Or UserForm2.Text3.Value = "" Or UserForm2.Text4.Value = "" Or UserForm2.Text5.Value = "" Then 37 MsgBox "すべてのデータを入力してください" 38 Exit Function 39 Else 40 cmd.Parameters("NO").Value = UserForm2.Label2 41 cmd.Parameters("DJNAME").Value = UserForm2.Text1.Value 42 cmd.Parameters("SONGNAME").Value = UserForm2.Text2.Value 43 cmd.Parameters("GENRE").Value = UserForm2.Text3.Value 44 cmd.Parameters("LABEL").Value = UserForm2.Text4.Value 45 cmd.Parameters("YEAR").Value = UserForm2.Text5.Value 46 47 rs.CursorLocation = adUseClient 48 rs.CursorType = adOpenStatic 49 rs.Open cmd 50 MsgBox "データ追加しました" 51 rs.Open "select * from EDM Order by DJNAME,YEAR,SONGNAME", con 52 Columns("A").Hidden = True 53 With Worksheets(1) 54 Application.ScreenUpdating = False 55 .Cells.Clear 56 .Range("B1") = "カラム名" 57 .Range("C1") = "カラム名" 58 .Range("D1") = "カラム名" 59 .Range("E1") = "カラム名" 60 .Range("F1") = "カラム名" 61 .Range("B1:F1").HorizontalAlignment = xlCenter 62 .Range("A2").CopyFromRecordset rs 63 End If 64 65 GoTo FINAL 66 67 68ERROR: 69 MsgBox Erl() & "?s??F" & ERROR(Err()) 70 71FINAL: 72 UserForm2.Label2 = "" 73 UserForm2.Text1.Text = "" 74 UserForm2.Text2.Text = "" 75 UserForm2.Text3.Text = "" 76 UserForm2.Text4.Text = "" 77 UserForm2.Text5.Text = "" 78 On Error Resume Next 79 Set rs = Nothing 80 Set con = Nothing 81End Function

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

とてつもないミスをしていました。
SELECTしたところで、それをシートに表示していないわけなので、そりゃ表示されませんよね。
誠に申し訳ございません
Final行く前に処理をするようにしました。

投稿2020/08/11 04:46

編集2020/08/11 04:55
EDM

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

詳しいのはわかりますけど
データベース抜きにシートを更新することぐらい
考えればわからないですか。

投稿2020/08/11 04:27

mako1972

総合スコア383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EDM

2020/08/11 04:47 編集

自己解決しました。 誠に申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問