Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 След.
RSS
Интересные вопросы по VBA
 
MsgBox 111& * 1000&  
Вот так ее не будет :)
Спасибо
 
Excel приводит число к типу данных integer, соответственно и результат он ожидает integer, так как результат не вписывается в integer происходит ошибка.  
Если одно из чисел будет выходить за рамки integer, например long то и результат будет ожидать long
Спасибо
 
строчки    
 
Rows.Hidden = True  
Rows(2).Hidden = False  
 
убивают иксель (2003)  
 
у всех так?
Живи и дай жить..
 
У меня нормально отработало. Раз 10 запустил - Ок.
Я сам - дурнее всякого примера! ...
 
excel не убило, но видимость не востанавливает , вываливается с ошибкой, нельзя применить данный метод к объекту  range
Спасибо
 
и не закрывает иксель
Живи и дай жить..
 
{quote}{login=слэн}{date=04.02.2012 11:02}{thema=}{post}как активировать лист после вызова немодальной формы, чтобы сразу можно было вбивать данные в ячейку, не тыкая в нее мышой?{/post}{/quote}  
 
Возможно уже нашли ответ на данный вопрос, но все равно предложу свое видение решения. см файл
Редко но метко ...
 
да, тогда уже подсказали про appactivate
Живи и дай жить..
 
а насчет пред задачи - rows(1).hidden=false нормально срабатывает
Живи и дай жить..
 
Так у меня крутой Эксель:-) Работает без проблем.
Я сам - дурнее всякого примера! ...
 
лицензионный? :)
Живи и дай жить..
 
Какой там! :-) PreSP4, со встроенным конвертором. Тс-с-с...  
 
75755
Я сам - дурнее всякого примера! ...
 
Sub tt()  
Rows.Hidden = True  
Rows(2).Hidden = False  
End Sub  
 
отрабатывает нормально, и ряд восстанавливает.  
Просто нужно чуть вверх лист промотать, чтоб увидеть :)  
XL2003.
 
У меня на строке Rows(2).Hidden = False вываливается ошибка. А после Excel не закрывается : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
У меня всё ок, через Ф8 не выдает никаких ошибок и работает идеально (Excel2007)
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Обнаружил странное для меня преобразование текста в число на ВБА:  
Вот пример продцедуры:  
Sub Test()  
   Const s As String = "1,537"  
   Debug.Print IsNumeric(s) & " - IsNumeric"  
   Debug.Print Val(s) & " - Val"  
   Debug.Print (1.537 = s) & " - 1.537 = s"  
   Debug.Print s * 6 & " - s * 6"  
End Sub  
 
Вот результаты выполнения:  
True - IsNumeric  
1 - Val  
True - 1.537 = s  
9.222 - s * 6  
 
Возникают вопросы:  
- функция IsNumeric(s) проверяет текстовую константу s и преобразуя ее в число дает ИСТИНУ тут кое как понятно  
- далее функция Val пытается преобразовать s в число, спотыкается на запятой (так как у меня сепаратор точка), и выдает 1, что тоже понятно  
- а вот при сравнении числа и текстовой константы 1.537 = s, получается ИСТИНА, что вызывает вопрос, каким все таки макаром строка так преобразовалась что из "1,537" получилось 1.537 при том что Val дает 1 ???  
- опять же при умножении числа на текстовую константу  "1,537"*6 дает математически правильный результат 9.222, хотя по идее должно давать 6 (Так как опять же Val("1,537")дает 1  
 
Основной вопрос как ВБА преобразовывает текстовую константу содержащую запятую, и меняет ее на точку в моем случае ??
Редко но метко ...
 
оно считает число главнее и преобразовывает строку в число, а уже числа сравнивает
Живи и дай жить..
 
Вот именно преобразовывает, а как оно это делает?  
Я имею ввиду, как ВБА понимает что запятая в текстовой константе является разделителем разрядов, если стандартный разделитель точка ?
Редко но метко ...
 
так локаль у вас какая?
Живи и дай жить..
 
рус
Редко но метко ...
 
{quote}{login=GIG_ant}{date=16.03.2012 01:24}{thema=}{post}Основной вопрос как ВБА преобразовывает текстовую константу содержащую запятую, и меняет ее на точку в моем случае ??{/post}{/quote}  
Ну, допустим, запускается какой-нибудь CDbl()  
 
Из справки: Функция Val распознает в качестве разделителя целой и дробной части только точку (.)  
 
>Я имею ввиду, как ВБА понимает что запятая в текстовой константе является разделителем разрядов, если стандартный разделитель точка?  
Какой то странный вопрос. Проверяется все это дело посимвольно, вероятно слева на право. Если символ - цифра, проверяется следующий; если запятая, следующий за ним. Если он оказывается цифрой и после него нет нецифровых символов вплоть до конца строки, то это число.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Спрошу по другому:  
При вот такой записи:  
"1)537"*9 вылетает ошибка  
а при такой:  
"1,537"*9 считает  
хотя разделитель дробной и целой части у меня ТОЧКА.  
Так вот я и не пойму как ВБА запятую понимает, а например скобку (или другой символ) не воспринимает, ведь по логике NERV-а должно бы разделить ).    
 
