Hallo, ich bin neu hier habe leider keinerlei Erfahrung mit VBA und versuche mich nun für ein Projekt an diese Sache. (wurde ins eiskalte Wasser geschmissen)
Ich schildere mal mein Ziel:
Ich habe eine Abfrage in Access erstellt, mit der ich alle Tabellen aus der aktuellen DB anzeige.
Die Tabellen die nicht angezeigt werden sollen starten mit "CST-". Diesen Selektion habe ich natürlich hinbekommen.
Nun möchte ich über VBA (mittels Button in einer FORM) alle selektierten Tabellen aus dem query (also alle Tabellen die nicht "CST-*" sind) als CSV exportieren.
Der Export für ALLE tabellen gelingt mir, jedoch nicht für die Selektion.
mein Code
Private Sub Command0_Click()
Dim AktTable As TableDef
Dim i As Integer
i = 0
For Each AktTable In CurrentDb.TableDefs
If AktTable.Attributes = 0 Then
DoCmd.TransferText acExportDelim, acFormat, _
AktTable.Name, _
"C:\" & AktTable.Name & ".csv", True, ""
i = i + 1
End If
Next AktTable
MsgBox (i & "CSV's " & "created")
End Sub
Die Suchfunktion war nicht so erfolgreich. Ich hoffe ihr könnt mir helfen :([/size][/size]
Du kannst die Name-Eigenschaft vom TableDef-Objekt auswerten.
If Left$(AktTable.Name, 4) <> "CST-" Then 'exportiere
PS: Warum verwendest Du Minuszeichen (-) in Tabellennamen?
danke dir für die Antwort. ich werde das mal schnell versuchen.
Die Datenbank wurde vor 5 Monaten von einem erstellt, der bald das Unternehmen verlässt. Somit muss ich erstmal alles so nehmen wie es ist.
Danke dir vielmals, das hat wunderbar funktioniert.
Nun möchte ich den nächsten Schritt machen und über Button alle Löschabfragen , die auch "delete records" heißen starten.
ich habe soeben rausgefunden, dass es passend zu TableDefs auch QueryDefs gibt. kann man da auch die einzelnen
Namen ansprechen?
..
Dim qry As QueryDef
..
If Left$(Qry.Name,14) <> "Delete records " Then
DoCmd.OpenQuery Qry.Name, acViewNormal, acEdit
?? geht sowas?.. Wenn ich das versuche, dann meckert er :(
(sorry Leute, ich habe von Programmierung keinerlei Ahnung und kämpfe mich nun seit vorgestern damit herum. Dementsprechend bin ich ein absoluter nichtskönner und werde mich über das wochenende reinknien. danke für euer verständnis)
Hallo,
Aktionsabfragen (delete, drop, Insert, Update) müssen mit
Docmd RunSQl ....
oder Currentdb.Execute ....
ausgeführt werden.
Hi Leute,
da ich jetzt erst aus dem Kurzurlaub zurück bin konnte ich nicht früher antworten. Danke euch auf jeden Fall.
Ich habe das ganze etwas abgeändert und exportiere nun (auch) alle Abfrageergebnisse als CSV.
Zuvor Schreibe ich alle benötigten Abfragen in einer Extra Tabelle "table_chris".
Hier der Code - vllt nicht der schönste, aber er scheint zu funktionieren lol.
Public Sub Command23_Click()
Dim AktQry As QueryDef
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = Application.CurrentDb
Set rst = db.OpenRecordset("table_Chris")
Dim AppShell As Object
Dim BrowseDir As Variant
Dim Pfad As String
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
On Error Resume Next
Pfad = BrowseDir.items().Item().Path
If Pfad = "" Then Exit Sub
MsgBox Pfad
On Error GoTo 0
Do While Not rst.EOF
'DoCmd.TransferText acExportDelim, acFormat, _
rst!QryName, _
Pfad & "\" & rst!QryOutput & ".csv", True, ""
rst.MoveNext
Loop
End Sub
ich bräuchte nochmal eure hilfe.
angenommen, bei der obigen schleife kommt heraus, dass eine abfrage nicht funktioniert (name falsch whatever).
gibt es da eine möglichkeit den fehler zu überspringen, zum nächsten zu gehen aber die fehler alle am ende aufzuzählen? wenn ja, wie macht man sowas?
Hallo,
möglich ist das schon, das muss aber selber ausprogrammiert werden.
Aber wozu denn? Auftretende (Entwicklungs-) Fehler sind sofort zu eliminieren und nicht erst nach Feierabend... ;)
Laufzeitfehler können natürlich in z. B. einer Tabelle geloggt werden. Inwieweit bei solchen Fehlern ein weiterer Codeablauf sinnvoll ist, kann ich nicht beantworten.
Schon mal was von "Folgefehlern" gehört?
Hi,
danke für deine schnelle Antwort.
Ich habe keine bis kaum keine Kenntnisse in der Programmierung und versuche mich so schnell wie möglich einzuarbeiten, daher seid bitte nachsichtig mit mir lol
Weshalb ich die Fehler "aufzählen" und am Ende zusammen aufgelistet ausgeben möchte hat folgenden Hintergrund.
Die Datenbank beinhaltet ca. 90 Queries und einige davon funktionieren nicht.
Da ich aber faul bin, möchte ich nicht jeden einzelne Abfrage manuell aufrufen um zu schauen obs ausgeführt wird.
Hallo,
ZitatDa ich aber faul bin
Faulheit erzeugt lediglich exponentiellen Arbeitsaufwand... bringt also nichts.
Wirf "On Error GoTo 0" heraus und schon läuft der Code durch, ohne Rücksicht auf Verluste...
Am Ergebnis (den erzeugten csv-Dateien) sieht Du ja, welche funktionieren (und damit, welche nicht)
Danke, hilft mir nicht weiter :)
Ich denke, dass in diesem Fall faulheit keine Arbeit erzeugt, sondern in der Zukunft Zeit spart.
Danke dir trotzdem :)
Luana, kommt Dir dieser Code entgegen?
Private Sub Command23_Click()
Dim Pfad As String, q() As String, i As Long
Pfad = CreateObject("Shell.Application") _
.BrowseForFolder(0, "Ordner auswählen", &H1000, 17) _
.Items().Item().Path()
If Len(Pfad) = 0 Then Exit Sub
'MsgBox Pfad
On Error Resume Next
With CurrentDb.OpenRecordset("table_Chris", dbOpenSnapshot)
' ggf. Kommentar entfernen
'.MoveLast
'.MoveFirst
ReDim q(.RecordCount - 1)
Do Until .EOF
DoCmd.TransferText acExportDelim, acFormat, _
!QryName, _
Pfad & "\" & !QryOutput & ".csv", True
If Err Then s(i) = !QryName: i = i + 1
.MoveNext
Loop
.Close
End With
If i > 0 Then
ReDim Preserve q(i - 1)
MsgBox Join(s, vbCrLf), , "Fehlerhafte Abfragen"
End If
End Sub
vielen dank!
das hilft mir auf jeden fall weiter. Krass, wenn ich das gewusst hätte.
danke dir vielmals
ich glaube da war ein kleiner Fehler vorhanden
If Err Then [b]q(i)[/b] = !QryName: i = i + 1
Gut mitgedacht. :)
danke,
ach und unten auch MsgBox Join(q, vbCrLf), , "Fehlerhafte Abfragen"
ich danke euch allen nochmal.
ich habe irgendwie nun Interesse an Programmierung gefunden und werde ab dem 12.07 definitive mit paar tutorials starten :)
Sorry, dass ich das thema nochmal aufmachen muss.
Ich habe gesehen, dass mein vorgänger Abfragen mit Tabellenalias gebastelt hat.
Diese lassen sich irgendwie nur manuell exportieren. Woran könnte das liegen, dass es über den code nicht funktioniert?
google spuckt da leider relative wenig raus
Dann entferne doch einmal die Aliase aus einer solchen Abfrage, um sicherzustellen, dass Deine Annahme richtig ist.