Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 3)

Автор: Maximus777
Дата сообщения: 03.08.2012 15:04
grbdv
Цитата:
http://rghost.net/private/39549317/264aa8595818cef5d9d42c087b1b5c09

Можно и проще сделать. Вот сильно оптимизированный вариант - ссылка. Чтобы увеличить на единицу, выделяем диапазон и Ctrl+Shift+U
Чтобы уменьшить на единицу, выделяем диапазон и Ctrl+Shift+D
Если хоткеи не пробиваются в файле, а пишутся в систему, тогда надо задать самостоятельно комбинации.
Автор: grbdv
Дата сообщения: 03.08.2012 15:13
Maximus777
Совершенно верно. Только ведь форма нужна и для дополнительного осмысливания того, что делаешь. А эти клавиатурные... многие их ведь просто недолюбливают, причин этому - множество.

И, потом, у меня ведь заложена возможность (в коде нет) ввести нужное число в поле и прирастить именно на эту величину.

syd
Снкс.
Но про камни не забудь. Например - пустые ячейки тоже будут изменяться. Надо ставить проверку. Проверку на корректность - тоже нужно.

И, помни - откатов в VBA нет :( Если изменил и не уверен - лучше не сохраняться и закрыть файл. А автосохранение может быть включено ;) Т.е. нужны резервные копии.

Добавлено:

Цитата:
у меня ведь заложена возможность (в коде нет) ввести нужное число в поле и прирастить именно на эту величину.

Надо добавить модуль формы вот этой процедурой:

Код:
Private Sub tbxValue_AfterUpdate()
Call sb_SetTbx
End Sub
Автор: syd
Дата сообщения: 03.08.2012 15:32
grbdv

Да, про обратный откат я уже заметил. )) Я все же какой ни какой айтишник)))

Еще раз всем спасибо. особенно grbdv
Автор: Maximus777
Дата сообщения: 03.08.2012 15:45
Mishel917
Вот Вам обещанный пример работы с ListView от Xtreme. Плюс в коде пример работы с API системы.
Автор: Mishel917
Дата сообщения: 03.08.2012 23:22
Maximus777

Из файла ListView_MulniPage скопировал элемент управления ListView. Это Xtreme ListView ? Вставил для пробы на форму. Смещения скопированного ListView на переходах из вкладки на вкладку MultiPage такиеже, может даже смещается чаще.
Автор: Maximus777
Дата сообщения: 03.08.2012 23:30
Mishel917
Цитата:
Из файла ListView_MulniPage скопировал элемент управления ListView. Это Xtreme ListView ?

Нет. Xtreme красивый. Ссылка выше именно с ним. Только там без MultiPage. Надо попробовать, у Xtreme есть и такой контрол.
Автор: Mishel917
Дата сообщения: 03.08.2012 23:48
Maximus777

Спасибо за пример. Пока что он у меня не открывается. Библиотека не зарегистрирована. Разбераюсь - как регистрировать.
Есть вопрос - как Xtreme ListView с проектом переносить на другой компьютер. На другом компьютере тоже необходимо библиотеку регистрировать или можно её носить вместе в одной папке?
Автор: Maximus777
Дата сообщения: 04.08.2012 00:30
Mishel917
Цитата:
Разбераюсь - как регистрировать.

Батник там в помощь.


Цитата:
На другом компьютере тоже необходимо библиотеку регистрировать

Да.
Автор: Mishel917
Дата сообщения: 04.08.2012 11:36
Maximus777

Добрый день!

Прочитал в Блокноте файл Codejock.Controls.v12.01 – пример регистрации библиотеки. С помощью этого примера можно регистрировать *.ocx.

Ещё один вопрос по теме регистрации библиотеки. Представленная регистрация есть общая, т. е. после регистрации *.ocx. на неё можно будет делать ссылку из нескольких программ. А можно сделать надстройку в Excel, которая обеспечивала бы подключение *.ocx и выход на Xtreme ListView (отдельный Toolbox) только для Excel?
Автор: Maximus777
Дата сообщения: 04.08.2012 13:27
Mishel917
Цитата:
А можно сделать надстройку в Excel, которая обеспечивала бы подключение *.ocx и выход на Xtreme ListView (отдельный Toolbox) только для Excel?

Боюсь, что мой уровень не позволяет ответить на такой вопрос. Но в чём проблема? Пусть пользуется, кто хочет.
Автор: grbdv
Дата сообщения: 04.08.2012 13:48
Mishel917

Цитата:
А можно сделать надстройку в Excel, которая обеспечивала бы подключение *.ocx и выход на Xtreme ListView (отдельный Toolbox) только для Excel?

Зачем это все?

