Frage

ich eine Anwendung in VBA haben, dass mein gibt zu VB.Net dll eine zweidimensionale Variante. Es ist ein ein Array, in dem jede Komponente ein weiteres Array mit zwei Positionen ist.

Ich mag dieses Zweistellungs-Array erhalten. Wenn ich VBA verwende kann ich aus jeder Position direkt auf die Daten zugreifen, indem Sie:

dataArray(index, 0) or dataArray(index, 1)

Und wenn ich die Zweistellungs-Array erhalten möchte, kann ich verwenden:

Dim posArray as variant
posArray = dataArray(index)

posArray (0) enthält dataarray (Index 0) und posArray (1) enthält dataarray (Index 1).

Aber wenn ich VB.Net verwende, kann ich direkt auf die Daten zugreifen, genau wie beim ersten Beispiel. Aber wenn ich versuche, eine Dimension von der zweidimensionalen Anordnung zu bekommen, wie ich im zweiten Beispiel tat, es ist nicht möglich.

Dim posArray as Object
posArray = dataArray(index)

Er sagt: „Versucht auf einem Array mit der falschen Anzahl von Dimensionen zu arbeiten.“

Ich habe alles versucht, damit es funktioniert, und ich will nicht von einem der Zuordnung machen, wie:

posArray(0) = dataArray(index, 0)
posArray(1) = dataArray(index, 1)

Vielen Dank für die Hilfe.

War es hilfreich?

Lösung

Sie werden durch Spin benötigen und erzeugen die 1D-Array selbst. Es gibt keine Bibliothek Aufruf in .NET es für Sie tun.

dim arraySlice as string[yourArrayWidth]
for index = 0 to yourArrayWidth
  arraySlice[index] = yourArray[4, index]
next

Das obige Beispiel Zeile 4 aus yourArray greifen würde und kleben Sie es in arraySlice für Sie. Natürlich, werden Sie, dass bis reinigen wollen und steckt es in eine Funktion, die einen rowIndex als Parameter (und eine andere Funktion zum Spalten vertikal, die eine column akzeptiert) akzeptiert.

Es ist wenig Funktionen wie das, dass Sie die Jahre in die eigene Utility-Bibliothek sammeln über werden. 5 Jahre ab jetzt, erhalten Sie eine ArraySlice benötigen und Sie haben bereits eine Funktion, es zu tun.

Andere Tipps

Dim Dim1Len As Integer = 5
Dim Dim2Len As Integer = 2
Dim DimToExtract As Integer = 2
Dim inMultiDArr(5, 2) As Integer
inMultiDArr = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}
Dim outSingleDArr(5) As Integer
outSingleDArr = {0, 0, 0, 0, 0}

Buffer.BlockCopy(inMultiDArr, Marshal.SizeOf(GetType(Integer)) * Dim1Len * (DimToExtract - 1),
                 outSingleDArr, 0, Marshal.SizeOf(GetType(Integer)) * Dim1Len)

Nach dem BlockCopy 'outSingleDArr' enthält {6, 7, 8, 9, 10}. Die oben wurde von dieser Beitrag .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top