Avatar billede steensommer Praktikant
09. oktober 2003 - 13:50 Der er 41 kommentarer og
1 løsning

Åbne og søge i Access fra Excel

Hej
Jeg har en projektmappe hvorfra jeg vha en kommandoknap gerne vil åbne en Access-database mhp indlæsning af ny data.

Desuden vil jeg gerne fra en anden knap kunne søg i pågældende database.

Kan det lade sig gøre?
Avatar billede keil Nybegynder
09. oktober 2003 - 14:01 #1
Du kan ved at give knappen et hyperlink åbne en Access database.

Du kan også lave det fra en celle i regnearket.

du højreklikker på knappen eller på cellen.
Vælger "hyperlink"
finder den fil, der skal åbnes og trykker OK og OK.

Så skulle det virke.

I access kan du så indtaste de nye data eller lave søgninger.
Avatar billede steensommer Praktikant
09. oktober 2003 - 14:03 #2
Ja den kendte jeg godt - undskyld at jeg ikke har udtrykt mig bedre: Jeg vil gerne gøre det fra Excel vha VBA tilsluttet en kommandoknap :0)
Avatar billede keil Nybegynder
09. oktober 2003 - 14:08 #3
Det må du lige forklare lidt nærmere.

Hvad er forskellen på at gøre det vha VBA og at lave et hyperlink ?
Avatar billede steensommer Praktikant
09. oktober 2003 - 14:12 #4
Som jeg ser det er der flere:
Man kan mig bekendt ikke tildele en af excels kommandoknapper et hyperlink (af designmæssige årsager).
Man kan ikke få returneret en værdi ex i et midlertidigt regneark fra databasen!

vh Steen
Avatar billede bak Forsker
09. oktober 2003 - 20:05 #5
Gør det gennem DATA / HENT EKSTERNE DATA /NY DATABASEFORESPØRGSEL
Her kan du både hente en hel tabel og lave en parameterforespørgsel (udtræk af  specifikke data fra en tabel)
Avatar billede bak Forsker
09. oktober 2003 - 20:08 #6
Avatar billede bak Forsker
09. oktober 2003 - 20:09 #7
Avatar billede steensommer Praktikant
09. oktober 2003 - 21:43 #8
-->bak. Kan man vha vba opstarte en database. Jeg troede umiddelbart at jeg havde koden men databasen viste sig ikke?
Avatar billede bak Forsker
09. oktober 2003 - 23:22 #9
Vil du åbne selve Access ?
så prøv nednstående, skift selv C:\db1.mdb ud

Shell "msaccess c:\db1.mdb", vbNormalFocus
Avatar billede martin_moth Mester
10. oktober 2003 - 14:04 #10
Du kan sagtens få VBA fra Excel til at hooke op til en database, fx. en access-database (uden at åbne MSAccess), og indlæse hvad du nu måtte ønske i en variabel af typen recordset ved at fyre en passende SQL-sætning afsted. Er det det du vil?
Avatar billede steensommer Praktikant
10. oktober 2003 - 14:11 #11
Jeg vil egentlig begge dele - i en situation åbne access med tilhørende database og i den anden søge i omtalte database (helst vha vba) og få vist data i et temporært ark - eller endnu bedre en Userform
Avatar billede martin_moth Mester
10. oktober 2003 - 14:14 #12
Du kan åbne Access med tilhørende database ved at fyre en Shell afsted.

Og du kan indlæse udvalgt data fra en database i et recordset, og skrive recordsettet til fx. en listbox på en form eller til et regneark... Hvor meget skal du have hjælp til?
Avatar billede steensommer Praktikant
10. oktober 2003 - 14:16 #13
Hm - det første burde vel gå af sig selv det sidste med listboxen kommer nok til at knibe (med mindre døgnet har mere end 24 timer) ;0)
Avatar billede martin_moth Mester
10. oktober 2003 - 14:27 #14
OK

a) Få læst den valgte tabel i Access ind i en Record
b1) Loop igennem din record, og skriv til dit regneark
b2) Loop igennem din record, og skriv til en listbox
c) Luk forbindelsen til databasen

'ad a)

  Dim rec As Recordset
  Dim DB as Database 

  Set DB = Workspaces(0).OpenDatabase("C:\database.mdb")
  Set rec = DB.OpenRecordset _
    ("SELECT Række1, Række2, Række3 FROM Tabel ORDER BY Række1", _
            dbOpenSnapshot)
 
  'Række1, Række2,... og Tabel er navne angivet i din database


