Option
Explicit
Sub
Importera_FiltreradData_Access1()
'© 2001
Alla rättigheter XL-Dennis
Dim
cnt
As
ADODB.Connection
Dim
rst
As
ADODB.Recordset
Dim
stDB
As
String,
stNummer
As
String,
stSQL
As
String
Dim
lnAntalFalt
As
Long,
lnAntal
As
Long
Dim
dtStartDatum
As
Date,
dtSlutDatum
As
Date
'Sökvägen till databasen.
stDB
= ThisWorkbook.Path
&
"\"
&
"XlData1.mdb"
Set
cnt =
New
ADODB.Connection
Set
rst =
New
ADODB.Recordset
'Tar
bort tidigare hämtade uppgifter i det aktiva arbetsbladet.
Cells(1,
1).CurrentRegion.Clear
'Här
skapas anslutningen till databasen.
cnt.Open
"Provider=Microsoft.Jet.OLEDB.4.0;"
&
_
"Data Source="
&
stDB
&
";"
'Här
hämtas uppgift om önskat nummer från användaren.
stNummer = _
Application.InputBox("Ange
nummer (2):",
"Urval - Steg 1",
Default:="",
Type:=1)
'Här
hämtas uppgift om önskat tidsintervall från användaren.
'Startdatum
dtStartDatum = _
Application.InputBox("Ange
Startdatum (2001-01-01):",
"Urval - Steg 2",
Default:="",
Type:=2)
'SlutDatum
dtSlutDatum = _
Application.InputBox("Ange
Slutdatum (2001-10-01):",
"Urval - Steg 3",
Default:="",
Type:=2)
'Här
sätts urvalet ihop till en SQL-sträng.
stSQL
=
"SELECT
[Nummer],[Modell],[Ut],[Antal]"
_
&
"
FROM tblData"
_
&
"
WHERE [In] >= # "
&
dtStartDatum
&
"
# AND"
_
&
"
[Ut] <= # "
&
dtSlutDatum
&
"
# AND"
_
&
"
[Nummer] = "
&
stNummer
&
""
_
&
"
ORDER BY [Ut], [Modell];"
With
rst
.CursorLocation
= adUseClient
.Open stSQL, cnt, adOpenForwardOnly, adLockReadOnly
End
With
lnAntalFalt = rst.Fields.Count
For
lnAntal =
0
To lnAntalFalt -
1
Cells(1,
lnAntal +
1).Value
= rst.Fields(lnAntal).Name
Next
lnAntal
'**************************Excel 97*************************
'Istället
för att använda sig av ADO kan vi använda DAO - Se:
Importera textfiler med poster än 65536
Dim
vaData
As
Variant
Dim
rnData
As
Range
Dim
lnRad
As
Long,
lnKol
As
Long
Dim
lnPoster
As
Long,
lnFalt
As
Integer
'Här
läses alla poster in i en matris.
vaData = rst.GetRows()
'Här
identifieras antal poster och fält.
lnPoster =
UBound(vaData,
2)
+
1
lnFalt =
UBound(vaData,
1)
+
1
'Här
skrivs data in i det aktiva arbetsbladet mha
'TRANSPOSE-funktionen
är dock begränsad till drygt 5400 poster
'i
versionerna 97 och 2000 av Excel.
Set
rnData = Range(Cells(2,
1),
Cells(lnPoster +
1,
lnFalt))
rnData = Application.Transpose(vaData)
'***********************Excel 2000 / 2002********************
'Här
kopieras data till arbetsbladet.
Cells(2,
1).CopyFromRecordset
rst
Range(Cells(2,
3),
Cells(65536,
3).End(xlUp)).NumberFormat
_
=
"yyyy/mm/dd"
'Kopplar ned anslutningen och tömmer arbetsminnet.
rst.Close
Set
rst =
Nothing
cnt.Close
Set
cnt =
Nothing
End
Sub