• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

celverwijzing in MS query

Status
Niet open voor verdere reacties.

flbos

Gebruiker
Lid geworden
5 feb 2004
Berichten
267
Voor een Excel (2000) applicatie heb ik gegevens nodig uit een Access database. Het importeren hiervan lukt prima, aan de hand van een query krijg ik de juiste gegevens netjes in Excel.

Wat mij echter niet lukt is om een parameter mee te geven vanuit Excel. Ik zou graag gegevens selecteren die voldoen aan een bepaalde voorwaarde. Deze voorwaarde staat momenteel in mijn query:

kolom1 < 0,9*kolom2

Zoals gezegd werkt dit goed, maar ik zou graag voor 0,9 ook een andere waarde in kunnen vullen. Ik had gedacht deze waarde in een cel op mijn werkblad in Excel in te vullen en hier vervolgens in de query naar te verwijzen, dit lukt mij echter niet.

Graag hoor ik of dit mogelijk is, eventuele andere oplossingen voor het probleem zijn natuurlijk ook meer dan welkom!!
 
Is het mogelijk voor je om een voorbeeld hiervan als bijlage hier te posten?? Dat kijkt wat makkelijker.


P.S. maximale grootte van bijlage 100kb
 
Hoi FLBos,

Jij ook hier!

Ik weet niet hoe vaak je een database importeert of om hoeveel gegevens dat het gaat, maar een oplossing is:
Zet in een vrije kolom de de formule
=als(A2<$A$1*B2;"";RIJ())
A1 staat 0,9
Als A2>0,9* B2 verschijnt het rijnummer, anders "".

Selecteer het gebied en sorteer op de kolom met rijnummer.
De rijen zonder rijnummer staan onderaan verzameld, die kun je nu verwijderen.

Deze werkwijze kun je natuurlijk ook in een macro gieten, of dat de moeite is hangt af van het aantal keer dat je de database inleest.

Jeroen
 
virtual basic

Op een ander forum is me verteld dat ik het in Virtual basis moet oplossen met een variabele, ik heb gevraagd om een voorbeeld van een module waar ik dan de query in kan zetten, want ik heb nog nooit een module gemaakt.

Of kan het ook in eem macro? Met macro's heb ik alleen in Access ervaring. Hoe moet je vervolgens die module/macro aanroepen vanaf je werkblad zodat daar het query resultaat terechtkomt?

Alle suggesties zijn welkom!!
 
Hoi FLBos,

Met Virtual Basis wordt overigens Visual Basic (for Applications) bedoeld, de programmeertaal in de diverse Office-pakketten. Als je ervaring hebt met Acces, dan moet het ook lukken in Excel!

Meest simpele manier met een knop:
Knop maken:
Beeld-> Werkbalken -> Formulieren aanklikken
Uit de werkbalk Formulieren de knop (Grijs vierkantje) aanklikken en ergens in het werkblad een Knop maken (naar de positie gaan, linker muisknop ingedrukt houden en schuiven)
Nadat de knop gemaakt is wordt gevraagd om een macro toe te wijzen, kies voor nieuw en zet er de onderstaande macro in

Sub Knop1_BijKlikken()
For i = 2 To 9999:' 2 is de eerste rijnummer die vergeleken moet worden, 9999 de laatste.
If Cells(i, 1) < Cells(1,1) * Cells(i, 2) Then Rows(i).Delete:'Cells(i,1) komt overeen met Kolom A (kolomnummer 1) en Rij i, vergelijkbaar met excel-functie Adres(Rij,Kolom)
'Cells(1,1) is Cel A1, hierin staat 0,9 of een ander getal.
Next i
End Sub

Op deze wijze kun je overigens ook een keuzelijst maken in Excel, een antwoord op een nog niet gestelde vraag van een ander onderwerp.

Jeroen
 
Laatst bewerkt:
Ik ga ervan uit dat de query vanuit excel aangemaakt is en dat daarom ms-query gebruikt wordt.

Je kunt de variabele selectie dan vanuit de query op laten vragen.
Je ziet hier zoiets instaan als
Select tabel.gegeven FROM database.dbo.tabel Import WHERE (tabel.gegeven=0,9)

Vervang hier 0,9 door ? en tijdens het draaien van de query wordt om de variabele gevraagd.

Kies in Excel kiest voor data, externe gegevens ophalen, query bewerken.
Vul bij het Criteriumveld de veldnaam in van de waarde waarop gezocht moet worden.
Vul bij waarde eventueel een verklarende tekst in tussen blokhaken. Deze tekst wordt getoond bij het vragen naar de variabele.
 
Het is niet de bedoeling om eerst alle records naar Excel te halen (gaat niet omdat het veel te veel rijen zijn) en daar vervolgens een selectie op uit te voeren. Het werken met ? is op zich een mooie oplossing, maar dit werkt helaas niet met de wat ingewikkeldere query. MS query staat (helaas) geen variabelen toe in querys die niet grafisch kunnen worden weergegeven!

Met onderstaande macro (mede gemaakt dankzij jullie aanwijzingen) ben ik een heel eind gekomen.

Ik heb een knop gemaakt die onderstaande macro uitvoert, maar ik krijg een foutmelding. Foutopsporing wijst de regel bijna onderaan aan (ik heb er bijgezet om welke regel het gaat). Wat moet ik veranderen, heb een en ander geprobeerd, maar ik kom er niet uit. Heb ik de variabele vfactor op de juiste plaats gedeclareerd (dit laatste vroeg ik me af, heb niet het idee dat het hier aan ligt).

Sub Dalend()
'
' Dalend Macro
' Query dalende omzetten
'


vFactor = [test!A73]
Range("A6").Select
With Selection.QueryTable
.Connection = Array(Array( _
"ODBC;DBQ=d:\stage\Mavis60-3.mdb;DefaultDir=d:\stage;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize" _
), Array( _
"=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;" _
))
.CommandText = Array( _
"SELECT [b64artinr], [b64verkhh01], [b64verkhh02], [b64verkhh03], [b64verkhh04], [b64verkhh05], [b64verkhh06], [b64verkhh07], [b64verkhh08],[b64verkhh09], [b64verkhh10], [b64verkhh11], [b64verkhh12] F" _
, _
"ROM b64artst1 WHERE b64verkhh12<" & vFactor & "*b64verkhh11 And b64verkhh11<" & vFactor & "* b64verkhh10 And b64verkhh10<" & vFactor & "* b64verkhh09 And b64jartal=2003; " _
)
.Refresh BackgroundQuery:=False 'HIER GAAT HET FOUT
End With
End Sub
 
Met hulp van iemand anders heb ik de vraag inmiddels opgelost, het zat hem in de komma. In het invoerveld in excel moest ik 0.9 of een andere waarde invullen, zolang er maar een punt gebruikt wordt en geen komma.

Bedankt voor alle reacties!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan