Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/334: Рейтинг темы: голосов - 334, средняя оценка - 4.86
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
19.02.2015, 10:02  [ТС] 81
Excel Professional 2010x64(14.0.7106.5003)@Win7(Корпоративная)x64 SP1 (+ все патчи до текущего момента)
Если у вас большой файл (долго открывается) и в имени файла к примеру есть надпись в квадратных скобках (например "Имя файла плюс ([надпись]).xlsb"), то когда в процессе открытия файла в статус-баре указывается "Открытие: ... Для отмены нажмите ESC." и справа от этой надписи появляется прогресс-бар ... то квадратные скобки заменяются на круглые и надпись выглядит как "Открытие: Имя файла плюс ((надпись)).xlsb. Для отмены нажмите ESC."
То же самое при закрытии файла: "Сохранить изменения в файле 'Имя файла плюс ((надпись)).xlsb'?"
Безобразие!
Причем, почему при закрытии имя файла указывается в апострофах, а при открытии без - загадка (только потому, что "." может быть частью имени, а "?" нет?).
Добавлено 04.03.2015
В заголовке IDE - все то же: Имя файла плюс ((надпись)).xlsb

Добавлено через 20 часов 23 минуты
Обратите внимание, что как только вы используете свою функцию в качестве формулы в расчетах (где-то в ячейке) или отработки (как пример) условного форматирования, то как только происходит отработка этой вашей функции, режим конструктора (если он был включен) - сразу выключается.
Т.е. может статься так, что вы работаете в какой-то части листа и ... к примеру, удаляете строчку ... ну удалили и удалили - и ладно ... смотрите - режим конструктора как был включен, так и включен и остался ...
затем, вы не спеша двигаетесь по строчкам вверх (как пример) ... и вдруг БАЦ! и режим конструктора самопроизвольно выключается ... (а причиной всему тому - функция в правиле условного форматирования, которая отрабатывает в какой-то ячейке появившейся на экране строки)

Добавлено через 23 часа 37 минут
По всем версиям 2010 экселя
1. Пишем функцию в коде какого-то модуля:
Visual Basic
1
2
3
Public Function fПроверкаЦелостности(dПараметр$) As Boolean
 fПроверкаЦелостности = True
End Function
2. В "ЭтаКнига" пишем:
Visual Basic
1
2
3
Private Sub Workbook_Open()
 Stop
End Sub
3. Уходим с IDE в эксель и в A1 указываем правило условного форматирования:
=fПроверкаЦелостности($A$1)
4. Сохраням и закрываем книгу.
5. Открываем книгу и НЕ ловим Stop!!!
Не документированная фича работает только при передаче функции какой-то ячейки в качестве параметра, а прием ее обязательно производить в качестве типизированного значения (c Variant плюшка исчезает).
"... но есть нюанс": при открытии книги ручками - не работет ни Workbook_Open ни auto_open. А вот если открывать книгу средствами Workbooks.Open другой книги, то auto_open отрабатывает.
А самое важное, что баг возникает в том и только том случае, если ячейка с этим правилом при открытии находится в видимой зоне видимого на экране листа.
Нет слов ... при все тех же проблемах ... иногдаааааа ... вернее совсем совсем редко - оно бац! и события на открытие книги отрабатывают ... но закономерности нет совершенно никакой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2015, 10:02
Ответы с готовыми решениями:

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

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

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

Прошу помощи решения проблемы в перекрестном...
Ребята, прошу помощи. Есть перекрестный запрос: TRANSFORM Count(.TypObor)...

ФР Electrolube PRP, проблемы, подводные камни, решения
Не смог найти привычный POSITIV20, пришел довольствоваться тем что есть. Не...

