![]() |
Excel Daten in VBA Access importieren
ich habe folgendes problem:
ich habe noch nie etwas aus excel in acces importiert! jetzt habe ich die aufgabe daten aus einer excel-datei, jedoch nur bestimmte "datenbereiche", in access zu importieren mittels VBA ich habe zwar in der hilfe gelesen das es gehen soll, jedoch stand dort nicht wie :( also wenn ihr codebsp dazu habt oder eine seite kennt wo das erklärt ist wie man auf die bestimmten bereiche zugreift und diese anschliessend importiert dann wär ich sehr dankbar dafür.. |
Re: Excel Daten in VBA Access importieren
Zitat:
Auf jeden Fall sollte die Sache recht einfach über ADO zu erledigen sein. Wenn mich nicht alles täuscht hat aber Excel so seine Tücken in seiner Verwendbarkeit als Datenquelle. Wenn Zeilen gelöscht oder eingefügt werden so bringt das die Reihenfolge der Datensätze durcheinander. Unter anderem verschiebt sich (zumindest glaube ich mich daran zu erinnern) das EOF nicht wieder nach vor wenn Zeilen gelöscht werden. Welche Version von Access benutzt du? |
Das mit dem Excel hat mir irgendwie keine Ruhe gelassen ;)
Hier findest du alles was du brauchst um über ADO mit SQL auf Excel zugreifen zu können. |
also mit bestimmten datenbereichen meine ich folgendes:
ich muss zuerst ein feld finden, in dem ein bestimmter wert steht, und dann zb wenn das gesuchte feld A2 ist, die daten von B2 bis B10 einlesen und in eine tabelle in access schreiben.. gelöscht bzw eingefügt oder verändert wird in der excel datei nichts! also solche probleme wie du sie beschrieben hast sollten nicht auftreten.. ich selbst muss diese importfunktion auf access und excel 2002 entwickeln.. aber möglicherweise wird beim benutzer access bzw excel 2000 verwendet! aber ältere versionen bestimmt nicht.. für den link bedank ich mich mal, ich werde mir die seite mal genauer anschaun! http://www.vbarchiv.net/workshop/workshop09.php diese seite wurde mir von jemanden anderen gesagt.. vielleicht auch für dich interessant.. wer weis.. |
Na wenns weiter nichts ist ;)
Ich habe dir schnell ein kleines Beispiel entwickelt in dem ich in Access ein Abfrage auf Daten in Excel ausführe. Die Änderungen auf deine Anforderung solltest du mit den Infos aus meinem Link problemlos bewerkstelligen können. Leider habe ich nur Office-XP installiert aber zwischen XP und 2000 gibt es ohnehin nur unwesentliche Änderungen, sprich ein Konvertieren dürfte auch kein Problem sein. Da du aber erst mit dem Project beginnst würde ich dir empfehlen unter Access2000 (sofern vorhanden) zu arbeiten. Das 2000-er Format lässt sich unter XP problemlos öffnen. Übrigens hoffe ich, das du die Developer-Version von Office hast. Ansonsten kannst du die erstellte Datenbank nämlich nicht mit Runtime-Komponente weitergeben. Einen Viewer wie für Access97 gibt's meines Wissens nämlich nicht mehr. |
danke für den beispielcode!
ich denke schon das ich das jetzt hinbekomme! big thx! und wegen den versionen.. da hast recht das bei access 2000 und xp kaum ein unterschied ist.. der größte unterschied ist wohl die unterstützung von xml... und das mit den dateiformaten sollte ja auch keine probleme mit sich bringen... da sie ja wie du schon gesagt hast "einwandfrei" kompatibel sind also das 2000er beim xp.. |
hmm...
also jetzt steh ich wiedermal an.. wenn ich jetzt zb in der excel datei, das feld suche, in dem ein bestimmter wert steht, zb im beispiel von seidl nehmen wir halt "alter" an, dann würd ich jetzt gerne wissen, wie ich das feld am besten suche, und dann, wie man herausfindet, auf welchem feld man sich befindet.. dh, welches feld den inhalt "alter" hat weil ich brauch den feldnamen dann für meine weitere bearbeitung! im beispiel code vom seidl, würde ich als ausgabe C1 brauchen.. da der wert "alter" im feld "C1" eingetragen ist! meine weitere importfunktion baut nämlich auf diesem feld auf.. dh der bereich wird anhand dieses feldes festgelegt.. |
Meinst du sowas in der Art?
Public Function SucheNachString() MsgBox FindFirst("Alter"), vbOKOnly + vbInformation, "Suchergebnis" End Function Public Function SucheNachZahl() MsgBox FindFirst(19), vbOKOnly + vbInformation, "Suchergebnis" End Function Public Function FindFirst(FindWhat As Variant) As String Dim rngAll As Excel.Range Dim rngFound As Excel.Range Dim strRow As String Dim strCol As String Dim lngCol As Long Dim CharCode As Long Set rngAll = Application.ActiveSheet.Cells Set rngFound = rngAll.Find(FindWhat) If Not rngFound Is Nothing Then strRow = CStr(rngFound.Row) lngCol = rngFound.Column Do While lngCol > 0 CharCode = lngCol Mod 26 If CharCode = 0 Then CharCode = 26 End If strCol = Chr(64 + CharCode) & strCol lngCol = (lngCol - CharCode) / 26 Loop FindFirst = "Row:" & vbTab & strRow & vbNewLine & "Column:" & vbTab & strCol Else FindFirst = "Sowos gibt's do net!" End If End Function |
thx, ich werd mir das mal anschaun.. hab leider gerade wenig zeit..
aber sieht ganz hilfreich aus! |
ich bin endlich dazugekommen das ich mir das mal anschaue was du mir da gepostet hast..
also ich bin bischen verwirrt... könntest mir mal nen kleinen tipp geben, welche bibliotheken du verwendest? wäre nett :ja: weil ich hab ja wie gesagt noch nie mit excel gearbeitet in dem bezug, und steh da jetzt bischen an bei deinem beispielcode.. zuerst hat er den datentyp "Excel.Range" nicht erkannt.. da hab ich die mircosoft excel 10.0 object library gefunden.. damit kennt er den typ.. dann is aber gleich das nächste gekommen... "Application.ActiveSheet.Cells" sag mir mal bitte welche bibliotheken du alle verwendest bei dem beispielcode den du mir da gepostet hast! thx! |
also application.activesheet.cells is in der mircosoft excel 10.0 object library ...
jetzt weis ich aber nicht woran es liegt das er den befehl nicht erkennt.. vielleicht ist auch was anderes gemeint.. weil beim ausführen, bleibt er schon früher stehen... nur markiert er halt diesen befehl bei der fehlermeldung.. bin bisschen ratlos.. |
Dieser Code ist direkt in ExcelXP geschrieben und ich habe keinerlei zusätzliche Bibliotheken verwendet. Soweit ich weiss müsste er aber auch ab Excel97 aufwärts funktionieren. Wenn du die Abfrage direkt aus Access starten willst muss das natürlich ein wenig anders aussehen. Ich werde aber heute nicht mehr dazu kommen ausführlicher zu antworten.
sorry |
k, wenn du mal zeit hättest, dir das anzuschaun wie das ganze in access aussehen müsste, dann wäre das hilfreich..
ich werd es mir noch selbst vornehmen.. mal sehn was ich zusammenbringe.. wenn ich es selbst hinbekomme schreib ichs rein, dann musst dir keine mühe mehr machen.. |
Hast Glück! Da's für's Joggen heute doch eher frisch ist (jo, i bin's des Joa no net gwohnt ;) ) und ich ohnehin noch eine paar CD's rippen wollte die ich mir gestern gekauft habe musste ich sowieso etwas Zeit vor'm Computer verbringen.
Im Anhang findest du eine neue Version der Access-Datenbank. Ich habe den Autostart für das alte Formular entfernt und ein neues eingefügt (AutomateExcel). In dem kannst du ein Excel-File auswählen und einen String eingeben nach dem gesucht werden soll bevor du die eigentliche Suche startest. Diese befüllt dir dann ein Feld mit der Zelle die den ersten Treffer gebracht hat. Natürlich ließe sich da noch einiges machen bzgl. Auswahl des zu durchsuchenden Blatts, Suchbereich usw. aber ich will nicht unnötig nur vor'm Kastl sitzen. Kannst mir ja noch was zum rippen geben :D Aber Scherz beiseite. Wenn du es nicht schaffst aus einer Office-Application eine andere anzusprechen, dann solltest du dir ernstliche Gedanken über eine Woche tiefen Streberns machen bevor du mit VBA Probleme lösen kannst. |
Uuups! File vergessen. Woran das nur liegen kann? (:bier: )
|
echt nice von dir! thx
naja... wenn man mit sowas noch nie zu tun gehabt hat, also mit zugreifen auf andere office applicationen, dann tut man sich halt bischen schwer.. bei meinen "vba-projekten" hab ich mich bis jetzt eben rein auf access beschränkt.. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag