runner-ralf
Goto Top

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

Content-ID: 235186

Url: https://administrator.de/contentid/235186

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

colinardo
Lösung colinardo 10.04.2014, aktualisiert am 11.04.2014 um 14:47:59 Uhr
Goto Top
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.
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
Grüße Uwe

p.s. bitte benutze in Zukunft Tags für deinen Code. Merci.
115420
115420 11.04.2014 um 08:22:28 Uhr
Goto Top
Hallo!

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
runner-ralf
runner-ralf 11.04.2014 um 14:52:04 Uhr
Goto Top
Hallo Uwe,

vielen Dank für die Hilfe. Ich werde wohl nie ein Programmierer werden. So einfach ist das!?

Ich habe in einer Schleife mit instr den clipboard Inhalt nach einem vbcrlf gesucht und dann diesen Teil mit split auseinandergenommen.
Das ging eine Weile gut aber irgendwann kam immer ein Speicherüberlauf.......


OK, ich werde in Zukunft Tags benutzen.

Viele Grüße

Ralf