Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2, средняя оценка - 5.00
KoGG
5271 / 1344 / 316
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
20.03.2013, 15:08 #16
Ограничение: если в пользовательской функции, вызываемой из ячейки листа Excel, попытаться изменить цвет заливки какой-либо ячейки - трюк не срабатывает, а значение функции становится #ЗНАЧ!.

При вызове этой же функции из макроса - все отрабатывается правильно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 15:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Профессиональные проблемы, решения, рекомендации и ошибки (VBA):

Указать, почему программа останавливается на операторе Stop, найти пути решения проблемы - VBA
ВНИМАНИЕ! все что написано в данном сообщении - просьба прочитать внимательно! Коллеги, объявляется конкурс. (а если серьезно - понять...

Проблемы с алгоритмом решения задачи - C++
Нужно написать алгоритм решения задачи. Т.е. что и как делает прога, желательно построчно, ну или близко к этому. Собственно задача: ...

Прошу помощи решения проблемы в перекрестном... - MS Access
Ребята, прошу помощи. Есть перекрестный запрос: TRANSFORM Count(.TypObor) AS SELECT .LICS, Count(.TypObor) AS Всего FROM ...

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

Каковы возможные решения проблемы рывков в эмуляторе? - Программирование Android
пишу игру, кадры перерисовываются в методе, который контролируется таймером. поставил 60 кадров. на телефоне все прекрастно, естественно....

BDE - ошибки и решения - Delphi БД
Доброго всем дня. Нужна помощь/совет. Есть программа на Delphi, исходников нету - не мной написана. Работает через BDE с базами Paradox...

117
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 396
22.03.2013, 14:24  [ТС] #17
Представьте, что у вас есть книга Эксперимент.xlsx и в ней 2 листа - Лист1 и Лист2.
В ячейке A1 листа Лист1 устанавливаем правило условного форматирования ("Использовать формулу для определения форматируемых ячеек"), что если "=Лист2!$A$1=1" то [чего-то там ... к примеру красим фон в красный].
Затем, копируем эту A1 с листа Лист1 в другую книгу. (правильно! копирование идет вместе с условным форматированием!) и ... и в другой книге мы видим в этом правиле следующую картинку "=[Эксперимент.xlsx]Лист2!#ССЫЛКА!=1"
Затем ... мы обращаем внимание, что у нас появился пункт "Изменить связи" ... долго ищем - где же связи ... находим, что всему виной - условное форматирование. И ... конечно же выделяем весь лист и сносим все правила, выбрав "Удалить правила со всего листа" ... и ... правила-то удалились, а вот связи-то остались!!! ... - кнопка "Изменить связи" как светилась, так и светится и все попытки удалить связи никакого результата не дают ...
это БАГ! и связей уже нет. а чтобы кнопка пропала - надо сохранить, выйти и зайти в книгу заново.
0
Казанский
13808 / 5571 / 1405
Регистрация: 24.09.2011
Сообщений: 8,741
22.03.2013, 14:48 #18
Цитата Сообщение от StepInLik Посмотреть сообщение
В ячейке A1 листа Лист1 устанавливаем правило условного форматирования ("Использовать формулу для определения форматируемых ячеек"), что если "=Лист2!$A$1=1" то [чего-то там ... к примеру красим фон в красный].
У Вас 2010? В 2007 и более ранних невозможно ввести формулу УФ, которая ссылается на другие листы или книги. Приходится использовать обходной маневр:
Код
=ДВССЫЛ("Лист2!A1")=1
Делайте так же в 2010, и баг не проявится
1
KoGG
5271 / 1344 / 316
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
22.03.2013, 15:33 #19
Созданные функции могут являться аргументами условий форматирования, при условии что их имена не совпадают с адресами ячеек нотации A1.
Это дает обходной путь для визуализации изменений, возникающих при пересчете пользовательских функций листа.
0
Вложения
Тип файла: xls Функция_и_цвет_ячейки.xls (42.0 Кб, 49 просмотров)
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 396
27.03.2013, 12:51  [ТС] #20
Тема уже была и осталась без ответа. Но столкнулся сам.
Используется следующий код:
Visual Basic
1
2
3
4
5
Private Function qwe()
 UserForm_Функции.Show
 UserForm_Функции.Left = 50
 UserForm_Функции.Top = 50
End Function
Если форма модальная - положение окна после активизации не меняется. - не правильно.
Если форма не модальная - положение окна после активизации меняется. - правильно.

(см. комментарий г-на "Апострофф" по данной теме в следующем посте)
0
Апострофф
Заблокирован
27.03.2013, 13:19 #21
StepInLik, это не баг.
Для модальной формы код должен выглядеть примерно так-
Visual Basic
1
2
3
4
 UserForm_Форма.StartUpPosition = 0
 UserForm_Форма.Left = 50
 UserForm_Форма.Top = 50
 UserForm_Форма.Show
ибо по Вашему варианту 3, 4 и 5-я строки выполнятся только после закрытия модальной формы, что вполне логично.
1
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 396
16.04.2013, 16:26  [ТС] #22
А вы знали, что evaluate вызывает вашу функцию 2 раза?

создаем модуль, пишем:
Visual Basic
1
2
3
Public Function ZZZ()
 Debug.Print "вызов"
End Function
вызываем:
Visual Basic
1
2
3
Private Function qwe()
 Call Evaluate("=ZZZ()")
End Function
получаем:
вызов
вызов


в результате, все ваши оптимизации на скорость - на смарку ... а протоколирование на ZZZ (как пример) - в дублях.
2
Казанский
13808 / 5571 / 1405
Регистрация: 24.09.2011
Сообщений: 8,741
16.04.2013, 16:35 #23
Да, неожиданно. А так: Evaluate "ZZZ()+ZZZ()" - тоже 2 раза,
так: Evaluate "ZZZ()+ZZZ()+ZZZ()" - 3 раза.
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 396
16.04.2013, 18:30  [ТС] #24
(описанные ниже проблемы возникают редко, мы встречались с ними на x64 разрядных корпоративных версиях офиса)
1.
Допустим, что формула некоторого правила условного форматирования будет выглядеть как "=И(A1="нет";A2="да")".
Написанная нами строка формулы условного форматирования возвращается (через .FormatConditions.Item(i1&).Formula1) с наименованиями формул в русской локализации т.е. "И" и "ИЛИ" (в виде "=И(A1="нет";A2="да")").
Так вот, если строку условного форматирования мы получили (как показано ранее) в русской локализации, иногда передать ее обратно (.FormatConditions.Add Type:=CLng(dType$), Formula1:=[формула]) нужно уже в английской локализации (т.е. "=AND(A1="нет";A2="да")").

2.
Допустим, для создания правил условного форматирования мы создали некоторую функцию "fФункцияСозданияПравилаУсловногоФорматирования"
И если мы запускаем функцию "fФункцияСозданияПравилаУсловногоФорматирования" через IDE процедурой запуска функции, то все работает как должно. Строку формулы передаем как "=AND(A1="нет";A2="да")".
А вот если мы запускаем ту же функцию через evaluate("=fФункцияСозданияПравилаУсловногоФорматирования()"), то передавать в .FormatConditions.Add иногда надо ту же формулу, только уже с заменой ";" на "," - т.е. ""=AND(A1="нет",A2="да")"
0
KoGG
5271 / 1344 / 316
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
03.10.2013, 17:01 #25
Окно Immediate:
Visual Basic
1
Debug.Print 255*400
или любое место в коде:
Visual Basic
1
Dim n!: n=255*400
вызывает ошибку Overflow
255.001*400 '-уже не вызывает
1
Апострофф
Заблокирован
03.10.2013, 18:21 #26
Visual Basic
1
2
Debug.Print 255*400 'Overflow
Debug.Print 255*400& 'No Overflow
Это можно назвать багом, но с натяжкой - Бэйсик пытается вернуть результат мат. операции с формате, в котором возможно представить наибольшее число из участвующих в операции.
В первом случае это Integer, во втором - Long.

Еще вариант, но без потери точности, как при 255.001*400
Visual Basic
1
Debug.Print 255.0*400 'No Overflow
1
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 396
22.10.2013, 14:08  [ТС] #27
Открываем чистую книгу. Делаем все как написано в qwe1(форму, мультипейдж, лейблы)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Function qwe1()
 UserForm1.Show
 UserForm1.MultiPage1.Page2.Label1.Font.Bold = True
 UserForm1.Label2.Font.Bold = True
End Function
 
Private Function qwe2()
 With UserForm1.Label2
  .Caption = "werwer"
  .Font.Bold = False
 End With
 
 With UserForm1.MultiPage1.Page2.Label1
  .Caption = "werwer"
  .Font.Bold = False
 End With
End Function
после qwe1 запускаем qwe2. ловим глюки! - болд первого лейбла(Label1) не меняется. если убрать Caption, то все славно. ощущение, что Caption - путь в один конец. со втором же - все работает на ура. (по версии 2010 офиса)
0
Аксима
5742 / 1192 / 188
Регистрация: 12.12.2012
Сообщений: 984
24.10.2013, 11:14 #28
Цитата Сообщение от StepInLik Посмотреть сообщение
ловим глюки!
Ловил, но не поймал .

С уважением,
Aksima
0
Вложения
Тип файла: rar LabelsTest.rar (12.0 Кб, 12 просмотров)
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 396
24.10.2013, 15:55  [ТС] #29
Не стал разбираться с вашим файлом. Во вложении глючный.
0
Вложения
Тип файла: rar 2013.10.22 - test.rar (14.5 Кб, 13 просмотров)
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 396
25.10.2013, 17:51  [ТС] #30
1. создаем любой эксельный пустой файл - я делал xlsb. переименовываем открытый лист в "qwe". сохраняем, именуем.
2. создаем еще одну книгу и пишем:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub qwe()
 dПутьФайла$=
 
 With Application
  .Workbooks.Open Filename:=dПутьФайла$
  dИмяФайла$ = CreateObject("Scripting.FileSystemObject").GetFileName(dПутьФайла$)
  With .Workbooks(dИмяФайла$)
   For Each Ws In .Worksheets
    '
   Next Ws
   'Set Ws = .Worksheets("qwe")
  End With
  .Workbooks(dИмяФайла$).Save
  .Workbooks(dИмяФайла$).Close
 End With
End Sub
3. дописываем dПутьФайла$=
4. ставим точку останова на ".Workbooks(dИмяФайла$).Save"
5. ставим точку останова на последней строке "End With"
6. запускаем.
Наблюдаем в IDE:
останавливаемся на первой точке останова. в оснастке списка файлов у нас висит наш первый именнованный на "dПутьФайла$=" файл. правильно!
жмем F5
останавливаемся на второй точке останова. в оснастке списка файлов у нас висит наш первый именнованный на "dПутьФайла$=" файл. НЕ правильно! (мы предыдущей строкой закрываем этот файл! ".Workbooks(dИмяФайла$).Close") а он продолжает висеть!

что удалось выяснить:
если закомментить "For Each Ws In .Worksheets" - бага нет.
... это вроде как напоминаем беньджинг на Ws использования объекта, поэтому, эксель закрывает файл для пользователя, но держит внутри себя.
ан нет! - комментим "For Each Ws In .Worksheets" и открываем "'Set Ws = .Worksheets("qwe")"
проверяем! - на второй точке останова файл успешно исчезает в списке!

это о том, что какие-то странности с For Each в экселе. что-то он там не чистит или как-то уж жестко что-то бейнджит и не отдает (а потому не отпускает объект(счетчик использования переменной не обнуляется)).
P.S. что интересно, если разместить в первом файле код, то на второй точке останова (End With) эксель видит весь этот код. а вот свойства листов уже нет ...

фантазию последствий можно развить серьезную!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 17:51
Привет! Вот еще темы с ответами:

Реестровый триал(ошибки и решения) - Delphi
Привет, всем. Пишу свою программу. Ну и создал даже модуль триала через реестр, вот основа: unit RegTrial; interface uses Windows,...

Укажите ошибки и пути их решения - C (СИ)
#include <stdlib.h> #include <stdio.h> int main(int argc, char* argv) { const n = 8; float m; ...

Какие проблемы Вы видите при решении данной задачи? Предложите алгоритм решения - Алгоритмы
Здравствуйте, помогите с заданием для зачета пожалуйта. Информация о том, сколько людей прописано, сколько отсутствует, сколько...

Найти способ решения проблемы - функция setPixel() работает очень медленно (SFML) - SFML
В sfml функция setPixel() работает очень медленно, можно-ли попиксельно редактировать изображение другим способом?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru