Można tak: Sub testADO()
Call fSql2XlsADO(ThisWorkbook.Worksheets("arkusz_docelowy").Range("$A$1"), 4)
End Sub
Public Function fSql2XlsADO(ZakresDocelowy As Range, _
ByVal lParametr As Long) As Boolean
' wtedy referencje do Microsoft ActiveX Data 2.X Objects Library
On Error GoTo fSql2Xls_Error
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim strSQL As String
Dim strConn As String
Dim bResult As Boolean
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
SciezkaAndNazwaMdb & _
";Persist Security Info=False"
strSQL = "SELECT tblpiwo.Id_piwo, tblpiwo.[ID_Producent], tblpiwo.[Nazwa_Piwo] " & _
" FROM tblpiwo WHERE (tblpiwo.[ID_Producent]=" & _
CStr(lParametr) & ");"
Set Cn = New ADODB.Connection
With Cn
.CursorLocation = adUseClient
.Open strConn
End With
Set Rs = New ADODB.Recordset
With Rs
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open strSQL, Cn, , , adCmdText
If Not (.BOF And .EOF) Then
ZakresDocelowy.Parent.Cells.ClearContents
ZakresDocelowy.CopyFromRecordset Rs
End If
End With
bResult = True
fSql2Xls_Exit:
fSql2XlsADO = bResult
On Error Resume Next
Rs.Close
Set Rs = Nothing
Cn.Close
Set Cn = Nothing
fSql2Xls_Error:
MsgBox "Błąd - " & Err.Number & vbCrLf _
& "Opis - " & Err.Description & vbCrLf _
& "Procedura - " & "fSql2Xls", vbExclamation, "VBAProject - FMdb2"
Resume fSql2Xls_Exit
End Function albo tak Sub testDAO()
Call fSql2XlsDAO(ThisWorkbook.Worksheets("arkusz_docelowy").Range("$A$1"), 4)
End Sub
Function fSql2XlsDAO(ZakresDocelowy As Range, _
ByVal lParametr As Long)
' wtedy referencje do Microsoft DAO 3.6 Object Library
On Error GoTo FSql2DAO_Error
Dim db As DAO.Database
Dim Rs As DAO.Recordset
Dim strSQL As String
Dim bResult As Boolean
strSQL = "SELECT tblpiwo.Id_piwo, tblpiwo.[ID_Producent], tblpiwo.[Nazwa_Piwo] " & _
" FROM tblpiwo WHERE (tblpiwo.[ID_Producent]=" & _
CStr(lParametr) & ");"
Set db = DAO.OpenDatabase(SciezkaAndNazwaMdb)
Set Rs = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly)
With Rs
If Not (.BOF And .EOF) Then
ZakresDocelowy.Parent.Cells.ClearContents
ZakresDocelowy.CopyFromRecordset Rs
End If
End With
bResult = True
FSql2DAO_Exit:
fSql2XlsDAO = bResult
On Error Resume Next
Rs.Close
Set Rs = Nothing
db.Close
Set db = Nothing
Exit Function
FSql2DAO_Error:
MsgBox "Błąd - " & Err.Number & vbCrLf & _
"Opis - " & Err.Description & vbCrLf & _
"Procedura - " & "FSql2DAO", vbExclamation
Resume FSql2DAO_Exit
End Function Argument lParametr pobierz sobie z komórki.
Jeśli stringowy dodaj apostrofy.
Można zastosować późne wiązanie.... wówczas nie trzeba referencji, a stałe należy zastąpić ich wartościami.
Możesz wykorzystać QueryTables ---> Menu/Dane/Pobierz dane zewnętrzne, lecz nie podałeś dokładnych wymagań.... |