Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Пара вопросов по VBA.  (Прочитано 6888 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LuZer
Гость
« : 04-08-2004 00:13 » 

Дластуйте всем  Улыбаюсь . Ссори если не туда пишу.  :oops:

Для собственных нужд пришлось заняться программированием на VBA. Изучаю его недолго, что-то около месяца (и это мой первый серьезно изучаемый язык  Ага ). Возникающие вопросы стараюсь решать самостоятельно, но вот на следующие, пока два, вопроса ответа не нашел:
(программирую для Excel-я, VBA 6)

1) Как запрограммировать кнопку "Cancel" стандартного диалогового окна "InputBox" на выход из процедуры? Или это решается только через проверку введеного значения?
 (Не хотелось бы громоздить свою форму для простенькой процедуры, да и просто так, любопытства ради. Как я понял, по умолчанию, щелчок на этой кнопке закрывает окно и выполняет операцию следующую за вызовом этого "диалога"   :?:  )

2) Есть ли какая-нибудь стандартная функция для преобразования hex-числа в десятичное (типа, как hex() для обратного)?
(Есть функция val(), но она, к сожалению, некорректно работает с числами в диапазоне 8000 (дес. - 32768) - FFFF (дес. - 65535): возвращает отрицательное значение. Кстати, если у кого VBA 7 (Office XP), "не в службу, а в дружбу", не проверите, исправлен ли этот баг? Вот код для этого:

Sub temp()
Dim a
Dim b
' вводим шестнадцатиричное число из вышеуказанного диапазона (8000 - FFFF)
a = InputBox("Введите hex-число :")
' сообщаем функции val(), что введенная строка это - шестнадцатиричное число
b = "&H" & a
a = Val(b)
Debug.Print a
End Sub

А то не хочется, ради проверки такого пустяка новый "офис" ставить  Ага )

Вот собстно пока и все.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 04-08-2004 05:14 » 

попробуй определить переменные как

    Dim a As Integer, b As Integer
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #2 : 04-08-2004 05:38 » new

LuZer,
1) для InputBox - скорее всего придется проверять введенное значение (при нажатии на Cancel возвращает пустую строку)
2) по поводу Val в ХР тоже самое, для преобразования в число используй стандартные функции конвертации CDec, CInt и т.д
пример

Код:
Sub temp()
Dim a As String
Dim b As String
' вводим шестнадцатиричное число из вышеуказанного диапазона (8000 - FFFF)
a = InputBox("Введите hex-число :")
' сообщаем функции val(), что введенная строка это - шестнадцатиричное число
b = "&H" & a
Debug.Print CDec(b)
End Sub

при b=&Hffff возвращает 65535
при b=&Hfffff возвращает 1048575
« Последнее редактирование: 30-11-2007 21:47 от Алексей1153++ » Записан

I Have Nine Lives You Have One Only
THINK!
LuZer
Гость
« Ответ #3 : 04-08-2004 10:36 » 

HandKot
Большой пасиб   Пиво! .

Алексей1153
А переменные все-таки строковые  :oops: . Я не стал определять их тип в приведенном листинге для економии места в форуме  8) ("Меньше слов - дешевле телеграмма"  Ага) . Но то же пасиб, что откликнулся. Пиво!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines