2016-08-13 91 views
0

有沒有一種方法可以使用VBA來搜索SQL表,並返回一個是/否的結果,如果在Excel中的單元格包含在SQL表中找到相同的數據?將Excel值與SQL表If語句進行比較。

我有Excel表中的客戶記錄,我需要比較記錄ID(A1)如果存在匹配,我需要將單元格與「客戶」表進行比較,如果有的話......我需要一些如果值存在或不存在,則從sql輸出。

例子: 如果Cell.A1是= SQLTableA 然後「是」 其他 「不」

我覺得像我靠近,但不能從SQL輸出的權利。

enter code here 
Option Explicit 
Dim cell As Range 
Dim CustRow As Range 

Const SQLConStr As String = "Driver={SQL Server} ;Server=<svrname>;Database=CustData; UID=user; PWD=<pass>" 

Sub connectTODB() 

Dim CustDataConn As ADODB.Connection 
Dim CustDataCMD As ADODB.Command 
Dim rs As ADODB.Recordset 


Set CustDataConn = New ADODB.Connection 
Set CustDataCMD = New ADODB.Command 
Set rs = New ADODB.Recordset 

CustDataConn.ConnectionString = SQLConStr 
CustDataConn.Open 
CustDataCMD.ActiveConnection = CustDataConn 


Dim CustValue As String 
CustValue = "ACP" 


Dim strSQL As String 
strSQL = "SELECT * FROM [CustData].[dbo].[CustomerData] WHERE (CustomerData.Client='" & CustValue & "')" 



With rs 
.ActiveConnection = CustDataConn 
'open strsql 

'.Open "IF EXISTS(SELECT * FROM [CustData].[dbo].[CustomerData] WHERE CustomerData.Client = 'ACA') Print 'Yes' Else Print 'No'" '(notworking) 
'.Open "IF EXISTS(SELECT Client FROM CustData.dbo.CustomerData WHERE CustomerData.Client = 'hdh') Print 'Yes' Else Print 'No'" '(notworking) 
.Open "IF EXISTS(SELECT Client FROM CustData.dbo.CustomerData WHERE CustomerData.Client = 'hdh')" 

Workbooks("<file>.xlsm").Worksheets("CustOutput").Range("A2").CopyFromRecordset rs 

.Close 
End With 

CustDataConn.Close 
Set rs = Nothing 
Set CustDataConn = Nothing 


End Sub 
+0

是你可以做到這一點。我會在Excel中爲命名單元拍攝,並存儲proc電話 – Drew

+0

我只寫了這些[這裏](http://stackoverflow.com/a/33489270)之一。由於它得到了大量的審查,我不喜歡做另一個。 – Drew

+0

你想用'IF EXISTS(SELECT')做什麼?如果你只想將一個值複製到一個單元格中 - 你不需要'copyfromrecordset'。只要讓你的連接字符串正確,並且查詢使用然後將'rs!YourFieldName'分配給單元格 – dbmitch

回答

0

有人可以在這裏查看我的理解......

這將打開連接和發送字符串,然後過濾我的價值,過濾後的.BOF將返回假,我改變了答案到一個「是/否」的結果,並輸出到一個單元格......

我以前沒有使用BOF(EOF)值,而且來自Microsoft的描述更難理解......但是..

如果BOF = True(那麼該值不存在>更改爲「否」)

如果BOF =假(當時價值確實存在>更改爲 「是」)

所以..

enter code here 

With rs 

.ActiveConnection = CustDataConn 
.Open strSQL 
.Filter = "Client = 'ABC'" 
Workbooks("file.xlsm").Worksheets("CustOutput").Range("A2") = IIf(.BOF, "No", "Yes") 
.Close 

End With 
0

您可以使用ADODB.Recordset.Filter屬性返回匹配的記錄。如果沒有匹配的記錄,則ADODB.Recordset.BOF將返回true。

With rs 
    .ActiveConnection = CustDataConn 
    .Open strSQL 

    .Filter = "CustomerData.Client = 'ACA'" 
    Debug.Print IIf(.BOF, "No", "Yes") 

    .Filter = "CustomerData.Client = 'hdh'" 
    Debug.Print IIf(.BOF, "No", "Yes") 

    'Clear Filter 
    .Filter = "" 

    Workbooks("<file>.xlsm").Worksheets("CustOutput").Range("A2").CopyFromRecordset rs 

    .Close 
End With 
+0

謝謝Thomas Inzina – SecuredIS

+0

歡迎您,我希望它能幫上忙 – 2016-08-16 21:03:36

+0

我無法使用提供的答案不同的運行時錯誤和輸出結果錯誤(我是新來的提問者,我很難回答代碼...) – SecuredIS