118
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
26.02.2015, 11:30  [ТС] 82
Если в вашем файле есть непреодолимая проблема обновления связей. И вы НУ НИКАК не можете понять - что это за связи, как их разорвать, к чему они применены и где они находятся - одним словом "вы сдались" )
1. Переименуйте ваш файл в тот файл на который ссылаются ваши связи (путь файла можно увидеть нажав кнопку "открыть" в диалоге обновления связей), переоткройте файл, сохраните с первоначальным именем и обнаружите, что связь исчезла. Повторите все то же самое для каждого файла с которым у вас связь )
2. Если переименовать файл не получается в силу каких-то причин (сетевой путь, отсутствие прав на создание указанного пути и т.д. ...):
- переименуйте ваш XLSX-файл в ZIP
- распакуйте тем же RAR'ом
- найдите тем же FAR'ом файл в тексте которого содержится часть имени искомого файла-связи
- отредактируйте его в тот путь, который вы можете создать (к примеру на вашем локальном диске)
- создайте zip-архив из распакованного каталога (где в одном из подкаталогов в каком-то файле вы поправили ссылку на файл связи)
- переименуйте файл из zip в xlsx
- выполните п.1
наслаждайтесь
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
03.03.2015, 16:03  [ТС] 83
Думаю, многие здесь уже сталкивались с тем, что после установки некоторого обновления перестают добавляться на листы ActiveX-компоненты (возникает сообщение "Вставка объекта неосуществима.") ... и те, что уже были - превращаются в пикчур без реакции на нажатия (проблема возникает не на всех версиях и не на всех компьютерах).
Ранее (конец прошлого-начало текущего года) это было обновление http://support.microsoft.com/kb/2553154 - в просторах интернета об этом сказано много ... (есть не плохо работающее решение от ZVI)
Но вот те же проблемы возникают еще и при установке Майкрософт Service Pack 2 for Microsoft Office 2010 (KB2687455)... (видимо и в сервис-паках для других версий тоже).
Если вы хотите избежать проблем на корню - подумайте перед их установкой (неожиданность бывает не всегда приятной).
0
Изображения
  
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
04.03.2015, 12:43  [ТС] 84
В продолжение 81 поста - Профессиональные проблемы, решения, рекомендации и ошибки
Эксель не дает возможность создавать файлы с квадратными скобками в имени файла (попробуйте записать файл с таким именем средствами Ctrl+O - получите отказ) ...
Видимо, этому есть какая-то внутренняя техническая причина.
И вот доказательство: если имя файла содержит эти злополучные скобки(путем FSO.CopyFile или переименования ...) и в нем запустить:
Visual Basic
1
2
3
Private Function qwe()
 Application.OnKey "^+{H}", "fПоказатьФорму"
End Function
где
Visual Basic
1
2
3
Public Function fПоказатьФорму()
 MsgBox "Форма ..."
End Function
... то при нажатии Ctrl+Shift+H - эксель попытается запустить копию этого файла для выполнения функции fПоказатьФорму ... в результате чего - появится сообщение, что файл доступен только для чтения и т.д. ... и т.п. ... - что фактически будет означать, что функционал OnKey работает не корректно.
Вывод: не допускайте в имени эксель-файла символы "[" и "]".
0
Казанский
14151 / 5850 / 1535
Регистрация: 24.09.2011
Сообщений: 9,184
05.03.2015, 11:20 85
Цитата Сообщение от StepInLik Посмотреть сообщение
Видимо, этому есть какая-то внутренняя техническая причина
Причина довольно проста: ссылка на ячейку другой книги выглядит как
Код
='[Книга1.xls]Лист1'!A1
3
GIKS
1 / 1 / 0
Регистрация: 13.05.2014
Сообщений: 128
12.05.2015, 17:46 86
Хотел тему прям создать с криком о помощи, но вообщем сам решил=) и уверен дофига новичков-долбоящеров, как я, головы ломают как это сделать
Задача: подсчитать количество заполненых ячеек при условии проставления фильтра
решение:

sheets("List").Select
[n1] = WorksheetFunction.CountA([A2:A30000].SpecialCells(xlCellTypeVisible))
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
13.05.2015, 11:41  [ТС] 87
Еще из категории "странных и совершенно абсурдных" советов:
Если у вас есть код в какой-то части книги, где-то отрабатывающий, например типа такого:
Visual Basic
1
2
3
4
On Error Resume Next
For Each dРабочийЛистItem In ThisWorkbook.Worksheets
 Call dРабочийЛистItem.fОткрытиеОтчетов
Next
и в самой функции нет ничего кроме "Stop" (например) ... т.е. в dРабочийЛистItem следующий код:
Visual Basic
1
2
3
Public Function fОткрытиеОтчетов()
 Stop
End Function
... и на Stop останова не происходит (функция просто не вызывается и интерпритатор просто в нее не заходит!) и оснований такого поведения совершенно нет никаких (не крутите пальцем у виска! это правда!) и не ломайте голову (если вы уверены в своем коде на 100%) ... бывает. порой, этому действительно нет никаких объяснений. Выясните Description ошибки и напишите что-то вроде повтора:
Visual Basic
1
2
3
4
5
On Error Resume Next
For Each dРабочийЛистItem In ThisWorkbook.Worksheets
 Call dРабочийЛистItem.fОткрытиеОтчетов
 If Err.Description = "Invalid procedure call or argument" Then Call dРабочийЛистItem.fОткрытиеОтчетов
Next
По всей видимости, объект (листа), функцию которого вы вызываете - на момент вызова почему-то (напишем абстрактно) "не поднят как надо" ... и при повторном вызове - он уже "на месте" ... (у меня объяснений такого поведения нет) ...
(в моей жизни встретилось пару таких загвоздок с типами "Invalid procedure call or argument" и "Type mismatch"(в т.ч. при вставке пустых листов на этапе команды Sheets.Add и .Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) ... так вот, прямо на команде Sheets.Add валится в ерр-хендл с "Type mismatch" ... ловим, видим этот тип и делаем Resume ... и все добавляется)
(отложите ... может пригодиться)
0
Night Ranger
Заблокирован
13.05.2015, 14:32 88
Есть такие странности:
Если разрабатывать проект в ранних версиях (2003), с использованием графических объектов
например автофигур, то можно потом сильно удивиться, что некоторые события методы и
свойства могут вести себя очень отличительно от запланировынных ожиданий
в частности скорость появления линий, ( а при разработке и дизайне обычно нужно это видеть ) цвет линий и различных фигур может явно различаться, и если вы пишете *нажмите Red*
то это может выглядеть как Purple и тп
0
KoGG
5274 / 1347 / 320
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
13.05.2015, 14:38 89
Вопрос, а легален ли вызов
Visual Basic
1
 Call dРабочийЛистItem.fОткрытиеОтчетов
, если fОткрытиеОтчетов - не является законным методом Worksheet ?
Что мы этим хотим сказать?
Или функция fОткрытиеОтчетов дублируется в каждом объектном модуле листа?
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
13.05.2015, 21:49  [ТС] 90
Цитата Сообщение от KoGG Посмотреть сообщение
Или функция fОткрытиеОтчетов дублируется в каждом объектном модуле листа?
Если говорить про данный конкретный случай, то и да и нет. В части объектах-листах такая паблик-функция есть, а в части нет (ну нет ее и вызов осуществлен не будет и цикл пойдет дальше). При вызове, чтобы код не брыкался - выше стоит Resume Next. И этот код прекрасно работает во всех случаях ... и так же прекрасно работает при повторном вызове ... а вот при первом - (крайне редко!) - не хочет (даже заходить). Сталкиваться с этим, кстати, начал с 2007 версии ...
И такая обработка хороша (далее как пример), когда вы используете модель шаблонов, наследники которых при инициализации (например открытии книги) - должны понять, что они уже не шаблоны и отработать как положено свою инициализацию (характерную именно для данного типа шаблона) - пересчитать формулы, привести в порядок вид листа, занести какие-то данные в кеш, подкачать данные из базы, сохранить протокол ... и т.д.
Но опять же, обратил внимание, что ряд публикуемых мною моментов повторяются не у всех и это часто зависит и от версии и от разрядности и от нагрузок в параллельно работающих экселях.
0
Petr357
1 / 1 / 0
Регистрация: 05.06.2015
Сообщений: 2
07.08.2015, 10:00 91
Здравствуйте. Нужна консультация по вопросу. Как создать в VBA Excel поле класса типа динамический массив? Т.е. нужен класс, у которого имелось бы несколько полей ("Имя", "Дата") и поле с динамическим массивом, чтобы можно было его (массив) заполнять и получать значения, обращаясь к этому полю объекта по индексу. Возможно ли такое?
1
Аксима
5809 / 1259 / 187
Регистрация: 12.12.2012
Сообщений: 984
07.08.2015, 15:54 92
Здравствуйте, Petr357,
Да, такое возможно.

Примеры можно посмотреть в соседней теме. Почитайте листинги программы, или изучите предложенные тут файлы.

С уважением,
Аксима
1
Petr357
1 / 1 / 0
Регистрация: 05.06.2015
Сообщений: 2
07.08.2015, 16:50 93
Спасибо, огромное. Я нашёл решение. Решение описано на странице http://stackoverflow.com/questions/5...m-property-get
Я переделал его под (динамический массив) свои нужды.
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
01.10.2015, 11:13  [ТС] 94
Не правильно работает функция ROUND() в VBA Access
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
23.11.2015, 18:33  [ТС] 95
А вы знали, что если от "05.01.2015" отнять 0,000001, то получится та же дата "05.01.2015"
И если логично, что ...
НОМНЕД("05.01.2015";2) =2
НОМНЕД("05.01.2015"-0,000001;2) =1
то на экране в случае "05.01.2015"-0,000001, будет светиться "05.01.2015"
Пользователей это БЕСИТ )))

Добавлено через 7 минут
Добавляйте после "errHndl:" строчку с DoEvents.
Это позволит вам отловить ошибки, когда во многих случаях код не удается остановить, а ...
- вы забыли убрать resume
- ошибка в функции, которая содержит структуры на повтор действий кода в случае ошибок
- когда в ходе работы кода возникают ошибки (не всегда критичные) и вы хотите их промониторить
- во многих других случаях ...
По крайней мере, увлекаясь нажатием Ctrl+Break вы будете надеяться, что если где-то есть ошибка - код встанет на DoEvents )

Добавлено через 4 минуты
Рассмотрите кусок кода, маленькие идеи которого возможно будут для вас полезны:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
errHndl: 
 DoEvents 
 If Len(Err.Description) <> 0 Then 
  If "dErrNumber(" & Err.Number & "),dErrDescription(" & Err.Description & ")" <> dКлючПрежнейОшибки$ Then 
   dКлючПрежнейОшибки$ = "dErrNumber(" & Err.Number & "),dErrDescription(" & Err.Description & ")" 
   dКоличествоПовторовОшибок& = 0 
  End If 
  
  dКоличествоПовторовОшибок& = dКоличествоПовторовОшибок& + 1 
  If dКоличествоПовторовОшибок& <= 3 Then 
   Application.Wait Now + TimeSerial(0, 0, 5) 
   Resume 
  End If 
 End If
2
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
24.11.2015, 11:11  [ТС] 96
Чтобы потом жОстко не обломаться, когда локальный кеш не влезает в функцию (в частности), держите в голове:
0
Изображения
 
Казанский
14151 / 5850 / 1535
Регистрация: 24.09.2011
Сообщений: 9,184
25.11.2015, 16:31 97
Цитата Сообщение от StepInLik Посмотреть сообщение
в случае ="05.01.2015"-0,000001, будет светиться "05.01.2015"
Пользователей это БЕСИТ )))
(добавил = в формулу)
Бесящимся установите формат ячейки
Код
ДД.ММ.ГГ ч:мм:сс,00
А вообще, округление помогает.
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
27.11.2015, 13:30  [ТС] 98
1. Берем чистую книгу
2. Объединяем A1-A5 и A6-A11
3. Скролим вниз на один щелчок колесика (так, чтобы часть объединенной ячейки A1-A5 ушла вверх, но еще была видна снизу).
4. Выделяем нижнюю A6-A11
5. С контролом добавляем к выделению ту часть первой A1-A5, которая видна снизу
6. Скролим вверх
7. Снимаем выделение ...
и наслаждаемся квадратиком (фантомными линиями в области верхнего объединения) )))
мелочь, а приятно ... что не день, то новый баг ) ... надоедает, согласитесь?!
Excel Professional 2010x64(14.0.6112.5000) ... но что-то мне подсказывает, что я не одинок
3
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
04.03.2016, 21:25  [ТС] 99
ЖЖем?
1. Берем A1, кладем 1
2. Берем A2, кладем 1
3. Берем A2, добавляем примечание ... например с текстом "qwe"
4. Выделяем A2, жмем Ctrl+C, специальная вставка "значение" ...
все сработало. все верно? ВЕРНО! - все как и должно быть ...

а теперь фокус:
1. Берем A1, кладем 1
2. Делаем в A2 ссылку на A1, т.е. пишем "=A1"
3. Берем A2, добавляем примечание ... например с текстом "qwe"
4. Выделяем A2, жмем Ctrl+C, специальная вставка "значение" ...
все сработало? все верно? НЕ ВЕРНО! - а где наше примечание?! ау ... пропало!
... кумекаем ... кумекаем ... кумекаем еще ... и недоуменно жмем Shift+F2 ... а вот ОНО!!!

при этом, если вызвать контекст - там так же как и в пустой ячейке будет "Вставить примечание", но так же будет и "Удалить примечание".

косячок'с однако
Excel Professional 2010x64(14.0.7112.5000)
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
04.03.2016, 21:44  [ТС] 100
продолжаем )
1. Рисуем табличку как "Таблица" как на рисунке (см. первый рисунок)
2. Выделяем B2, Закрепить области\Закрепить области
3. Выделяем A1
4. Подводим мышь слева от ячейки A1 так, чтобы курсор мыши превратился в стрелку направленную вправо
5. жмем на мышь ...
все хорошо? да, все как и должно быть - выделяется строка заголовка таблички

а теперь пробуем следующее(начиная с 3 пункта):
3. Выделяем любую ячейку вне области таблицы (отгадка загадки)
4. Повторяем пункты 4 и 5 предыдущих действий ...
все хорошо? а почему выделилась мало того что вся таблица, но и какая-то дополнительная область под ней?! (см. второй рисунок)

что сказать заказчику, когда он заявляет, что его ЭТО мягко говоря "не устраивает"?!
вот так и живем ...
0
Изображения
  
04.03.2016, 21:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2016, 21:44

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

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

Реестровый триал(ошибки и решения)
Привет, всем. Пишу свою программу. Ну и создал даже модуль триала через реестр,...


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

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

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