Страницы: Пред. 1 2 3 4
RSS
Знаете ли Вы, что..., Пара трюков в VBA :)
 
Понял) Подождём - может кто в теме и поделится с нами информацией.
 
Сходите по ссылке в посте 86, может быть Вы больше меня поймёте...
 
Как я понял, эта фишка из Аксесса, "!" замечал в составлении запросов
Но, в каких целях (уменьшение кода? быстродействие кода?) применять это в ВБА, а именно в Экселе - пока идей нет
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Цитата
LightZ пишет:
быстродействие кода?)
в интерпретируемой-то среде?  :)  
насколько я понимаю - просто еще один способ записи.
как range("a1")   и [a1]
Изменено: ikki - 10.03.2013 23:11:29
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Кто знает английский, то про bang (!) можно прочитать в Chapter 7 "Using VBA In Access" книги "Access 2010 Programmer's Reference".
Вот небольшая выдержка оттуда:
Цитата

There has long been confusion in the VBA world about when to use a ! (bang) and when to use a
. (dot). There are more technical ways to describe it, but for the average VBA programmer there’s a
quick rule that works most of the time: If you (or any programmer) named it, you can use a bang. If
Access named it, you use a dot.
(Now, before all the VBA experts reading this get upset, please realize
that it’s only a general guideline. However, it does help.)
There is no knowledge that is not power
 
Цитата
EducatedFool пишет:
Цитата
Johny пишет:
И ещё:
Код
  VBE.ActiveVBProject.VBComponents("clsMyClass").Properties("Instancing") = 5 'Multi-Use  

Эх, как же долго я искал вариант с использованием модулей класса одного файла в другом...
Где ж вы раньше были)))
Да вот и правда, где? А точнее сказать где был этот ответ, когда я долго его искал. Наверное все же плохо искал )) В начале, когда весь проект свелся к общей книге и множеству других ведомых ею книг, была написала процедура, которая экспортирует формы, модули и классы из главной книги в каталог и импортирует их в каждую книгу. Работало, даже было весьма неплохо доделано. Потом я узнал о References. О чудо, это работает. Очень удобно. Но с классами не прокатило как не выеживался. Класс как и раньше я таскал из общей книги в каждую где он нужен. Вдоль и поперек изъел publicnotcreatable, но безуспешно. А тут вон как. Свойство есть, но мышкой не задашь.
Сейчас такое чувство, что все это время заходил в этот дом через окно...
Ну и как обычно, искал сейчас совсем другое. А нашел эту ветку. Спасибо Johny!!! Огромное человеческое спасибо.
 
Цитата
Сергей Казаков пишет:
Сейчас такое чувство, что все это время заходил в этот дом через окно...
Ну и как обычно, искал сейчас совсем другое. А нашел эту ветку. Спасибо Johny !!! Огромное человеческое спасибо.
Очень рад, что помог!  :)
Про эту возможность узнал из книги по Access, да и та на английском языке. К сожалению, таких скрытых возможностей много, но, как правило, они плохо документированы. Кстати, у меня была мысль выложить сюда процедуры касательно CommandBars. У меня есть процедуры, которые покажут ВСЕ уровни ВСЕХ CommandBar'ов, а также ВСЕ FaceId (рисунки слева) Всех кнопок. Если будет интересно, выложу. :)
Если хотите добавить кнопки в контекстное меню, то это не совсем тривиальное дело, как оказалось. Например, когда мы нажимаем на ячейке правую кнопку мыши, появляется CommandBar, где мы видим известное "Вырезать", "Копировать" и так далее. Но! В зависимости от режима просмотра книги ("Обычный" или "Разметка страницы") - это два разных CommandBar'а! Далее - самое интересное. Названия и того и другого CommandBar'a - Cell. Так вот различить их можно только по свойству Index. Но самое интересное (как показала практика), что цифры, которые возвращает Index, будут разными от версии к версии (и даже в зависимоти от обновлений в одоном и том же издании), поэтому пришлось писать процедуру для получения Index'ов на лету. В общем, если заинтересуют CommandBar'ы, обязательно напишу! :)
There is no knowledge that is not power
 
Я давно уже использую в своем проекте панель CommandBars. Вешаю ее где находятся стандартные панели, а их прячу. Но с CommandBar при правом клике по ячейке не работал. Вообще конечно интересно. Пока вроде как никуда не надо, но интересно. Еще один инструмент в копилке знаний никогда не будет лишним. Мало ли где понадобится. Обычно всегда так. Только когда хорошо изучишь что то новое, видишь где это можно использовать.
Сегодня второй день работы с общим классом из главной книги. Пока все отлично. Скорость не упала . Вообще не вижу разницы. Багов нет. Все отлично! Теперь, так же как с функциями и процедурами, могу править этот класс и сразу смотреть на результаты.
 
Инфо по CommandBar'ам. Код - под спойлером. :)
Скрытый текст
Изменено: Johny - 24.02.2014 15:15:36
There is no knowledge that is not power
 
Johny, большое спасибо за ответ (не знал, что immediate можно использовать для выполнения команд).
Но у меня все равно не получается изменить это свойство: в приложенном файле создан класс "Operation",в окне immediate вставляю строку "VBE.ActiveVBProject.VBComponents("Operation").Properties("Instancing") = 5", нажимаю "Enter" , получаю ошибку Object required. Подскажите, пожалуйста, что делаю не правильно? Office 2013
 
Код
Application.VBE.ActiveVBProject.VBComponents("Operation").Properties("Instancing") = 5
 
There is no knowledge that is not power
 
Может, кому будет полезным (я только сегодня об этом узнал)

1) в макросах можно использовать объекты из .NET Framework
Примеры:
http://excelvba.ru/code/.Net
http://excelvba.ru/code/MD5

2) можно отслеживать перемещение мыша над ячейками листа, без использования таймера.
Делается при помощи хитрого использования формулы =ГИПЕРССЫЛКА()
отличный пример, - периодическая система элементов Менделеева,
в которой реализован данный функционал (в статье есть пример файла Excel)
http://optionexplicitvba.blogspot.ru/2012/06/period-table-of-elements-in-excel.html
Изменено: Игорь - 14.03.2014 02:19:08
 
Этот
Код
System.Collections.ArrayList
мы тут уже давно использовали. Там есть приятная "фишка" - встроенная сортировка.
Но работает это дело ужасно тормознуто, поэтому я уже и не помню когда использовал...
А файл с этим кодом рождён 2 года назад.

Код
Function Unique(DRange As Variant) As Variant

    Dim Dict As Object
    Dim i As Long, j As Long, NumRows As Long, NumCols As Long


    If TypeName(DRange) = "Range" Then DRange = DRange.Value2
    NumRows = UBound(DRange)
    NumCols = UBound(DRange, 2)

    Set Dict = CreateObject("System.Collections.ArrayList")
    For i = 1 To NumCols
        For j = 1 To NumRows
            If Len(DRange(j, i)) Then
                If Not Dict.Contains(DRange(j, i)) Then Dict.Add DRange(j, i)
            End If
        Next j
    Next i

    Dict.Sort
    Unique = Application.Transpose(Dict.toarray)

End Function
 
 
Игорь, можно и побыстрее. В .Net есть аналог Dictionary - HashTable. Тогда будет так
Код
Function Unique(DRange As Variant) As Variant
    Dim Dict As Object, Result As Object
    Dim i As Long, j As Long, NumRows As Long, NumCols As Long


    If TypeName(DRange) = "Range" Then DRange = DRange.Value2
    NumRows = UBound(DRange)
    NumCols = UBound(DRange, 2)

    Set Dict = CreateObject("System.Collections.HashTable")
    For i = 1 To NumCols
        For j = 1 To NumRows
            If Len(DRange(j, i)) Then
                Dict(DRange(j, i)) = DRange(j, i)
            End If
        Next j
    Next i
    Set Result = CreateObject("System.Collections.ArrayList")
    Result.AddRange Dict.Keys
    Result.Sort
    Unique = Application.WorksheetFunction.Transpose(Result.ToArray)
End Function
 
Статические классы
There is no knowledge that is not power
 
Цитата
anvg написал:
Игорь, можно и побыстрее. В .Net есть аналог Dictionary - HashTable.
Андрей, HashTable всё-таки проигрывает Dictionary. Источник - "C# 5.0 in a Nutshell", таблица на странице 300.
There is no knowledge that is not power
 
                                                                                                                                                         "Есть, есть такой человек!
                                                                                                                                                        Никакого волшебства не знаю,
                                                                                                                                                       в детстве даже сказок не читал"
                                                                                                                                                       "Чародеи"
Цитата
ZVI написал:
VBA легко осваивают и широко используют непрограммисты
Спасибо от конструктора

Цитата
Johny написал:
А могут ли эти "непрограммисты" на VBA сделать exe-файл?
В современных условиях мы, как правило, работаем в контролируемой ограниченной терминальной среде. Если попробовать "затащить" туда exe файл, уже может возникнуть много вопросов. И кончиться эта история может потерей рабочего места. Даже xla  для облегчения не всегда удается запустить - только swb и xlsm.
Вопрос привычки - изучаю VB .Net, поскольку возможностей больше и в закрытом windowsе код ведет себя стабильнее. Но в VBA получается писать так, как думаешь - WYSIWYG
Изменено: LeKon - 19.12.2019 10:43:09
 
Цитата
Skif-F написал:
VBA - язык MSOffice'а
А еще - Corela, SolidWorksa, еще несколько CADов, которых я практически не касался. Практически все дизайнеры, конструкторы, схемотехники дописывали свой интерфейс
Страницы: Пред. 1 2 3 4
Читают тему
Наверх