前提・実現したいこと
ExcelテーブルからSQLでインプットしたRecordsetに対して複数条件でFilterをかけたい
発生している問題・エラーメッセージ
実行時エラー3001 引数が間違った型、許容範囲外、または競合しています。
該当のソースコード
Class:TableOperator
VBA
1 2Dim adoConn As ADODB.Connection 3Dim adoRs As ADODB.Recordset 4 5Private inputTable_ As ListObject 6Private filter_ As String 7 8Private Sub Class_Initialize() 9 Set adoConn = CreateObject("ADODB.Connection") 10 Set adoRs = CreateObject("ADODB.Recordset") 11End Sub 12 13Public Property Set InputTable(Table As ListObject) 14 Set inputTable_ = Table 15 Dim ws As Worksheet: Set ws = Table.Parent 16 With adoConn 17 .Provider = "Microsoft.ACE.OLEDB.12.0" 18 .ConnectionString = "Data Source = " & ThisWorkbook.FullName & _ 19 ";Extended Properties =Excel 12.0;" 20 .Open 21 22 With adoRs 23 .CursorLocation = 3 'adUseClient 24 .CursorType = adOpenStatic 25 .Open "SELECT [従業員CD],[従業員名],[最新所属名],[職種名],[残業時間],[休出時間],[年間残業時間],[年間残業時間] + [年間休出時間] AS [総残業時間] FROM [" & ws.Name & "$" & ws.ListObjects(inputTable_.Name).Range.Address(False, False) & "]", adoConn, adOpenDynamic 26 End With 27 28 End With 29End Property 30 31Public Property Let Filter(ByVal inputValue As String) 32 filter_ = inputValue 33 adoRs.Filter = filter_ 34End Property 35 36
Module1
VBA
1Sub Main() 2 With New TableOperator 3 Set .InputTable = ThisWorkbook.Sheets("DATA").ListObjects(1) 4 .Filter = "(([残業時間] >= 40 AND [残業時間] <= 45) OR ([年間残業時間] >= 350 AND [年間残業時間] <= 360) OR [総残業時間] >= 700) AND 最新所属名 = 'ブロックA'" 5 End With 6End Sub
試したこと
Filterの条件を減らすとエラーが無くなる
- [総残業時間] >= 700 AND 最新所属名 = 'ブロックA'
OK - ([残業時間] >= 40 AND [残業時間] <= 45) OR ([年間残業時間] >= 350 AND [年間残業時間] <= 360)
OK
- (([年間残業時間] >= 350 AND [年間残業時間] <= 360) OR [総残業時間] >= 700) AND 最新所属名 = 'ブロックA'
NG
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 01:30
2020/02/18 01:59
2020/02/18 02:14
2020/02/18 02:16
2020/02/18 02:24
2020/02/18 06:52