-= 93339 =- Ух ты, подфартило.
Редко но метко ...
 
ну люди ж разные писали...  
 
вот с val нам националист попался, а с неявными преобразованиями локаль учитывает
Живи и дай жить..
 
{quote}{login=GIG_ant}{date=16.03.2012 02:27}{thema=}{post}ведь по логике NERV-а должно бы разделить ){/post}{/quote}  
 
По логике nerv есть общепринятые разделители целой о дробной части числа, к коим скобка отношения не имеет.  
 
Можно еще спросить, почему с точкой в строке математика не считает:  
MsgBox "1,25" + 3  
MsgBox "1.25" + 3  
только имеет ли это смысл? Ведь как сказал слэн "люди ж разные писали".
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
у меня считает и с точкой и запятой.
Редко но метко ...
 
проэспериментировал:  
в панели управления Windows, языки и стандарты поставл разделитель ")"  
теперь выражение  
Debug.Print "1)234"*2  
дает резцльтат  
2)468    
 
Так что и скобка может быть разделителем :)
 
Для дат я определяю с помощью этой функции нужные форматы, так как с разделителями нарывался не один раз в VBA/  
 
Function FormatDateUser(Optional TipeFormat As Long = 0)  
Const SReg = "HKEY_CURRENT_USER\Control Panel\International\"  
Dim FormatDate$, SepDate$, FormatTime$, SepTime$, aSepUs()  
FormatDate = CreateObject("WScript.Shell").RegRead(SReg & "sShortDate")  
SepDate = CreateObject("WScript.Shell").RegRead(SReg & "sDate")  
FormatTime = CreateObject("WScript.Shell").RegRead(SReg & "STimeFormat")  
SepTime = CreateObject("WScript.Shell").RegRead(SReg & "STime")  
aSepUs = Array(".", "\", "/", "-", ":")  
For i = 0 To UBound(aSepUs)  
FormatDate = Replace(FormatDate, aSepUs(i), SepDate)  
FormatTime = Replace(FormatTime, aSepUs(i), SepTime)  
Next  
Select Case TipeFormat  
Case 0: FormatDateUser = FormatDate & " " & FormatTime  
Case 1: FormatDateUser = FormatDate  
Case 2: FormatDateUser = FormatTime  
End Select  
End Function  
===============================  
Там же можно считывать и разделитель целой и дробной части sDecimal  
 
SepDecimal = CreateObject("WScript.Shell").RegRead(SReg & "sDecimal")  
 
и уже исходя из результат оперировать данными в VBA
Спасибо
 
спасибо R Dmitry, в заначку ))
Редко но метко ...
 
R Dmitry, а с регулярными выражениями не проще?)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Nerv, а для чего они там?  
У меня задача была определить системный формат дат для VBA
Спасибо
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 След.
Наверх