Avatar billede engberg Juniormester
11. juli 2002 - 12:28 Der er 15 kommentarer og
2 løsninger

Kontakte et excel regneark

Hvordan bruger jeg et excel regneark i VB5 (som database)?

Jeg vil gerne se et eks, som henter indholdet af celle A3...
Avatar billede kedde65 Praktikant
11. juli 2002 - 13:33 #1
Du kan eksempelvis se data fra celle a3 i mappe1.xls på D:\ ved følgende kode. Dette er blot en måde at gøre det på, der findes mange andre måder.

Private Sub Command1_Click()
    'Dim wrk As Workbook
    Set wrk = GetObject("d:\mappe1.xls")
   
    MsgBox wrk.Sheets(1).Range("a3")
   
    Set wrk = Nothing
End Sub

VH CK
Avatar billede ocp Nybegynder
11. juli 2002 - 13:41 #2
Brug en datacontrol sæt:

Connect = Excel 8.0; (eller den version du skal bruge)

Databasename = <Workbook-filens navn>

RecordSource = <navnet på worksheet'et efterfulgt af $> (f.eks. Sheet1$

Benyt følgende kode til at vise indholdet af cell A3:
Msgbox data1.Recordset.Fields(2)

Hvis du vil vise indholdet af cell B3:
data1.Recordset.movenext
Msgbox data1.Recordset.Fields(2)
Avatar billede ocp Nybegynder
11. juli 2002 - 13:43 #3
kedde65> OK - det løser det aktuelle problem, men egner sig ikke til databasebrug.
Avatar billede kedde65 Praktikant
11. juli 2002 - 13:46 #4
NÅÅÅÅ det gør det ikke. og kan du uddybe den udtalelse lidt nærmere!!! Jeg vil tl hver en tid kunne bruge den kode jeg gav til at lave database fnidder med. Desuden er det en hamrende dårlig ide at bruge Ecel til DB når man har alle mulige andre ganske glimrende databser.
Avatar billede ocp Nybegynder
11. juli 2002 - 13:47 #5
Og så havde jeg endda lavet fejl:

Husk at sætte RecordsetType til "1 - Dynaset"

Benyt følgende kode til at vise indholdet af cell A3:
data1.recordset.absoluteposition = 2
msgbox data1.recordset.fields(0)
Avatar billede kedde65 Praktikant
11. juli 2002 - 13:54 #6
Men ellers sæt en reference til Microsoft ActiveX Data Object og brug flg. kode.

Private Sub Command1_Click()
    Dim conn As ADODB.Connection
    Set conn = New ADODB.Connection
    Dim rs As ADODB.Recordset
   
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\mappe1.xls;Extended Properties=excel 8.0;"
    conn.Open
   
    Set rs = conn.Execute("SELECT navne FROM [Ark1$]")
   
    While Not rs.EOF
        MsgBox rs(0)
        rs.MoveNext
    Wend
   
    Set conn = Nothing
End Sub

Den gennemløber den kolonne der har overskriften Navne i mit excel regneark.

VH CK
Avatar billede ocp Nybegynder
11. juli 2002 - 14:25 #7
Uddybning: Det er lidt federe at kunne benytte standard ODBC til at tilgå noget der skal benyttes til database. Og jeg har overhovedet ikke taget stilling til hvorvidt det er en god ide at bruge excel - jeg gik ud fra at der var en god grund til det.
Avatar billede kedde65 Praktikant
11. juli 2002 - 14:30 #8
ODBC - nej det vil jeg nu ikke give dig ret i. ODBC er efterhånden en ældre teknologi(langsom, men sikker) jeg vil istedet som jeg lige skrev ovenfor bruge ADO, eller ADOX. Dette er faktisk bygget til det samme. Det er hamrende hurtigt.

VH CK
Avatar billede ocp Nybegynder
11. juli 2002 - 14:32 #9
ADOX er sgu da bygget til Multidimensional Data Access?
Avatar billede kedde65 Praktikant
11. juli 2002 - 14:40 #10
Øhhh, nå da da det var det da egentlig noget nyt. Den version af det har jeg alligevel aldrig hørt før. Er du sikker på du ikke mener ADO.Net???

ADOX er bygget som en overbygning til ADO og bruges til at styre oprettelse af db, oprettelse af tabeller, styring af views, styring af Access sikkerhed osv. alt det som DAO kunne som ADO ikke kan.

VH CK
Avatar billede ocp Nybegynder
11. juli 2002 - 14:47 #11
Sorry, ADOMD er til multidim. data.
Avatar billede engberg Juniormester
12. juli 2002 - 12:21 #12
Jeg har brugt kedde65's sidste idé til en løsning - problemet er at jeg ikke kan få den at hoppe ud af While - Wend løkken, hvis rs(0) er NULL - det virker ikke at skrive

if rs(0) <> null then
  det den skal gøre
end if

- inden i løkken...

Hjælp.... ;-(
Avatar billede kedde65 Praktikant
12. juli 2002 - 12:28 #13
kan du bruge nothing istedet for Null?
Avatar billede engberg Juniormester
12. juli 2002 - 13:07 #14
nej
Avatar billede engberg Juniormester
12. juli 2002 - 13:31 #15
Ikke særlig logiskt, men det virkede da jeg skrev

If rs(0) <> Chr$(0) Then

Nå, men jeg smider lige nogle point efter jer og tak for hjælpen.

I øvrigt har I ret i at Excel ikke er god som DB for VB, men det var et særtilfælde, hvor det var nemmest.. :-)
Avatar billede kedde65 Praktikant
12. juli 2002 - 13:35 #16
Jeg fandt følgende måde!

Private Sub Command1_Click()
    Dim conn As ADODB.Connection
    Set conn = New ADODB.Connection
    Dim rs As ADODB.Recordset
   
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\mappe1.xls;Extended Properties=excel 8.0;"
    conn.Open
   
    Set rs = conn.Execute("SELECT navne FROM [Ark1$]")
    Dim i As String
    While Not rs.EOF
        i = rs(0) & ""
        If i = "" Then
            MsgBox "Feltet er tomt!!"
        Else
            MsgBox i
        End If
        rs.MoveNext
    Wend
   
    Set conn = Nothing
End Sub

VH CK
Avatar billede ocp Nybegynder
12. juli 2002 - 15:42 #17
Ellers virker Isnull(rs(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
Kurser inden for grundlæggende programmering

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