Hi, habe ein Problem, bei dem ich leider nicht weiter komme.
Ich habe in meiner Anwendung ein Grid, dessen Felder ich gerne nach Excel exportieren möchte.
Ein eigenes Excel-Objekt zu benutzen wird schonmal ausgeschlossen. Es muss übers Clipboard passieren.
Ich gehe also jedes Feld aus dem Grid durch und schreibe es ins Clipboard, und das auch jeweils Zeilenweise.
Mit Strg+V kann man dann anschließend die Daten aus dem Grid in Excel einfügen.
Funktioniert auch schon relativ gut, aber:
Wenn in diesem Grid jetzt ein Mehrzeiliges Textfeld steht, wird dieser Text in Excel in eine neue Zeile geschrieben, anstatt einen normalen Zeilenumbruch (ALT + Enter) zu machen.
Hier ist der Code:
Private Sub mnuZwischenAblage\_Click()
Dim aktfld As Integer
With Data1
If .Recordset.RecordCount = 0 Then
MsgBox "Keine Positionen selektiert!"
Exit Sub
End If
.Recordset.MoveFirst
Clipboard.Clear
On Error Resume Next
Clipboard.SetText "Positionen von Beleg " + Feldtext(.Recordset.Fields("belegnr")) & vbCrLf
For aktfld = 0 To TDBGrid1.Columns.Count - 1
If (TDBGrid1.Columns(aktfld).Visible = True) Then
Zeile$ = Zeile$ & IIf(Zeile$ \> "", Chr$(9), "") & Feldtext(TDBGrid1.Columns(aktfld).Name)
End If
Next
Zeile$ = Zeile$ & vbCrLf
Clipboard.SetText Clipboard.GetText & Zeile$
While Not .Recordset.EOF
Zeile$ = ""
For aktfld = 0 To TDBGrid1.Columns.Count - 1
If (TDBGrid1.Columns(aktfld).Visible = True) Then
Zeile$ = Zeile$ & IIf(Zeile$ \> "", Chr$(9), "") & Feldtext(.Recordset.Fields(TDBGrid1.Columns(aktfld).Name))
End If
Next
Zeile$ = Zeile$ & vbCrLf
Clipboard.SetText Clipboard.GetText & Zeile$
.Recordset.MoveNext
Wend
End With
MsgBox "Positionen sind in der Zwischenablage!"
End Sub
vbCrLf bzw. chr(13)+chr(10) zu ersetzen habe ich bereits mit
Zeile$ = Zeile$ & IIf(Zeile$ \> "", Chr$(9), "") & Replace(Feldtext(.Recordset.Fields(TDBGrid1.Columns(aktfld).Name)), vbCrLf, "")
versucht, nun bleibt der Umbruch ganz weg. wenn ich dann
Zeile$ = Zeile$ & IIf(Zeile$ \> "", Chr$(9), "") & Replace(Feldtext(.Recordset.Fields(TDBGrid1.Columns(aktfld).Name)), vbCrLf, chr(10))
schreibe, steht es wieder in einer neuen Zeile.
Hat zufällig jemand 'ne Idee?
Gruß Patrick