Betrifft: ID's aus Accessabfrage prüfen
von: Frederic
Geschrieben am: 13.09.2019 15:59:16
Hallo :)
Ich habe folgendes Problem und zwar habe ich in einer Access Datenbank mir eine Abfrage erstellt, wo in der ersten Spalte sogenannte ID's drinstehen. Diese ID's möchte ich nun in einem Exceldokument suchen und wenn diese vorhanden sind grün markieren..
Das Modul läuft in Access ;)
Bisher war mein Lösungsweg folgender
Sub ScannenID() Dim Dokumentenpfad_Visual As String Dim Sheet As Worksheet Dim ValidMeldeposition As Object Dim wb As Excel.Workbook Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open("C:\Users\fsommer\Desktop\FINREP Navigator DPM 2.8\Annotated _ Table Layout 280-FINREP 2.8.xlsx", True) objExcel.Visible = False Set db = CurrentDb Set rs = db.OpenRecordset("Select DataPointVID from My_ValidReport", dbOpenSnapshot) Do Until rs.EOF = True For Each Sheet In ActiveWorkbook.Worksheets With Sheet.UsedRange Set ValidMeldeposition = .Cells.Find(What:=rs!DataPointVID) ValidMeldeposition.Interior.ColorIndex = 43 End With Set ValidMeldeposition = Nothing Next rs.MoveNext Loop End Sub
Do Until rs.EOF = True For Each Sheet In ActiveWorkbook.Worksheets With Sheet.UsedRange Set ValidMeldeposition = .Cells.Find(What:=rs!DataPointVID) If ValidMeldeposition = True Then Cells.Interior.ColorIndex = 43 End If End With Set ValidMeldeposition = Nothing Next rs.MoveNext Loop
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1712983.html
Geschrieben am: 13.09.2019 17:45:00
Hi Frederic
Du verwendest den Begriff Sheet als Variable. Sheet ist aber auch ein Schlüsselwort in VBA.
Womöglich reicht es den Namen der Variable zu ändern. Ansonsten Frage bitte wieder als offen markieren.
cu
Chris
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1712997.html
Geschrieben am: 13.09.2019 19:42:43
Hallo Frederic,
For Each Sheet In ActiveWorkbook.Worksheets With Sheet.UsedRange Set ValidMeldeposition = .Cells.Find(What:=rs!DataPointVID) If Not (ValidMeldeposition Is Nothing) Then ValidMeldeposition.Interior.ColorIndex = 43 End If End With Next Sheet
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713241.html
Geschrieben am: 16.09.2019 08:39:02
habe folgenden Code:
Sub ScannenID() Dim Dokumentenpfad_Visual As String Dim ws As Worksheet Dim ValidMeldeposition As Object Dim wb As Excel.Workbook Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open("C:\Users\fsommer\Desktop\FINREP Navigator DPM 2.8\Annotated _ Table Layout 280-FINREP 2.8.xlsx", True) objExcel.Visible = False Set db = CurrentDb Set rs = db.OpenRecordset("Select DataPointVID from My_ValidReport", dbOpenSnapshot) Do Until rs.EOF = True For Each ws In ActiveWorkbook.Worksheets With ws.UsedRange Set ValidMeldeposition = .Cells.Find(What:=rs!DataPointVID) If Not (ValidMeldeposition Is Nothing) Then ValidMeldeposition.Interior.ColorIndex = 43 End If End With Next ws Loopdoch wenn ich den ausführe kommt das runde Ladezeichen und ich kann nichts mehr anklicken und muss die anwendung schließen.. öffne ich dann wieder Access ist der Code auch nicht gespeichert..
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713244.html
Geschrieben am: 16.09.2019 08:41:46
habe folgenden Code:
Sub ScannenID() Dim Dokumentenpfad_Visual As String Dim ws As Worksheet Dim ValidMeldeposition As Object Dim wb As Excel.Workbook Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open("C:\Users\fsommer\Desktop\FINREP Navigator DPM 2.8\Annotated _ _ Table Layout 280-FINREP 2.8.xlsx", True) objExcel.Visible = False Set db = CurrentDb Set rs = db.OpenRecordset("Select DataPointVID from My_ValidReport", dbOpenSnapshot) Do Until rs.EOF = True For Each ws In ActiveWorkbook.Worksheets With ws.UsedRange Set ValidMeldeposition = .Cells.Find(What:=rs!DataPointVID) If Not (ValidMeldeposition Is Nothing) Then ValidMeldeposition.Interior.ColorIndex = 43 End If End With Next ws Loopdoch wenn ich den ausführe kommt das runde Ladezeichen und ich kann nichts mehr anklicken und muss die anwendung schließen.. öffne ich dann wieder Access ist der Code auch nicht gespeichert..
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713256.html
Geschrieben am: 16.09.2019 09:54:13
Hi
Je nach Anzahl Datensätze und Tabellenblätter, kann die Suche lange dauern, da sich die beiden Faktoren multiplizieren. Evtl. also einfach eine Frage der Geduld (nicht rum klicken, sondern brav warten).
Teste den Prozess mal mit wenig Daten.
Zu Find konnte ich den betreffenden Link gerade auch nicht mehr finden. Aber es geht darum, dass du unbedingt die optionalen Parameter mit angeben solltest.
Die Einstellungen für LookIn, LookAt, SearchOrder und MatchByte werden gespeichert, sobald Sie diese Methode verwenden.
Wenn Sie beim nächsten Aufruf der Methode keine Werte für diese Argumente angeben, werden die gespeicherten Werte verwendet. Das Festlegen dieser Argumente ändert die Einstellungen im Dialogfeld Suchen, und das Ändern der Einstellungen im Dialogfeld Suchen ändert die gespeicherten Werte, die verwendet werden, wenn Sie die Argumente auslassen.
Legen Sie diese Argumente zum Vermeiden von Problemen explizit fest, sobald Sie diese Methode verwenden.
cu
chris
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713267.html
Geschrieben am: 16.09.2019 10:41:31
Hey ;)
also hab es nur mit zwei Worksheets versucht (...2.9.xlsx), aber ich glaube der hängt sich auf..
Sub ScannenID() Dim Dokumentenpfad_Visual As String Dim ws As Worksheet Dim ValidMeldeposition As Object Dim wb As Excel.Workbook Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open("C:\Users\fsommer\Desktop\FINREP Navigator DPM 2.8\Annotated _ Table Layout 280-FINREP 2.9.xlsx", True) objExcel.Visible = False Set db = CurrentDb Set rs = db.OpenRecordset("Select DataPointVID from My_ValidReport", dbOpenSnapshot) Do Until rs.EOF = True For Each ws In wb.Worksheets With ws.UsedRange Set ValidMeldeposition = .Cells.Find(What:=rs!DataPointVID) If Not (ValidMeldeposition Is Nothing) Then ValidMeldeposition.Interior.ColorIndex = 43 End If End With Next ws Loophab bei Aktive.Workbook jetzt durch wb ersetzt, da ich es ja vorher schon geöffnet habe
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713268.html
Geschrieben am: 16.09.2019 10:51:12
Hallo
Dir fehlt ein "rs.MoveNext"! Du hast einen Loop um dein Recordset abzuarbeiten, liest aber nicht das nächste Record ein, somit arbeitest Du das erste Record in einer Endlosschleife ab.
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713272.html
Geschrieben am: 16.09.2019 11:13:19
hatte es drin damals
aktueller Code:
Sub ScannenID() Dim Dokumentenpfad_Visual As String Dim ws As Worksheet Dim ValidMeldeposition As Object Dim wb As Excel.Workbook Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open("C:\Users\fsommer\Desktop\FINREP Navigator DPM 2.8\ _ Annotated Table Layout 280-FINREP 2.9.xlsx", True) objExcel.Visible = False Set db = CurrentDb Set rs = db.OpenRecordset("Select DataPointVID from My_ValidReport", dbOpenSnapshot) Do Until rs.EOF = True For Each ws In wb.Worksheets With ws.UsedRange Set ValidMeldeposition = .Cells.Find(What:=rs!DataPointVID) If Not (ValidMeldeposition Is Nothing) Then ValidMeldeposition.Interior.ColorIndex = 43 End If End With Next rs.MoveNext Loop End Subfunzt nicht.. bin echt am verzeifeln.. muss doch gehen.. ist doch nur nach Nummern aus Accessabfrage in Excelsheets immer suchen.. oder man packt die nummern in ein Array aber selbst das hat nicht geklappt.. der Array war irgendwie leer..
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713308.html
Geschrieben am: 16.09.2019 14:17:24
Hi
MoveNext war ein guter Tipp, aber ansonsten läufts. Ich habe mir die Situation nun mit wenigen Dummy-Daten nachgestellt und der Code flutscht in einer Millisekunde ohne Fehler durch.
Achte darauf, dass du die Excel-Datei richtig schliesst. Der Code öffnet die Datei und blendet aus, geschlossen wird sie aber nicht.
Nachfolgend der gleiche Code, aber mit der empfohlenen Late-Binding Variante (Extra Verweis wird dadurch überflüssig). Inhaltlich unverändert (auch Find unkorrigiert!).
Sub ScannenID() Dim db As Database, rs As Recordset Dim objExcel As Object, wb As Object, ws As Object, ValidMeldeposition As Object Set objExcel = CreateObject("Excel.Application") objExcel.Visible = False Set wb = objExcel.Workbooks.Open("C:\Pfad\Mappe.xlsx", True) Set db = CurrentDb Set rs = db.OpenRecordset("Select DataPointVID from My_ValidReport", dbOpenSnapshot) Do Until rs.EOF = True For Each ws In wb.Worksheets Set ValidMeldeposition = ws.UsedRange.Cells.Find(What:=rs!DataPointVID) If Not (ValidMeldeposition Is Nothing) Then ValidMeldeposition.Interior.ColorIndex = 43 Next ws rs.MoveNext Loop End Subcu
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713328.html
Geschrieben am: 16.09.2019 15:18:53
also hab es jetzt auch mal mit einer Mappe getestet, in der ein paar ID's untereinander stehen, die eig alle grün sein müssten.. aber auch bleibt alles unverändert...
ich starte das Makro ja aus Access ;)
bzgl. Find weiß ich wirklich 0 was du damit meinst? ist das noch wichtig?
Beste Grüße
Frederic
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713334.html
Geschrieben am: 16.09.2019 15:33:46
ah sry stimmt.. der öffnet die ... gar nicht gesehen.. danke :) weißt du grade wie man schnell schreiben kann, dass der beim duplikaten den zweiten dritten usw auch markiert? auf dem zweiten Sheet ist kein problem aber kann sein das zwei auf einem vorkommen
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713339.html
Geschrieben am: 16.09.2019 16:01:23
komisch.. bei der Mappe ging der Code aber jetzt kommt die Fehlermeldung bei
Set ValidMeldeposition = ws.UsedRange.Cells.Find(What:=rs!DataPointVID)
dass ein Objekt erforderlich ist..
und wie kann man dass eig performance mäßig verschnellern? glaube wenn es bald vllt funktioniert.. braucht der eine zeit.. :D
Beste Grüße
Frederic
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713340.html
Geschrieben am: 16.09.2019 16:01:24
komisch.. bei der Mappe ging der Code aber jetzt kommt die Fehlermeldung bei
Set ValidMeldeposition = ws.UsedRange.Cells.Find(What:=rs!DataPointVID)
dass ein Objekt erforderlich ist..
und wie kann man dass eig performance mäßig verschnellern? glaube wenn es bald vllt funktioniert.. braucht der eine zeit.. :D
Beste Grüße
Frederic
Betrifft: AW: ID's aus Accessabfrage prüfen
von: 1713343.html
Geschrieben am: 16.09.2019 16:26:00
Hi Frederic
Ja, der Hinweis zu Find ist wichtig. Nochmal (aller guter Dinge sind 3):
https://www.herber.de/mailing/vb/html/xlmthfind.htm
da steht dann auch wie es mit FindNext weiter geht.
Die Performance kannst du vermutlich nur verbessern, wenn du die Datenmenge resp. den zu durchsuchenden Bereich reduzierst.
cu
Chris