Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
632to636
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
632to636
632to636
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Access in Excel Bringen

Access in Excel Bringen
05.07.2005 09:31:16
Timo
Hallo - ich hab folgendes Problem! Mir liegt eine Access DB vor.
In Zeile F3 steht eine Artikelnummer und in F6 der Preis
Ich habe ein Excel Programm in der ich in Zeile A1 die Artikelnummer eingebe! Das Ziel ist es dass in Zeile D1 automatisch der Preis eingetragen wird...
Kann mir jemand helfen?

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Access in Excel Bringen
05.07.2005 11:07:20
bst
Hi Timo,
versuch's mal mit sowas.
Liest die Artikelnummern aus Spalte A ab A2 und schreibt die zugehörigen Preise - falls diese in der DB gefunden wurden - in Spalte B.
Die DB-Tabelle heißt hier Artikel, die relevanten Felder dieser Tabelle Artikelnummer sowie Preis.
HTH, Bernd
--
Option Explicit

' benötigt im VBA einen Verweis auf M$ DAO x.y Object Library !!!

Const dbfile As String = "d:\daten\excel\beispiele\data\artikel.mdb"

Private Sub cmdRead_Click()
   Dim dbs As Database ' Datenbank
   Dim qdf As QueryDef ' Datenbankabfrage
   Dim rec As Recordset ' Ergebnis der Datenbankabfrage
   Dim mysql As String ' ein SQL-Befehl
   Dim mynum As Long ' die aktuelle Artikelnummer
   Dim i As Long ' Zeilennummer
   
   Set dbs = OpenDatabase(dbfile)
   With dbs
      For i = 2 To Cells(2, 1).End(xlDown).Row
         mynum = CLng(Val(Cells(i, 1).Value))
         mysql = "SELECT Preis FROM Artikel WHERE Artikelnummer = " & mynum & ";"
         Set qdf = .CreateQueryDef("", mysql)
         ' Ergebnis der Abfrage holen
         Set rec = qdf.OpenRecordset(dbOpenSnapshot)
         If Not rec.EOF Then
            Cells(i, 2).Value = rec.Fields(0).Value
         End If
      Next
   End With
   dbs.Close
End Sub

Anzeige
AW: Access in Excel Bringen
05.07.2005 11:56:55
Timo
Wow - wievielen Dank für deine Hilfe!
Habs gerade nicht zum laufen gebracht! Kannst du mir die Excel Datei maybe per Email zuschicken? Das wäre klasse!!!
Grüße Timo
AW: Access in Excel Bringen
05.07.2005 12:15:22
bst
Hallo Timo,
Was geht denn nicht ?
Hast Du im VBA auch den Verweis gesetzt ?
Hier ein leicht geändertes Teil. Sucht die MDB im selben Verzeichnis wie die XLS.
https://www.herber.de/bbs/user/24476.zip
HTH, Bernd
AW: Access in Excel Bringen
05.07.2005 12:46:22
Timo
Ok - hab das File jetzt! Nur - geht es auch dass sobald in der Spalte ein Eintrag ist er automatisch den Eintrag aus der DB holt?
Anzeige
AW: Access in Excel Bringen
05.07.2005 14:36:23
bst
Hi Timo,
auch sowas geht. Benutze ein WorkSheet_Change Ereignis und erledige das dort.
Sowas (ähnliches) wie dieses. Allerdings läßt sich über den Sinn so eines Teils streiten ;-)
cu, Bernd
--
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim cell As Range ' eine Zelle aus Target
   Dim dbs As Database ' Datenbank
   Dim dbfile As String ' Datenbankname inkl. Pfad
   Dim qdf As QueryDef ' Datenbankabfrage
   Dim rec As Recordset ' Ergebnis der Datenbankabfrage
   Dim mysql As String ' ein SQL-Befehl
   Dim mynum As Long ' die aktuelle Artikelnummer
   
   If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
   
   dbfile = ThisWorkbook.Path & "\artikel.mdb"
   Set dbs = OpenDatabase(dbfile)
   With dbs
      For Each cell In Target
         If cell.Column = 1 Then
            mynum = CLng(Val(cell.Value))
            mysql = "SELECT Preis FROM Artikel WHERE Artikelnummer = " & mynum & ";"
            Set qdf = .CreateQueryDef("", mysql)
            ' Ergebnis der Abfrage holen
            Set rec = qdf.OpenRecordset(dbOpenSnapshot)
            If Not rec.EOF Then
               Application.EnableEvents = False
               cell.Offset(0, 1).Value = rec.Fields(0).Value
               Application.EnableEvents = True
            End If
         End If
      Next
   End With
   dbs.Close
End Sub

Anzeige
AW: Access in Excel Bringen
05.07.2005 13:05:33
Timo
Hab das ganze mal auf meine DB angepasst
Ich bekomm foldende Fehler:


AW: Access in Excel Bringen
05.07.2005 14:51:46
bst
Hi again,
dann paßt ziemlich sicher Dein SQL-Befehl nicht.
Wie genau sind denn die Namen Deiner Datenfelder. Und, welchen Datentyp hat F3 ?
cu, Bernd
AW: Access in Excel Bringen
05.07.2005 17:28:05
Berber
Hallo,
sorry dass ich mich kurz einmische aber in dem Quellcode von Timo
in der Zeile mysql="Select........ fehlt am Ende ein " hinter dem ;
Bst hatte den Code richtig gesendet.
SQL ist empfindlich.
Gruss
Berber
AW: Access in Excel Bringen
06.07.2005 08:27:57
bst
Morgen,
eher nein. Das " ist vermutlich beim Erstellen des Bildes verlustig gegangen.
IMHO viel wahrscheinlicher ist F3 in der MDB keine Zahl.
Falls F3 ein String sein sollte paßt der WHERE-Teil nicht. Hier muß dann mynum links und rechts mit ' oder " versehen werden. Also - vermutlich - sowas:
mysql = "SELECT F6 FROM sheet1 WHERE F3 = '" & mynum & "';"
cu, Bernd
Anzeige
AW: Access in Excel Bringen
06.07.2005 09:21:22
Timo
Guten Morgen,
der Typ in Zeile F3 sieht so aus:
CCA-MGR-FO-K9
Hab das WHERE jetzt so geändert! Sobald ich auf den Button klicke passiert aber "garnix" Er rechnet und rechnet und kommt auf kein Ergebniss
Kann das damit zutun haben - dass die DB 65000 Einträge hat?
AW: Access in Excel Bringen
06.07.2005 09:49:56
bst
Hi Timo,
ähmm, was für eine Zeile denn ?
Ich wollte wissen wie der Datentyp des entsprechenden Feldes in der MDB ist.
Ich denke mal wir reden aneinander vorbei. Schick mal besser Deine MDB.
5-10 Datensätze reichen vollkommen.
cu, Bernd
AW: Access in Excel Bringen
06.07.2005 09:54:03
Timo
Danke für deine Hilfe - wenn du mir deine Email geben könntest würd alles schneller gehen ;)
F1 F2 F3 F4 F5 F6
CCA-SVR-SW-K9 Cisco Clean Access Server SW - Perfigo SmartServer N/A $0
CCA-SVR-SW-BUN-K9 Cisco Clean Access Server SW - Perfigo SmartServer-FO Bun N/A $0
CCA-STARTER-K9 Clean Access Server + Manager (750 users) S $0
CCA-10SVR-K9 Clean Access 10 Server Bundle S $0
CCA-10SVR-BUN-K9 Clean Access 10 Server Failover Bundle S $299,995
CCA-SVR-FO-K9 Clean Access Server Failover Upgrade N/A $0
CCA-10SVR-FO-K9 Clean Access 10 Server Failover Upgrade S $0
Anzeige
AW: Access in Excel Bringen
06.07.2005 10:10:49
bst
Hmm, hilft mir nicht viel.
Nimm vielleicht mal Deine Datenbank, kopiere 10 Datensätze in eine Test-DB und probiere es mit der. Geht das denn ?
cu, Bernd
AW: Access in Excel Bringen
06.07.2005 10:15:31
Timo
Nein - dann rechnet er sich auch tot...
Hast du ICQ? 171471029
AW: Access in Excel Bringen
06.07.2005 10:21:32
bst
Nein, kein ICQ.
Schick halt mal Deine XLS-datei und MDB-Datei mit. Ein paar Datensätze in der MDB reichen. Bitte nicht alle!.
cu, Bernd
AW: Access in Excel Bringen
06.07.2005 10:27:59
Timo
Ok - hier die Dateien...
db muss in C:\ liegen...
www.pc-timo.de/screens/excel.rar
AW: Access in Excel Bringen
06.07.2005 11:00:50
bst
Hi,
das ist nun schon etwas daneben ...
In Deiner Datenbank gibt's nur die Felder ID, sowie F1 ... F5 in der Tabelle Artikel.
Außerdem willst Du nach Text suchen, nicht nach einer Zahl. Und, Du willst das
auch noch im Feld F2 suchen, nicht in F3.
Ein "SELECT F6 FROM Sheet1 WHERE F3 = ..." kann daher überhaupt nicht gehen.
Nimm sowas, das geht bei mir. Da beim Transfer die Preise wohl in einen String gewandelt
werden muß man hier noch etwas aufpassen. Hier lege ich sie einfach mal als String ab.
Wenn Du zum Testen nur einen einzigen Datensatz in Zeile 2 ablegst geht mein Cells(2, 1).End(xlDown).Row übrigens 'voll daneben', soll heißen es liefert 65536 ;-(
Nimm hier vielleicht hier besser was mit xldown.
cu, Bernd
--
Option Explicit

' benötigt im VBA einen Verweis auf M$ DAO x.y Object Library !!!

Private Sub cmdRead_Click()
   Dim dbs As Database ' Datenbank
   Dim dbfile As String ' Datenbankname inkl. Pfad
   Dim qdf As QueryDef ' Datenbankabfrage
   Dim rec As Recordset ' Ergebnis der Datenbankabfrage
   Dim mysql As String ' ein SQL-Befehl
   Dim myTxt As String ' die aktuelle Artikelbezeichnung
   Dim i As Long ' Zeilennummer
   
   'dbfile = ThisWorkbook.Path & "\artikel.mdb"
   dbfile = "c:\cisco.mdb"
   
   Set dbs = OpenDatabase(dbfile)
   With dbs
      For i = 2 To GetLastRow(1)
         myTxt = Cells(i, 1).Value
         mysql = "SELECT F5 FROM Artikel WHERE F2 = '" & myTxt & "';"
         Set qdf = .CreateQueryDef("", mysql)
         ' Ergebnis der Abfrage holen
         Set rec = qdf.OpenRecordset(dbOpenSnapshot)
         If Not rec.EOF Then
            Cells(i, 2).NumberFormat = "@"
            Cells(i, 2).Value = rec.Fields(0).Value
         End If
      Next
   End With
   dbs.Close
End Sub

Public Function GetLastRow(Optional spalte As Integer = 1) As Long
   GetLastRow = Rows.Count
   If Cells(GetLastRow, spalte).Value = "" Then GetLastRow = Cells(GetLastRow, spalte).End(xlUp).Row
End Function

Anzeige
AW: Access in Excel Bringen
06.07.2005 11:09:25
Timo
Erstmal
DANKE - du hast mir sehr weitergeholfen! Wie ist das jetzt - dass sobald man einen Einträg tätigt er automatisch updatet?
AW: Access in Excel Bringen
06.07.2005 11:31:32
bst
Hallo Timo,
Bitteschön. Nimm sowas hinter die Tabelle.
HTH, Bernd
--
Option Explicit

' benötigt im VBA einen Verweis auf M$ DAO x.y Object Library !!!

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim cell As Range ' eine Zelle aus Target, dort können mehrere Zellen stehen !
   Dim dbs As Database ' Datenbank
   Dim dbfile As String ' Datenbankname inkl. Pfad
   Dim qdf As QueryDef ' Datenbankabfrage
   Dim rec As Recordset ' Ergebnis der Datenbankabfrage
   Dim mysql As String ' ein SQL-Befehl
   Dim myTxt As String ' die aktuelle Artikelbezeichnung
   
   ' Falls nicht in Spalte A, fertig
   If Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
   
   On Error GoTo myERR
   dbfile = "c:\cisco.mdb"
   Set dbs = OpenDatabase(dbfile)
   
   For Each cell In Target
      If cell.Column = 1 Then ' nur falls in Spalte A
         myTxt = Cells(cell.Row, 1).Value
         mysql = "SELECT F5 FROM Artikel WHERE F2 = '" & myTxt & "';"
         Set qdf = dbs.CreateQueryDef("", mysql)
         ' Ergebnis der Abfrage holen
         Set rec = qdf.OpenRecordset(dbOpenSnapshot)
         If Not rec.EOF Then
            Application.EnableEvents = False
            Cells(cell.Row, 2).NumberFormat = "@"
            Cells(cell.Row, 2).Value = rec.Fields(0).Value
            Application.EnableEvents = True
         End If
      End If
   Next
   myERR:
   If Err.Number Then MsgBox Err.Description, vbCritical, "Fehler: " & Err.Number
   On Error GoTo 0
   Application.EnableEvents = True
   Set dbs = Nothing
End Sub

Anzeige
AW: Access in Excel Bringen
06.07.2005 12:29:55
Timo
Ok - klappt super! NUR - sobald ich wieder einen Eintrag rausnehme steht der alte Preis immernoch in der Tabelle...
Am besten soll dort dann ---- stehen ;) Machbar?
AW: Access in Excel Bringen
06.07.2005 12:35:40
bst
Hi Tobi,
ungetestet, ersetze:
If Not rec.EOF Then
Application.EnableEvents = False
Cells(cell.Row, 2).NumberFormat = "@"
Cells(cell.Row, 2).Value = rec.Fields(0).Value
Application.EnableEvents = True
End If
durch sowas:
Application.EnableEvents = False
Cells(cell.Row, 2).NumberFormat = "@"
If Not rec.EOF Then
Cells(cell.Row, 2).Value = rec.Fields(0).Value
Else
Cells(cell.Row, 2).Value = ""
End If
Application.EnableEvents = True
Anzeige
AW: Access in Excel Bringen
06.07.2005 12:34:04
Timo
Hab gerade versucht das ganze an mein Tool anzupassen
Die Produktnummer stehen in A30-46 - die Preise dazu in Zeile I30-46
? welche Zeilen muss ich anpassen? Sorry aber ich verstehs noch nicht 100% =)
Danke für deine Hilfe
AW: Access in Excel Bringen
06.07.2005 12:41:23
bst
Nochmals Hallo,
&GT Die Produktnummer stehen in A30-46 - die Preise dazu in Zeile I30-46
Wenn dem immer so ist, nimm sowas am Anfang (anstelle des alten Teils natürlich):
If Intersect(Target, Range("A30:A46")) Is Nothing Then Exit Sub
sowie anstatt Cells(cell.Row,2).xyz (die 2 ist hier die Spaltennummer) sowas:
Cells(cell.Row, 9).xxx (9 = Spaltennummer der Spalte I)
cu, Bernd
Anzeige
AW: Access in Excel Bringen
06.07.2005 12:58:32
Timo
Bekomm jetzt nach Einfügen folgenden Fehler

AW: Access in Excel Bringen
06.07.2005 13:27:49
bst
Tja,
das hatten wir IIRC schon mal ;-)
' benötigt im VBA einen Verweis auf M$ DAO x.y Object Library !!!
Also im VBA via Menu-Extras-Verweise dieses Teil aktivieren.
cu, Bernd
AW: Access in Excel Bringen
06.07.2005 13:31:38
Timo
Danke - ich versuchs gleich mal! Wäre toll wenn du mir ne email an
t-laue (at) web.de
schicken könntest! Ist echt wichtig dass das Teil läuft :)
AW: Access in Excel Bringen
06.07.2005 12:58:46
Timo
Bekomm jetzt nach Einfügen folgenden Fehler

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige