Daten die in der Zwischenablage(Clipboard) sind direkt in einen Array einlesen
Hallo alles zusammen,
ich habe ein Code aus dem Netz mit dem ich Daten aus der Zwischenablage in eine Textdatei schreibe.
Nun will ich aber Daten die in der Zwischenablage liegen direkt in einen zweidimensionalen Array schreiben,
Das schaffe ich aber nicht. Habe jetzt schon ewig herumprobiert mit split() und replace() aber ich finde einfach nicht den richtigen Ansatz.
Ich markiere vorher einen Range und den will ich dann nicht wie im unten gezeigten Code in einen Textdatei schreiben (wie bisher und dann wieder in einen Array zurück) sondern direkt in den Array_A(a,b)
Hier der Code der ganz gut funktioniert aber eben zuerst in eine Textdatei geschrieben wird. Habe ich anfangs genutzt weil das so schneller ging als direkt aus einem Range Objekt in einen Array. So komisch es auch klingen mag.....
Viele Grüße aus dem Süden Deutschlands
Ralf
Option Explicit
'
' Gesamtes Tabellenblatt in eine Textdatei schreiben
'
'Benötigt einen Verweis auf die Microsoft Forms 2.0 Objektlibrary
'
Public Sub Speichern(Spaltentrenner As String, Pfad As String, Der_Range As Range, LeerWeg As Boolean)
Dim a
Dim oData As New DataObject, sDelim As String, sText As String, iFrei As Integer
Dim iColCount As Integer, sDelete As String
On Error GoTo Fehler
sDelim = Spaltentrenner
Der_Range.Copy
oData.GetFromClipboard
Application.CutCopyMode = False
sText = oData.GetText(1)
oData.Clear
If LeerWeg Then
iColCount = Der_Range.Columns.Count - 1
sDelete = String$(iColCount, vbTab)
sText = Replace(sText, sDelete, "")
While Len(sText) <> Len(Replace(sText, vbCrLf & vbCrLf, vbCrLf))
sText = Replace(sText, vbCrLf & vbCrLf, vbCrLf)
Wend
End If
If Len(sDelim) > 0 Then sText = Replace(sText, vbTab, sDelim)
iFrei = FreeFile
Open Pfad For Output As #iFrei
Print #iFrei, sText;
Close #iFrei
Exit Sub
Fehler:
MsgBox Err.Description
End Sub
ich habe ein Code aus dem Netz mit dem ich Daten aus der Zwischenablage in eine Textdatei schreibe.
Nun will ich aber Daten die in der Zwischenablage liegen direkt in einen zweidimensionalen Array schreiben,
Das schaffe ich aber nicht. Habe jetzt schon ewig herumprobiert mit split() und replace() aber ich finde einfach nicht den richtigen Ansatz.
Ich markiere vorher einen Range und den will ich dann nicht wie im unten gezeigten Code in einen Textdatei schreiben (wie bisher und dann wieder in einen Array zurück) sondern direkt in den Array_A(a,b)
Hier der Code der ganz gut funktioniert aber eben zuerst in eine Textdatei geschrieben wird. Habe ich anfangs genutzt weil das so schneller ging als direkt aus einem Range Objekt in einen Array. So komisch es auch klingen mag.....
Viele Grüße aus dem Süden Deutschlands
Ralf
Option Explicit
'
' Gesamtes Tabellenblatt in eine Textdatei schreiben
'
'Benötigt einen Verweis auf die Microsoft Forms 2.0 Objektlibrary
'
Public Sub Speichern(Spaltentrenner As String, Pfad As String, Der_Range As Range, LeerWeg As Boolean)
Dim a
Dim oData As New DataObject, sDelim As String, sText As String, iFrei As Integer
Dim iColCount As Integer, sDelete As String
On Error GoTo Fehler
sDelim = Spaltentrenner
Der_Range.Copy
oData.GetFromClipboard
Application.CutCopyMode = False
sText = oData.GetText(1)
oData.Clear
If LeerWeg Then
iColCount = Der_Range.Columns.Count - 1
sDelete = String$(iColCount, vbTab)
sText = Replace(sText, sDelete, "")
While Len(sText) <> Len(Replace(sText, vbCrLf & vbCrLf, vbCrLf))
sText = Replace(sText, vbCrLf & vbCrLf, vbCrLf)
Wend
End If
If Len(sDelim) > 0 Then sText = Replace(sText, vbTab, sDelim)
iFrei = FreeFile
Open Pfad For Output As #iFrei
Print #iFrei, sText;
Close #iFrei
Exit Sub
Fehler:
MsgBox Err.Description
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 235186
Url: https://administrator.de/contentid/235186
Ausgedruckt am: 23.11.2024 um 04:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Runner-ralf,
wenn es darum geht die aktuell ausgewählten Zellen-Range in ein Array zu wandeln, kann dies simpler nicht sein. Dazu brauchst du noch nicht mal den Umweg über die Zwischenablage gehen.
Grüße Uwe
p.s. bitte benutze in Zukunft Tags für deinen Code. Merci.
wenn es darum geht die aktuell ausgewählten Zellen-Range in ein Array zu wandeln, kann dies simpler nicht sein. Dazu brauchst du noch nicht mal den Umweg über die Zwischenablage gehen.
Sub AktuelleAuswahlInArrayWandeln()
Dim arr As Variant
arr = Selection.Value
' ----- Array zur Demo im Debug-Bereich ausgeben ---------
'checke ob ein Array zurückgegeben wurde (zur Info: bei der Auswahl von nur einer Zelle ist es kein Array)
If IsArray(arr) Then
For i = 1 To UBound(arr)
For j = 1 To UBound(arr, 2)
Debug.Print arr(i, j)
Next
Next
Else
' es war nur eine Zelle ausgewählt
Debug.Print arr
End If
End Sub
p.s. bitte benutze in Zukunft Tags für deinen Code. Merci.
Hallo!
oder alternativ, die (Debug)-Ausgabe so:
Grüße
spatzenhirn
oder alternativ, die (Debug)-Ausgabe so:
'.....
Dim aValues As Variant, vValue As Variant
aValues = Range("A1:B5").Value
If IsArray(aValues) Then
For Each vValue In aValues
Debug.Print vValue 'Ausgabe: A1, .., A5, B1, .., B5
Next
For Each vValue In WorksheetFunction.Transpose(aValues)
Debug.Print vValue 'Ausgabe: A1, B1, .., A5, B5
Next
End If
'.....
Grüße
spatzenhirn