2017-10-28 9 views
1
このコードはExcel2010 VBAで書かれている

内側作業と照会していないのPostGreSQLテーブル変数が句

I私は私のSQLクエリで使用したい変数を作成し、VBAで次のコードを持っているが、私は得ることができませんIN句を使用してVBA変数を受け入れるSQLクエリ

このコードは、使用したい変数を作成して正常に動作します。それは私が私がSelectedID = 6,7,8,6452

私は今、IN句を使用して、私のクエリにこれを追加したいが、それの

Dim StaffID As Range 
Dim ID As Range 
Dim LR As Long 
Dim SelectedID As String 

'Count number of rows to search 
LR = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row 
On Error Resume Next 'if only 1 row 

'Store Data from here 
Set StaffID = ThisWorkbook.Sheets("Sheet1").Range("B2:B" & LR) 

'Loop through each cell in Range and look for any character in column A 
'then store offset cell value using comma delimiter 
For Each ID In Worksheets("Sheet1").Range("A2:A" & LR).Cells 
    If ID.Value > 0 Then 
     SelectedID = SelectedID & "," & ID.Offset(, 1).Value 
    End If 
Next ID 

'Remove first delimiter from string (,) 
SelectedID = Right(SelectedID, Len(SelectedID) - 1) 

出力例を照会する必要がある特定のセルを選択することができますちょうど動作しません。誰にも解決策や回避策がありますか?

Sheets("Sheet2").Select 
Range("A1").Select 
Dim rs As Recordset 

Dim t As String 
t = "SELECT DISTINCT s.entity_id, u.login_name, s.role " _ 
      & "FROM staff s INNER JOIN user u ON s.entity_id=u.staff_id " _ 
      & "WHERE u.staff_id IN (SelectedID) " _ 

Set rs = conn.Execute(t) 
With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1")) 
    .Refresh 
End With 

rs.Close 

答えて

2

現時点では、文字列 'SelectedID'をクエリに直接入力しています。あなたのVBAでこのような何かをする必要があります:

t = "SELECT DISTINCT s.entity_id, u.login_name, s.role " _ 
      & "FROM staff s INNER JOIN user u ON s.entity_id=u.staff_id " _ 
      & "WHERE u.staff_id IN (" & SelectedID & ")" 
+0

ありがとうございます。それがトリックでした。 – BradleyS

0

Rows.Countは、完全修飾とWith ThisWorkbook.Worksheets("Sheet1")である必要があり、完全に予選はあなたのコードがよりよく読みになります。

Function getSelectedIDSQL() As String 
    Dim ID As Range, StaffID As Range 
    Dim SelectedID As String 

    With ThisWorkbook.Worksheets("Sheet1") 
     For Each ID In .Range("A2" & .Range("A" & .Rows.Count).End(xlUp)) 
      If ID.Value > 0 Then SelectedID = SelectedID & "," & ID.Offset(, 1).Value 
     Next 
    End With 

    If Len(SelectedID) Then getSelectedIDSQL = Right(SelectedID, Len(SelectedID) - 1) 

End Function