Как использовать указатель массива в VBA - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь извлечь данные из старого файла 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...