Боюсь, что только для Ексель - нет. Ведь любая библиотека, независимо от того, как она регистрируется (пусть она и регистрируется чисто через Ексель хоть рукми, хоть программно), все равно пишется в реестр, как класс и становится доступна любому приложению в системе.

А, вообще, для программного управления библиотеками нужно подключить следующую библиотеку :)
Microsoft Visual Basic for Applications Extensibility
Автор: Maximus777
Дата сообщения: 04.08.2012 14:03
grbdv
Цитата:
А, вообще, для программного управления библиотеками нужно подключить следующую библиотеку
Microsoft Visual Basic for Applications Extensibility

Разве, что при запуске подключать, а при выходе отключать. Но присоединяюсь к вопросу:


Цитата:
Зачем это все?

Автор: grbdv
Дата сообщения: 04.08.2012 14:19
Maximus777

Цитата:
при запуске подключать, а при выходе отключать

В этой схеме тоже какие-то траблы, кто-то на что-то ругаться будет. Я тихо помню, давно что-то подобное городил... Код не скомпилируется. И одно дело - подключать-отключать ужЕ зареганную б-ку, другое дело - регить-разрегить. Вобщем - лучше не соваться в этот огород.

Если отвлечься от этих непонятных хотелок, то самое надежное - книгу передавать в комплекте с библиотекой и батником для реги-разреги.
Автор: Maximus777
Дата сообщения: 04.08.2012 15:11
grbdv
Цитата:
Вобщем - лучше не соваться в этот огород.

Согласен. Тем более без достаточного уровня знаний.
Автор: Mishel917
Дата сообщения: 04.08.2012 15:36
Всем спасибо за содержательные ответы.

Ещё немного продолжу тему таким вопросом (Maximus777 в определённой степени уже дал ответ)
Допустим, выбран вариант переделать книгу в комплекте с библиотекой и батником для регистрации и снятия регистрации библиотеки. Регистрация относительно простая операция – одна запись в реестр и библиотека зарегистрирована. Снять регистрацию очевидно задача сложнее, - необходимо будет редактировать не одну запись в реестре (удалять ключи). В этом надёжно разобраться можно и сохранить работоспособный реестр?
Автор: grbdv
Дата сообщения: 04.08.2012 15:51
Mishel917
Рег/анрег - это не "одна запись в реестр" и не "редактировать не одну запись в реестре (удалять ключи)". Для пользователя это две почти одинаковых строки 'regsvr32 library.ocx' и 'regsvr32 /u library.ocx'. Есть хелп 'regsvr32 /?'

Но, здесь это оффтоп. Тем более в контексте "В этом надёжно разобраться можно и сохранить работоспособный реестр"


Добавлено:
Да, забыл написать, что команда regsvr32 как сама добавит множественное число записей в реестр, так сама и удалит. Поэкспериментируй со своей библиотекой, посравнивай реестр, не бойся - она корректно и ставится и удаляется. Короче - не заморачивайся :)
Автор: NJCorp
Дата сообщения: 05.08.2012 11:45
Можно ли в теле макроса вписать "Описание".
Имею в виду не коментиы, а описание которое видно при откритии окна "Макрос"

P.S. Кнопку "Параметры" не предлогать...
Автор: Maximus777
Дата сообщения: 05.08.2012 15:25

Код: Sub Макрос1()
'
' Макрос1 Макрос
' Трали-вали тили-тили
'

'
Range("C11:C17").Select
Selection.Font.Bold = True
End Sub
Автор: NJCorp
Дата сообщения: 05.08.2012 16:21
Попробуйте изменить ' Трали-вали тили-тили на ' Нифига не Трали-вали тили-тили
И Вы увидите что совсем не етото текст отображается в описании.

Если создавать макрос и вписать текст в описание то тот же текст закомментируется в коде, но не на оборот
Автор: Maximus777
Дата сообщения: 05.08.2012 17:01
NJCorp
Вы не поверите. Нажал "Начать запись", залез в нелюбимую Вами кнопку "Параметры" и получил код:

Код: Sub Макрос2()
'
' Макрос2 Макрос
' Макрос записан 05.08.2012 (Admin)
'

'
Application.MacroOptions Macro:="Макрос1", Description:="нифига не трали-вали" _
, ShortcutKey:=""
End Sub
Автор: Mishel917
Дата сообщения: 05.08.2012 23:00
Maximus777

Добрый день!