'ad b1)

  Dim i as Integer 'i indeholder rækkenummeret på den celle der skrives til
  Do While Not rec.EOF
    i = i+1
    Activesheet.Cells(i,1).formulaRC = rec!Række1
    rec.MoveNext
  Loop
     

'ad b2)

  ListBox1.Clear 
  Do While Not rec.EOF
    ListBox1.Additem rec!Række1
    rec.MoveNext
  Loop


'ad c)

rec.Close
set DB = nothing

b1 og b2 er alternativer :o)
Avatar billede steensommer Praktikant
10. oktober 2003 - 17:34 #15
Den skriver i nedenstående eksempel:"Der er for få parametre. Der var ventet 1.

Fejl ved linie:   
Set rec = DB.OpenRecordset("SELECT [Fornavn, Efternavn] FROM [Kartotek 2003] ORDER BY Efternavn", dbOpenSnapshot)
Avatar billede martin_moth Mester
10. oktober 2003 - 20:32 #16
Drop de kantede paranteser - hvor har du dem fra?
Avatar billede steensommer Praktikant
10. oktober 2003 - 20:37 #17
OK jeg droppede [] omkring Fornavn, Efternavn MEN beholdt omking KARTOTEK 2003 (ellers lavede den fejl). [ ] stammer fra noget lignende bak har lavet for mig.

Nu laver den fejl ved:

-->  ListBox1.Clear
Avatar billede martin_moth Mester
10. oktober 2003 - 20:40 #18
Hvad er fejlen?

Jeg forudsætter naturligvis, at du har smidt en listbox på din form, og at den hedder ListBox1
Avatar billede steensommer Praktikant
10. oktober 2003 - 20:42 #19
Ja jeg tænkte jo nok at det var problemet - desværre har jeg ALDRIG arbejdet med listboxe: Fejlen var derfor: Object required.
Hvorledes gøres det?
Avatar billede bak Forsker
10. oktober 2003 - 20:42 #20
Man sætter [] omkring feltnavne og tabelnavne, når der er mulighed for at disse kan forveksles med indbyggede sql- ord, eller når man har mellemrum i selve navnet. Hvis du skal bruge dem her skal de om hvert feltnavn og ikke om dem samlet.

"SELECT [Fornavn], [Efternavn] FROM [Kartotek 2003] ORDER BY [Efternavn]",
Avatar billede steensommer Praktikant
10. oktober 2003 - 20:43 #21
Ok godt at vide - tak bak
Avatar billede martin_moth Mester
10. oktober 2003 - 20:44 #22
Skriver lige igen: "Jeg forudsætter naturligvis, at du har smidt en listbox på din form, og at den hedder ListBox1"

Ellers drop det med listboxen - det var jo blot et alternativ :o)
Avatar billede martin_moth Mester
10. oktober 2003 - 20:45 #23
I øvrigt er der en super-tutorial - kort gg præcis - på http://www.w3schools.com/sql/sql_intro.asp - det var den der fik mig til at fatte SQL
Avatar billede steensommer Praktikant
10. oktober 2003 - 20:50 #24
Tak for det Martin.
Desværre laver den anden mulighed også fejl men jeg har nok bare anvendt den forkert:
-->    ActiveSheet.Cells(i, 1).formulaRC = rec!Fornavn
Der står: "Object doesn't support this proporty or method
Avatar billede martin_moth Mester
10. oktober 2003 - 20:57 #25
Hmm - du skal nok lige dim'me i som en Integer der hvor du også dimmer Rec og DB. Altså Dim i As Integer. Ellers tjek for stavefejl - det ser da rigtigt nok ud, synes jeg
Avatar billede martin_moth Mester
10. oktober 2003 - 21:00 #26
Nej - skift til  ActiveSheet.Cells(i, 1).Value - .Value, ikke .formulaRC - så skulle den være der :o)
Avatar billede steensommer Praktikant
10. oktober 2003 - 21:11 #27
Ja det har du ret i MEN (med risiko for at lyde utaknemmelig) så er der jo ingen mulighed for at SØGE i database - ovenstående lister blot samtlige poster i nævnte ark (hvor der ikke er levnet plads til dette).
Det jeg gerne ville var at kunne søge på ex: Fornavn, Efternavn, Cpr etc og herefter få listet resten af data på personen.
Avatar billede martin_moth Mester
10. oktober 2003 - 21:17 #28
Udvælgelsen af data fra databasen ligger i SQL-sætningen

SELECT Fornavn, Efternavn WHERE efternavn LIKE %sen

vælger

Søren Hansen
Peter Iversen

Men ikke
Lars Holm

