Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#13

AW: AnsiStringArray aus DLL an Excel-VBA

  Alt 30. Apr 2019, 00:09
Habe mal Excel 32Bit installiert aber keine Ahnung ob es das ist was du willst..
Ich werde da nicht so recht schlau draus.

Klick auf Button GetIt füllt die Cells in Excel
Klick auf Button CleanUp löscht die Einträge.

Ohne Form und ausgeführt in Excel!

Code:
Option Explicit

'                                              Pfad aktualisieren:
Private Declare Function PAnsiChar_To_Excel Lib "D:\Test\Delphi_String_for_Excel_Test" ( _
    Optional ByVal Delimiter As Byte = 59 _
) As Long

Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" ( _
    ByVal lpString As Long _
) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source As Any, _
    ByVal length As Long _
)

Private Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String

Dim bStr() As Byte
Dim cChars As Long

    On Error Resume Next
        ' Get the number of characters in the buffer
        cChars = lstrlen(lpStr)
        If cChars Then
            ' Resize the byte array
            ReDim bStr(0 To cChars - 1) As Byte
            ' Grab the ANSI buffer
            Call CopyMemory(bStr(0), ByVal lpStr, cChars)
        End If
        ' Now convert to a VB Unicode string
        VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)

End Function

Private Sub CleanUp()

    Range("B1:B4").Delete XlDeleteShiftDirection.xlShiftUp

End Sub

Private Sub GetIt()

Dim flist    As String
Dim LngP     As Long
Dim alist()  As String
Dim Delimiter As Byte
Dim arTesting As Variant

    Delimiter = 124

    LngP = PAnsiChar_To_Excel(Delimiter) ' >>> "|"

    flist = VBStrFromAnsiPtr(LngP)
    alist = Split(flist, "|")

    If flist > "" Then
        arTesting = Application.WorksheetFunction.Transpose(alist)
        Range("B1:B4").Value = arTesting
    End If

End Sub
Wie du das nun schlussendlich regelst über Button oder sonst wie entscheide es selbst..
Aber der Wunsch die Strings in einem Schub nach Excel zu transponieren sollte dem entsprechen.
Delphi > VBA > Excel

Ich hoffe du kommst mit dem Rest selber klar.

gruss

Geändert von EWeiss (11. Jul 2019 um 16:59 Uhr)
  Mit Zitat antworten Zitat