Сделал попытку зарегистрировать модуль Codejock.Controls.v12.0.1.ocx пакетным файлом Windows из той же папки Controls – ошибка – 0х80040200 – модуль Codejock.Controls.v12.0.1.ocx загружен но не удалось выполнить вызов DllRegisterServer (компьютер перегружал). Чезез Пуск -> Выполнить -> Обзор -> Reg -> Ок – ошибка таже.
В папку System32 пока Codejock.Controls.v12.0.1.ocx не копировал. На компьютере ОС- Windows Vista. Что не так?
Автор: Maximus777
Дата сообщения: 06.08.2012 08:55
Mishel917
вот с Вистой я Вам ничем не помогу, нет у меня ни одного компа в пределах досягаемости с этой системой. А так, навскидку, думаю не хватает прав, хотя вполне может оказаться, что проблема в русских символах в пути, по которому лежит батник. Попробуйте вручную, скопируйте Codejock.Controls.v12.0.1.ocx и Codejock.Controls.v12.0.1.lic в System32 и сделайте Пуск -> Выполнить -> regsvr32 Codejock.Controls.v12.0.1.ocx
Автор: Mishel917
Дата сообщения: 06.08.2012 09:37
В пути русских символов нет - D:/Program Files/Controls/... - за пределами папки Windows, которая на C. Придётся копировать в System32, если с правами не разберусь.

Добавлено:
Maximus777

Начну с регистрации модуля Codejock.Controls.v12.0.1.ocx на копмьютере без прав. Один вопрос - если зарегистрирую модуль, то елементы Xtreme в список Available Control попадают автоматически или ещё что-то надо крутить? После регистрации модуля,в References проекта надо что-то помечать галочкой?
Автор: Maximus777
Дата сообщения: 06.08.2012 10:18
Mishel917

Цитата:
После регистрации модуля,в References проекта надо что-то помечать галочкой?



А в палитру инструментов необходжимые Вам контролы уже вручную надо добавлять.


Цитата:
В пути русских символов нет - D:/Program Files/Controls/...

Пробелы тоже являются злом в некоторых случаях.
Автор: Mishel917
Дата сообщения: 06.08.2012 11:40
Всем доброго времени суток!

На первой вкладке MultiPage размещён Calendar на второй вкладке список (ListBox или ListView). При Click на Calendar макрос записывает на Лист дату, после чего открывает вторую вкладку.

Me.MultiPage1.Value = 1

На второй вкладке у списка тоже есть событие Click. Бывает так, что Click на первой вкладке вызывает подряд запуск макроса на первой вкладке и на второй вкладке.

Вопрос, - каким способом можно блокировать срабатывание макроса на второй вкладке, при Click на первой вкладке MultiPage?
Автор: Maximus777
Дата сообщения: 06.08.2012 11:55
Mishel917
а нельзя ли выложить сам файл, чтобы, так сказать, прям на операционном столе выяснить причину болезни?
Автор: grbdv
Дата сообщения: 06.08.2012 14:32
Mishel917

Цитата:
каким способом можно блокировать срабатывание макроса на второй вкладке, при Click на первой вкладке MultiPage?

1. Надо внимательно разобраться в цепочке возникающих событий контролов. Хэлп в помощь и/или эксперимент - загнать в код все события со стопами. Некоторые события могут программно вызывать следующие, некоторые - нет (т.е. только из интерфейса)

2. Некторые события имеют встроенную возможность их отмены (см. п.1)

3. Всего несколькими постами я выкладывал пример, в котором есть обход нежелательного события, не имеющего отмены:

Код:
Private Sub sbtValue_Change()
Select Case bSkp
Case True ' ОБХОД СОБЫТИЯ
bSkp = False
Case False
Call sb_SetTbx
bSkp = True
sbtValue.Value = 0
End Select
End Sub
Автор: Mishel917
Дата сообщения: 06.08.2012 19:46
Пример - http://rghost.ru/39609799


Причина срабатывания подряд двух событий в примере на Page2 и Page3 в не всегда надёжной работе левой кнопки мыши. Левая кнопка мыши вместо одного Click - а может выдавать два. Полагаю такая ситуация в рабочей программе заслуживает внимания. Теоретически такое может быть, и MultiPage этому способствует. Курсор находится в одной точке, а вкладки меняются быстро. Если Click мыши не успевает отключиться, то будут срабатывать два события.

Если у Вас мыши исправные, то срабатывание подряд двух событий не будет проявляться.
Автор: grbdv
Дата сообщения: 06.08.2012 20:07
Mishel917
События в VBA обрабатываются синхронно. Хоть с исправными мышами, хоть при отсутствии оных вообще :) Настоятельно, повторно, рекомендуется изучить последовательность возникновения событий в конкретных элементах управления.

Бзв, выкладывая пример, надо информировать, что требуются сторонние библиотеки.
Автор: Mishel917
Дата сообщения: 06.08.2012 21:04
grbdv

Для работы примера необходимо установить из своего компьютера ListView1 на Page1 и ListView2 на Page2. Библиотека - Microsoft ListView Controls, version, 6.0

На Page0 находится Calenedar1.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.