Du sorterer med ORDER BY
Du kan også bruge WHERE efternanv = 'Hansen' - så får du KUN Søren Hansen. Osv osv.

Det står altsammen meget tydeligt forklaret i den tutorial jeg har linket til - det tager 20 minutter at pløje den igennem, så god læsning :o)
Avatar billede steensommer Praktikant
10. oktober 2003 - 21:21 #29
Jo men jeg kan vel ikke bede ikke-edb kyndige om at redigere i en SQL-streng
Avatar billede martin_moth Mester
10. oktober 2003 - 21:22 #30
Ikke forstået?
Avatar billede steensommer Praktikant
10. oktober 2003 - 21:27 #31
Jeg forsøger at lave en søgefunktion til brug for en sekretær (som selvfølgelig kan edb til husbehov men heller ikke mere). Funktionen skulle gerne være selvindlysende (og tidsbesparende). Derfor søger jeg en mulighed for LET selv at bestemme hvad der skal søges på  og hvor det skal placeres (nævnte regneark dur ikke)!!!
Men jeg forklarer mig nok dårligt :0(
Avatar billede martin_moth Mester
10. oktober 2003 - 21:30 #32
Så lader du hende indtaste det fx. efternavn hun eftersøger i en textbox med navn Text1, og når hun trykker på en sgeknap fyrer du denne SQL af:

"SELECT Fornavn, Efternavn WHERE efternavn LIKE " & Text1.Text

og så fremdeles
Avatar billede steensommer Praktikant
10. oktober 2003 - 21:33 #33
Ok jeg må vende tilbage når jeg har forsøgt lidt af hvert :0)
Avatar billede martin_moth Mester
10. oktober 2003 - 21:37 #34
Yep - det er det det handler om - forsøge dig lidt frem :o)

Med ovenstående burde du kunen nå langt - du kan fyre en SQL af mod en database, og flette brugerindtastninger ind i dit SQL-udtryk - så er der ingen grænser for hvad man kan :o)
Good luck
Avatar billede steensommer Praktikant
11. oktober 2003 - 11:57 #35
Hej Martin
Jeg har endnu ikke fået afprøvet diverse idéer men alene henvisningen til de mange gode tutorials må være point værd - tak for hjælpen.
Det kan godt være at jeg vender tilbage med spørgsmål hvis jeg kommer i bekneb - hvis det er ok  :0)
Avatar billede steensommer Praktikant
11. oktober 2003 - 12:56 #36
Her er jeg allerede tilbage. Hvad er der galt med nedenstående hvor jeg forsøger at anvende en inputbox til at søge efter:

Dim IBox as String
IBox = InputBox("Indtast søgestreng")
Set DB = Workspaces(0).OpenDatabase("\\SRV\Registre\Registeret.mdb")
Set rec = DB.OpenRecordset("SELECT * FROM [Kartotek 2003] WHERE Efternavn _  LIKE '%IBox%'", dbOpenSnapshot)
Avatar billede bak Forsker
11. oktober 2003 - 14:39 #37
Test lige det  her
SELECT * FROM [Kartotek 2003] WHERE Efternavn LIKE "%" & IBox & "%",
Avatar billede steensommer Praktikant
11. oktober 2003 - 14:42 #38
Den skriver syntax-error
Avatar billede steensommer Praktikant
11. oktober 2003 - 14:57 #39
Kan man i stedet for "LIKE" anvende "="
Noget i stil med (hvilket dog heller ikke fungerer):

"SELECT * FROM [Kartotek 2003] WHERE Efternavn = IBox, dbOpenSnapshot)
Avatar billede steensommer Praktikant
11. oktober 2003 - 16:05 #40
Hurra så var den der:

Dim IBox As String
Dim StrSQL As String
  IBox = InputBox("Indtast søgestreng")
  StrSQL = "SELECT * FROM [Kartotek 2003] WHERE Efternavn LIKE'" & IBox & "'"
  Set DB = Workspaces(0).OpenDatabase("\\SRV\Registre\Patientregisteret.mdb")
  Set rec = DB.OpenRecordset(StrSQL, dbOpenSnapshot)

Det er da en god fornemmelse  :0)
Avatar billede martin_moth Mester
11. oktober 2003 - 19:59 #41
Yep - IBox er jo en variabel med et indhold, og ikke bare noget tekst - derfor skal du bruge &-tegnene. Det viste jeg vist også i mit eksempel med Text1.Text :o)
Avatar billede steensommer Praktikant
11. oktober 2003 - 20:01 #42
Yes men ikke antal af "" ' '' "" etc  :0)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester