DBからレコードを取得して配列に入れ込みセルに出力したいです。
何がしたいのかというと、エクセルのシートにタイムテーブルのようなものを作成したいと考えています。DBからテーブル値関数を呼び出しレコードをVBAのFor文でまわして時間のセルに対応するDBの項目に"1"が立っていたら、セルに色を付けるという仕組みにしようと思っています。
DBから値は取得できています。
しかし現在のコードで実行すると、「インデックスが有効範囲にありません」というエラーが出ます。
行と列を入れ替えるとエラーは起きないのですが、、、
VBA
1Sub G_timetable_get(time_val As String) 2 3 4 Dim db As New ADODB.Connection 5 Dim rs As New ADODB.Recordset 6 Dim strSQL As String 7 Dim CON As String 8 Dim t As String 9 10 11 CON = "Provider = SQLOLEDB;" 12 CON = CON & "DATABASE=YOYAKU;" 13 CON = CON & "UID=***;" 14 CON = CON & "PWD=***;" 15 16 17 18 19 strSQL = "Select isnull(t1,'') As t1,isnull(t2,'') As t2,isnull(t3,'') As t3,isnull(t4,'') As t4,isnull(t5,'') As t5,isnull(t6,'') As t6,isnull(t7,'') As t7,isnull(t8,'') As t8,isnull(t9,'') As t9,isnull(t10,'') As t10,isnull(t11,'') As t11 from dbo.timetable_get(" & " ' " & t & " ' " & ",'" & time_val & " ' " & ") " 20 21 Set rs = New ADODB.Recordset 22 23 rs.Open strSQL, CON 24 25 rs.MoveFirst 26 27 Dim i As Long, j As Long, hairetsu As Variant 28 hairetsu = rs.GetRows 29 30 For i = 0 To UBound(hairetsu, 1) 31 For j = 0 To UBound(hairetsu, 2) 32 If hairetsu(j, i) = "1" Then 33 Sheet5.Cells(j + 5, i + 4).Interior.Color = RGB(255, 0, 0) 34 End If 35 36 Next 37 38 Next 39 40 rs.Close 41 42 43 Set rs = Nothing 44 Exit Sub 45 46 47 48End Sub 49 50
コード修正後にはタイムテーブルのようなものを作ることができました。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/21 07:22