Hallo.
Ich bin Anfänger und habe ein Problem.
Ich möchte via Access 2013 für einen Etikettendrucker eine Steuerdatei, die gewisse Steuerzeichen voraussetzt, erzeugen.
Daten aus einer Tabelle sollen ausgelesen, mit für den Drucker erforderlichen Steuerzeichen versehen, und dann in einer Datei abgespeichert werden.
Mein bissheriges Ergebnis sieht so aus:
r
M l LBL;Sond
R PG;xxxTest-Textxxx
R GROESSE;50
R UVP;10,00
R EANXX;123123123123
R EANGR;000000000050
R A;4
r
M l LBL;Sond
R PG;xxtestxx
R GROESSE;54
R UVP;20,00
R EANXX;123987654321
R EANGR;000000000050
R A;1
-Das kleine "r" bedeutet, das ein neues Etikett anfängt.
-Das "M" definiert das Label, welches auf dem Drucker gespeichert ist.
-Das große "R" definiert einen Feldnamen im Etikettenlayout. Die Feldnamen im meiner Tabelle und im Layout sind hier gleich (dazu unten mehr).
-R "PG", R "GROESSE" ... sind Feldnamen aus meiner Tabelle "Sond_Mehrfach".
-Im Feld "A" steht die Anzahl.
-Hinter dem ";" befindet sich der Feldinhalt.
-Hinter der letzten Zeile in der Datei muss mit Return abgeschlossen sein. Also eine neue Zeile ohne Inhalt. (Funktioniert!)
In dem Beispiel sind zwei also Steuersätze in der Textdatei "Sond_Me2.txt" gespeichert.
Das erste Etikett soll in der Anzahl (Feld A) 4x gedruckt werden, und das zweite 1x.
Nun mein Problem:
Ich gebe im Code jeder Zeile ein "R" zusätzlich mit, da dies vom Drucker benötigt wird.
Print #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))
In der letzten Zeile bei dem "A" darf das aber ->nicht<- vorhanden sein.
Da muss einfach nur "A;4" oder "A;1" statt "R A;4" oder "R A;1" stehen.
Ich brauch Hilfe dabei, wie ich a) entweder davon weg komme, dass alle Spalten im Loop gleich behandelt werden, also das ich die Felder variabel selbst definiere, oder
b) wie ich aus dem String "R A;x" das "R " wieder entferne pro Datensatz.
Mit der Replace Methode habe ich keinen Erfolg. Oder ich wende es nicht richtig an.
Lieber wäre mir Variante a), weil ich da evtl. die Chance sehe die Feldnamen gleich in einen anderen Wert zu ändern (angenommen der Feldname in meiner Tabelle heißt "Text", der Drucker braucht aber nicht "Text" in der Steuerdatei sondern "Info"). Ich hoffe es ist verständlich.
Priniziell ist es aber egal, da ich mir die Tabellen selbst gestalten kann wie ich will.
Hat jemand eine Idee oder Workaround?
Wie gesagt, ich bin Anfänger und hab mir das zurecht gefrickelt aus Codeschnipseln die ich unter Google gefunden habe. Aber jetzt komm ich nicht mehr weiter, weil ich den Loop nicht verstehe, bzw. meinen Wünschen nicht anpassen kann.
Mein Code bisher:
Private Sub Btn_Drucken_Click()
On Error GoTo Err_Btn_Drucken_Click
Dim rs As DAO.Recordset
Dim intFile As Integer
Dim i As Integer
Dim strcOutFile As String
Dim strcDataSrc As String
strcOutFile = "C:\Temp\Sond_Me2.txt"
strcDataSrc = "Sond_Mehrfach"
'Close #intFile
intFile = FreeFile
Open strcOutFile For Output As #intFile
Set rs = DBEngine(0)(0).OpenRecordset( _
strcDataSrc, _
dbOpenForwardOnly, _
dbReadOnly)
With rs
Do While Not .EOF
Print #intFile, "r"
Print #intFile, "M l LBL;Sond"
For i = 0 To .Fields.Count - 1
Print #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))
Next i
.MoveNext
Loop
.Close
End With
Close #intFile
Set rs = Nothing
''''''''' Versuch: =OK: DIREKTEINGABE UEBER FORMULAR OHNE LOOP
''''''''' EINZELETIKETTNACHDRUCK
'Print #intFile, "r"
'Print #intFile, "M l LBL;Sond"
'Print #intFile, "R PG;"; Me.Text
'Print #intFile, "R GROESSE;"; Me.GROESSE
'Print #intFile, "R UVP;"; Me.UVP
'Print #intFile, "R EANXX;"; Me.EAN
'Print #intFile, "R EANGR;"; Me.EANGR
'Print #intFile, "A"; Me.Anzahl
Exit_Btn_Drucken_Click:
Exit Sub
Err_Btn_Drucken_Click:
MsgBox Err.Description
Resume Exit_Btn_Drucken_Click
End Sub
Hallo,
diese Zeile:
ZitatPrint #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))
durch folgendes ersetzen:
ZitatIf rs(i).Name = "A" Then
Print #intFile, rs(i).Name & ";" & Nz(rs(i))
else
Print #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))
End If
Vorraussetzung dafür ist natürlich, dass sonst in keiner anderen Zeile ein "A" in dem Feld steht.
Ich würde nur bis zum vorletzten Feld loopen und danach die Zeile für das letzte Feld eines jeden Datensatzes entsprechend anders ausgeben. For i = 0 To .Fields.Count - 2
Print #intFile, "R "; .Fields(i).Name & ";" & .Collect(i)
Next
' i hat hier den Wert von .Count - 1
Print #intFile, .Fields(i).Name & ";" & .Collect(i)
:) :) :) :) :) :)
Beide Varianten funktionieren.
Vielen Dank !