Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2012, 00:55   #1
norvik
 
Регистрация: 14.08.2011
Сообщений: 5
Вопрос ошибка в макросе с вызовом функций длл

Здравствуйте, не работает простой код, подскажите пожалуйста где ошибка?
Модуль

Код:
Public Declare Function GVGetFloat Lib "C:\WINDOWS\system32\MyGV.dll" (ByVal iLocation As Integer) As Single
Public Declare Function GVGetInteger Lib "C:\WINDOWS\system32\MyGV.dll" (ByVal iLocation As Integer) As Integer
-----------------------------------------------------------------------------------------------------------------------------------------------
Sub DataRun()
UserForm1.Show
End Sub




Форма

'код для кнопки ЗАГРУЗИТЬ ТЕКУЩИЕ ДАННЫЕ;
Private Sub CommandButton1_Click()
Dim DataValue As Single
Dim MyIndex As Integer
Dim EndIndex As Integer
Dim iLocation As Integer
iLocation = 0
Range("Data").Select
MyIndex = 0
EndIndex = GVGetInteger(iLocation)
Do While MyIndex < EndIndex
ActiveCell.Offset(1, 0).Select
DataValue = GVGetFloat(MyIndex)
ActiveCell.Value = DataValue
MyIndex = MyIndex + 1
Loop
Range("B1").Select
ActiveCell.Value = EndIndex
End Sub
'--------------------------
Private Sub CommandButton2_Click()
Unload Me
End Sub
'--------------------------
Макрос должен записать в первый столбец определенное число элементов массива float из глобальной переменной MyGV.dll. Число элементов считывается из первого элемента массива int. Ексель 2003, длл собирал в VC6++, между другими программами данными обмениваюсь нормально, в екселе возвращает все время код ошибки -1(out of range) В чем может быть проблема? Спасибо.
norvik вне форума Ответить с цитированием
Старый 22.07.2012, 02:16   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

В VBA Integer отводится 2 байта значение от -32767 до 32767
В С++ Размер типа int не определяется стандартом, а зависит от компьютера и компилятора.
Возможно здесь и причина.
Вам надо объявлять тип переменной как Long
4 байта значение От -2 147 483 648 до 2 147 483 647
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 22.07.2012, 02:33   #3
norvik
 
Регистрация: 14.08.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
В VBA Integer отводится 2 байта значение от -32767 до 32767
В С++ Размер типа int не определяется стандартом, а зависит от компьютера и компилятора.
Возможно здесь и причина.
Вам надо объявлять тип переменной как Long
4 байта значение От -2 147 483 648 до 2 147 483 647
Спасибо огромное, все заработало.
norvik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ВПР в макросе (где-то ошибка) Флина Microsoft Office Excel 3 26.01.2011 04:55
Ошибка в макросе по переносу данных Richard123 Microsoft Office Excel 2 19.01.2011 09:16
Почему, ошибка в макросе valerij Microsoft Office Excel 8 27.02.2010 01:48
Ошибка в длл Яр|/||< (^_^) Общие вопросы Delphi 2 16.10.2009 15:58
импорт функций из длл user_jasser Win Api 7 31.03.2009 08:25