Dim app As OpiumLib.Application 'Описание указателя на приложение
Dim opium As OpiumLib.Document 'Описание указателя
на активный документ
Sub OpiumTest()
On Error Resume Next 'Подавляем системные сообщения об ошибках
'вместо них будем использовать свои
Set app = New OpiumLib.Application 'Получаем указатель на приложение
Set opium = app.ActiveDocument ' Получаем указатель на активный документ
If opium Is Nothing Then 'Если указатель пуст
MsgBox "Не удалось получить указатель на активный
документ О!Пиум" _
& vbCr & "Убедитесь, что программа запущена и
открыт хотя бы один документ"
Else 'Если все в порядке
Dim crvData As Variant 'Объявление переменной для данных
Dim crvResult() As Single 'Вещественный массив неизвестной длины
и
'размерности.
Используйте только тип Single!
Dim NumPoints As Long 'Переменная для количества точек
NumPoints = 500 - 251 + 1 'Для простоты примера
ReDim crvResult(1 To NumPoints, 1 To 2) ' Теперь длина и размерность есть.
crvData = opium.CRVGet("GZ4") 'Получение данных для кривой
If VarType(crvData) = vbEmpty Then 'Диагностика
MsgBox "Ошибка получения данных для GZ4"
Else 'Если все нормально
Dim emptyVal As Double 'Признак отсутствия информации
emptyVal = opium.Empty 'Получаем из О!Пиум
For i = 1 To UBound(crvData) 'Цикл по всем точкам
crvResult(i, 1) = crvData(i, 1) 'Копируем глубину
If crvData(i, 2) <> emptyVal Then 'Если есть что делить
crvResult(i, 2) = crvData(i, 2) / 2 'Делим пополам
Else ' Если исходное значение пусто то и
результат
crvResult(i, 2) = emptyVal 'равен пустоте
End If
Next i
Dim vVar As Variant 'Описываем временную переменную для трюка
vVar = crvResult ' А вот и сам трюк. Ведь CRVPut требует VARIANT на вход
opium.CRVPut "GZ4/2", vVar 'Сохраняем с именем "GZ4/2"
MsgBox "Используйте контекстное меню поля
вывода:" _
& vbCr & " 'Вставить/Кривую в линейном
масштабе...' " _
& vbCr & "для
просмотра вычисленной кривой 'GZ4/2'"
End If
End If
opium = Nothing 'Освобождаем указатели после использования
app = Nothing
End Sub