VB + Clipboard > Excel

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

Hi Patrick,

Ich habe in meiner Anwendung ein Grid, dessen Felder ich gerne
nach Excel exportieren möchte.

K.A. was ein Grid ist, aber nicht wichtig. kannst du nicht alle Felder aufeinmal ins Clipboard einlesen?

Ein eigenes Excel-Objekt zu benutzen wird schonmal
ausgeschlossen.

Du kannst/darfst keine Excel-Application starten oder wie muss idas verstehen.

Es muss übers Clipboard passieren.

Excel kann auch das Clipboard auslesen, dann den Inhalt neu formatieren nach Wunsch mit Zeilenumbruch o.ä.

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.

Viel Spass bei 6000 Zeilen :smile:

Hat zufällig jemand 'ne Idee?

Klar, ich hab mehr Ideen als Lösungen :smile: Also wenn du von VB aus Excel startest könntest du das Clipboard auslesen und nach Wunsch in Excel präsentieren/einfügen.

Mir ist unklar weshalb warum du schreibst: „:Ein eigenes Excel-Objekt zu benutzen wird schonmal ausgeschlossen.“

Gruß
Reinhard

Hallo,

Mir ist unklar weshalb warum du schreibst: „:Ein eigenes
Excel-Objekt zu benutzen wird schonmal ausgeschlossen.“

Das wäre auch mein aller erster Lösungsansatz. Ein Excel Object, dieses starten, und dann die Sachen in ein Exceldoc rein spielen. Dazu muss Excel nicht geöffnet werden, das geschieht alles „im Hintergrund“

Hallo,

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.

Hast Du mal versucht, das innerhalb von Excel zu tun? Eine Zelle, in der Du mehr als eine Zeile hast zu kopieren und in eine andere Zelle einzufügen? Da passiert das Selbe!

Dein Problem ist nicht der String, den Du an das Clipboard übergibst, sondern daß Excel Dir den nicht so einfügt, wie Du möchtest. Wo der Inhalt her kommt, spielt dabei keine Rolle.

Wenn ich allerdings die Zelle nur markiere, dann die Eingabezeile anklicke und dort einfüge, funktioniert es so, wie Du möchtest.

Gruß, Rainer