Я пытаюсь извлечь данные из старого файла Lotus 123, используя Lotus.Range.GetCellData Возвращает значение long
, которое является указателем на массив указателей, по одному для каждой ячейки в диапазон.
Dim LotusApp As Lotus123.Application
Dim LDoc As Lotus123.Document
Set LDoc = GetObject("C:\temp\Test.wk3", "Lotus123.Workbook")
Set LotusApp = LDoc.Application
LotusApp.Visible = True
LDoc.Activate
Dim r As Lotus123.Range
Set r = LDoc.Ranges("A:A1..A:D4")
Dim ArrayPointer As Long
ArrayPointer = r.GetCellData
... do something
r.FreeCellData
Что мне действительно нужно, так это обычный массив в VBA, такой как Dim arr() as String
. Итак, как мне перейти от массива указателей к фактическому массиву со значениями в VBA?
Вот код на C ++ из примера:
DllExport long TransposeDoub(unsigned long ptr, unsigned long rows, unsigned long cols)
{
PCellDataHdr hdr = (PCellDataHdr) ptr;
double *buf = (double *) &hdr[1];
unsigned int i, j;
int count = 0;
// Validate arguments and table.
if (rows <= 2 ||
!hdr->IsDouble ||
rows > hdr->rows ||
cols > hdr->cols) {
return 0;
}
for (i = 0; i < cols; i++) {
double tmp, *pCol;
pCol = &buf[i * hdr->rows]; // Calc column pointer.
// Swap column rows.
for (j = 0; j < rows/2; j++) {
tmp = pCol[rows - j - 1];
pCol[rows - j - 1] = pCol[j];
pCol[j] = tmp;
count++;
}
}
return count;
}
Так как мне преобразовать это в VBA?