Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/334: Рейтинг темы: голосов - 334, средняя оценка - 4.86
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
04.03.2016, 22:03  [ТС] 101
Хочу просто обратить ваше внимание. Может запомнится/вспомнится и не потеряется лишнее время на разбор полетов в следующий раз.
Если у вас табличка с значениями, где в столбце встречается "бла-бла" и "бла-бла ", то фильтр по этому столбцу покажет только одно значение "бла-бла", а вот суммесли в условии отбора будет уже строже! и условие "<>бла-бла" (как пример) учтет уже только одну строку ... а вы будете сидеть и думать глядя на список значений в фильтре "ну там же одно значение и 2 строки! почему он посчитал только одну строку?!"

Добавлено через 3 минуты
(при включении: "Параметры сводной таблицы""Вывод""Автоматически изменять ширину столбцов при обновлении")
Первый вариант. Берем сводную, берем поле и тащим в диалоги столбцов/строк - тащится?! отлично! теперь тащим на лист в зону сводной чтобы кинуть в нее ... тащится и кидается!
Второй вариант (печальный). Берем сводную, берем поле и тащим на лист в зону сводной чтобы кинуть в нее, потом передумываем и тащим в диалоги столбцов/строк - кидается?! НЕА!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2016, 22:03
Ответы с готовыми решениями:

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

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

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

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

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

118
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
11.03.2016, 16:26  [ТС] 102
Зачем, если мы изначально установили формат ячейки как "Текст", при ее редактировании и вводе формулы в "Строке формулы", отражается и цветовая подсветка ссылок на ячейки и сами ячейки кантуются цветовой подсветкой?!
Ведь после энтера, все что было введено - станет строкой, т.е. вся формула превратится в тупой набор символов. Зачем обманывать пользователя, что он вводит формулу, а не строку?!
Неужели так трудно сначала проверять формат будущего текста, а затем сразу не форматировать его как формулу?!

По опыту, пользователей это сбивает с толку и при дальнейшем отражении введенной формулы как строки и ставит их в тупик.
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
01.04.2016, 13:19  [ТС] 103
Если мы используем локальную(Private) константу (переменную, функцию) в модуле, то при ее использовании в другом модуле, клик на "Definition" в контекстном меню этой константы нам ничего не даст ... вернее, выдаст "Indentifier under cursor is not recognized"
и это правильно.
А вот если мы используем директивную константу "#Const dКонстанта=...", то при ее использовании в другом модуле и "Definition" на ней в этом (другом) модуле, IDE вывалится на строчку ее объявления. Т.е. пользователь ее видит, а вот интерпретатор (при исполнении кода) ее(директиву) не увидит (хотя, она тоже Private).
что очень сомнительно с т.зрения правильности
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
06.04.2016, 12:05  [ТС] 104
А вы знали, что:
Visual Basic
1
ThisWorkbook.Worksheets(dИмяЛиста$).Cells.SpecialCells(xlLastCell).Column
вернее SpecialCells
генерит Worksheet_SelectionChange?! при том, что реальный Selection не трогает!!! причем, опять же - 2 раза ...
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
07.04.2016, 13:06  [ТС] 105
1. Если пользователь находится в ячейке
2. В ячейке есть примечание
3. Это примечание при переходе в него находится в километре от редактируемой ячейки (а возможно и за видимой областью листа, которая видна на экране(на которой находится эта ячейка))

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


Добавлено через 14 минут
1. Выделяем область A1:B1
2. Объединяем
3. Выделяем область A1:B5
4. Жмем Ctrl+1/Граница/устанавливаем любой вариант линии справа
5. Наблюдаем - все правильно, граница появилась ...

теперь,
1. Выделяем область A1:B1
2. Объединяем
3. Выделяем столбец B (нажатием на заголовок столбца)
4. Жмем Ctrl+1/Граница/устанавливаем любой вариант линии справа
5. И наблюдаем - справа появилась граница у всех ячеек столбца, за исключением границы нашей объединенной ячейки A1:B1

Где логика такого разного поведения?!
Excel Professional 2010x64(14.0.7166.5000)
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
08.04.2016, 15:03  [ТС] 106
1. Берем чистую книгу.
2. Рисуем элементарную табличку
3. Строим по ней график, причем данные выбираем с контролом, так, чтобы где-то в поле "Значения" было выражение типа "=Лист1!$B$2;Лист1!$C$2"

теперь копируем этот график:
4. Ctrl+c, Ctrl+v ... получаем его копию
5. Смотрим значение в нашем поле "Значения" - там стоит "=(Лист1!$B$2;Лист1!$C$2)"
... собственно, как и должно быть ... жмем из диалога в этом поле Ентер и выходим ...

теперь копируем этот график:
4. Удерживая Ctrl, тянем график в сторону и ... получаем его копию
5. Смотрим значение в нашем поле "Значения" - там стоит "=(Лист1!$B$2,Лист1!$C$2)"
... собственно, разделитель поменялся ... ничего не изменяя - жмем Ентер и получаем окно с "Ошибкой в формуле"

Excel Professional 2010x64(14.0.7166.5000)
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
13.04.2016, 17:15  [ТС] 107
А вы знали, что если вы жмете Ctrl+F, выбираете "Искать в книге", и указываете то, что в книге отсутствует, то
1. Вы получите сообщение "Приложению Microsoft Excel не удается найти искомые данные."
2. После нажатия "ОК" в появившемся окне, последовательно во всех листах отработает следующий код:
Visual Basic
1
2
3
Private Sub Worksheet_Activate()
 Stop
End Sub
, хотя листы при это визуально переключаться не будут )
при том, попутно будет отрабатывать и весь ваш код в этой функции ... но! что-то работать будет, а вот к примеру Application.OnKey "^+{A}", "" - уже нет

---------------------------------------------------------------------------------
Добавлено через 12 минут
1. Сделайте сводную таблицу
2. Выделите строчку шапки получившейся таблицы
3. Попробуйте сгруппировать строку ...

не получилось? необходимый пункт меню заблокирован (заблокирована данная функция для этой области)?!
а вам очень нужно?!

4. Выделите +1 строчку выше и строчку шапки сводной, сгруппируйте их
5. Уберите из группировки ту лишнюю, расположенную выше шапки одну строку ...
велкам )

---------------------------------------------------------------------------------
Добавлено через 11 минут
Возможно расскажу вам уже известную для вас истину, но может кто и не знает (меня забавляет, а потому добавлю):
1. Возьмите чистую книгу и в определенных листах(не во всех листах) что-то где-то напишите (в любой ячейке) ... (но некоторые листы должны остаться не тронутыми)
2. Нажмите Ctrl+F, выберите "Искать в книге"
3. Оставьте искомое значение пустым и нажмите "Найти все"

в листбуксе появятся списком ячейки $A$1 только тех листов, на которых вы что-то написали.
Кому не понятно почему так происходит - просто подумайте немного подольше )
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
13.05.2016, 12:59  [ТС] 108
Представьте, что вы - очень важный менеджер, отвечаете за очень важные задачи и работаете с очень важными и даже секретными данными. И ... по какой-то причине храните эту секретную информацию в эксельной книге ...
Предположим еще и то, что никто не должен знать какие-то ключевые слова из этой книги - ну ... например, какие-то фамилии ...

И так (представим что над вами не сошлись звезды, но сошлись следующие обстоятельства),
- вы садитесь за чей-то компьютер (а какая разница, если вы уверены, что никаких хуков не стоит),
- открываете свою супер-секретную книгу с паролем, вводите пароль, книга открывается (но возможно она и без пароля, но на вашей флешке),
- вы жмете Ctrl+H и меняете фамилию Иванов на Сидоров ...
- сохраняете книгу и ее закрываете ... (не закрывая приложение экселя)
- и будучи уверенным, что все секретно - идете по своим делам ...

затем ...
- какой-то заинтересованный пользователь Вася садится за этот компьютер
- видит, что после вашей работы осталось приложение экселя и в этом приложении висит окно замены значений ...
- причем, в этом оставшемся окне - информация о вашей работе с файлом ... и более того - фамилия Иванова и Сидорова!!!
- Вася продает эту информацию и получает свой первый миллион )))

Вопрос: Зачем оставлять открытым окно замены и поиска текста после закрытия книг приложения?! Какой в этом глубокий смысл и почему стоимость его оставить - выше, чем стоимость ухода от потенциальных рисков и обеспечения конфиденциальности информации пользователя!

---------------------------------------------------------------------------------
Добавлено через 28 минут
Хотите довести начинающего эксельного кодера до истерики? Создайте все листы книги средством Ctrl+F11. Удалите все существующие новых версий ... и попросите на досуге - добавить обработчик событий какого-то листа ...
Этим же способом можно воспользоваться, чтобы до вести до истерики какого-нибудь хвастунишку - просто добавьте на такой лист табличку и попросите сделать с нее сводную )

---------------------------------------------------------------------------------
Добавлено через 27 минут
1. Создайте сводную
2. Добавьте (например) в фильтр сводной какое-то поле
3. На ячейку отбора значений этого фильтра сделайте примечание (Shift+F2)

4. Во-первых, в контекстном меню этой ячейки нет ни одного поля управления примечаниями

5. Выделяем какую-то другую ячейку (не ту, в которую только что добавили примечание)
6. Жмем "Найти и выделить""Область выделения" и ставим галочку видимости на объект этого примечания ... - примечание появилось и висит
7. Затем стрелками клавиатуры подползаем к этой ячейке и выделяем ее. Все правильно - ячейка выделилась. примечание висит.

8. Теперь отползаем стрелками клавиатуры в сторону и мышкой выделяем эту ячейку при этом, немного задерживая указатель мыши в области этой ячейки (затем его убирая). (если указатель мыши не задержите, то фокуса не будет)
9. И! примечание само собой перестает отражаться. Флажок из окна "Выделение и видимость" - сам по себе пропадает.

Нет слов ...
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
17.05.2016, 12:36  [ТС] 109
1. Запускаем новое приложение экселя
2. Заходим в IDE
3. Создаем новый модуль (как вариант)
4. В этом новом модуле пишем, например:
Visual Basic
1
2
3
4
5
6
7
Private Function qwe1()
 ' set FSO =
End Function
 
Private Function qwe2()
 ' set FSO =
End Function
5. Встаем на самую верхнюю строчку модуля и жмем Ctrl+F
6. В окне поиска значений пишем "FSO"
7. Жмем ентер ... и система находит находит нам первое вхождение ...
Excel Professional 2010x64(14.0.7166.5000)
8. А теперь самое интересное! Аккуратно (без лишних действий) закрываем окно активного модуля и жмем "Find Next" ...

эксель дохнет ... Excel Professional 2010x64(14.0.7166.5000) 64х ... но что-то мне подсказывает, что мы не одни с этим багом
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
24.05.2016, 11:54  [ТС] 110
После многочисленных ситуаций, проверок и попыток (пока не найден ответ такого странного поведения), рекомендуется вместо:
Visual Basic
1
dПоследняяСтрока& = Cells.SpecialCells(xlLastCell).Row
использовать
Visual Basic
1
dПоследняяСтрока& = UsedRange.Row + UsedRange.Rows.Count - 1
т.к. периодически возникают ситуации, когда dПоследняяСтрока& = Cells.SpecialCells(xlLastCell).Row дает 1

, а для перестраховки лучше написать:
Visual Basic
1
2
3
dСтрокаЛиста& = dWorkbook.Worksheets(dИмяЛиста$).Cells.Find(What:="*", LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row
If dСтрокаЛиста& = 1 Then dСтрокаЛиста& = dWorkbook.Worksheets(dИмяЛиста$).UsedRange.Row + dWorkbook.Worksheets(dИмяЛиста$).UsedRange.Rows.Count - 1
If dСтрокаЛиста& = 1 Then dСтрокаЛиста& = dWorkbook.Worksheets(dИмяЛиста$).Cells.SpecialCells(xlLastCell).Row
(Find "*" так же регулярно не работает)

P.S. Помните, что dWorkbook.Worksheets(dИмяЛиста$).Cells.SpecialCells(xlLastCell).Column не работает на защищенном листе
P.S. то же касается и столбцов
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
27.05.2016, 16:46  [ТС] 111
Выяснилась очень интересная структура дерева расчетов в случае появления циклической ссылки:

На листе:
1. Отключаем автоматический пересчет формул
2. В ячейке A1 пишем "=fФормула1()"
3. В ячейке B1 пишем "=fФормула2()"

В коде:
Visual Basic
1
2
3
4
5
6
7
8
9
Public Function fФормула1()
 Debug.Print "Вызов 1" & Cells(1, 1).Value
 fФормула1 = 1
End Function
 
Public Function fФормула2()
 Debug.Print "Вызов 2"
 fФормула2 = 2
End Function
На листе жмем Crtl+Alt+Shift+F9
получаем:
Вызов 2
Вызов 1
Вызов 1
Вызов 1
Вызов 1

Почему же произошло 4 вызова первой формулы?!
Excel как-то простраивает дерево расчетов, потом бежит по дереву и если в процессе расчетов вызвалась формула в ходе работы которой произошло обращение к какой-то другой ячейке(области), то он бросает все и считает эту область ... причем, если в структуре изначального дерева были ячейки, которые он потом посчитал бросившись к ним из-за расчетов, то он их из этого изначально дерева удаляет ... - все логично и правильно ...
Из дерева они удаляются в любом случае, но вот если расчет удаляемых ячеек должен был быть посчитан на основании значения ячеек с которых произошел вызов их пересчета (т.е. по сути - образовалась циклическая ссылка), от Excel составляет последовательность таких ячеек и всегда осуществляет почему-то ровно 3 дополнительных вызова их расчетов в следующей последовательности:
Представим, что ячейки A1 и B1 образуют циклическую ссылку, а C1 будет использовать значение B1
, т.е. [C1]=fФормула3()+B1,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function fФормула1()
 Debug.Print "Вызов 1" & Cells(1, 2).Value
 fФормула1 = 1
End Function
 
Public Function fФормула2()
 Debug.Print "Вызов 2" & Cells(1, 1).Value
 fФормула2 = 2
End Function
 
Public Function fФормула3()
 Debug.Print "Вызов 3"
 fФормула3 = 3
End Function
после первого стандартного пересчета будет следующая структура вызовов:
Вызов 3
Вызов 1
Вызов 2
Вызов 2
Вызов 1
Вызов 3
Вызов 3
Вызов 1
Вызов 2
Вызов 2
Вызов 1
Вызов 3

Обратите внимание на последовательности 3-1-2, 2-1-3, 3-1-2 и 2-1-3 ... т.е. после первого просчета по дереву он потом еще 3 раза в разной последовательности пересчитывает этот круг формул:
- от начала в конец,
- из конца в начало,
- и опять из начала в конец ...

и никаких хитростей )
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
07.06.2016, 15:25  [ТС] 112
1. Ставим точку останова или Stop.
2. После останова в указанной точке, выделяем 1(какое-то количество) строку снизу и текущую
3. Удаляем ...
4. Потом жмем откат ... и (продолжаем выполнение по F5)
выполнение продолжится с последней строки восстановленного блока! вроде бы мелочь, а помнишь об этом не всегда ... а потом сидишь и думаешь - ПОЧЕМУ-у-у-у-у(другой результат)?!
(ведь, выполнение кода может продолжиться со строки программы не соответствующей алгоритму и данным)
помните, что точка выполнения при откате удаления строк будет не та, на которой вы остановились!
0
Казанский
14154 / 5853 / 1535
Регистрация: 24.09.2011
Сообщений: 9,200
19.10.2016, 20:38 113
Не присваивается непоследовательный Range для Excel из VB6.0
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
15.12.2016, 09:48  [ТС] 114

Не по теме:

Забавно:
в IDE(окна кода модуля) в пустой строке пишем символ "?" и жмем ентер


Коллеги, не нужно писать что обозначает символ "?" и почему он так отрабатывает в окне модуля. Кажется это знают все и это очевидно! Не думал, что кто-то может этого не знать или думать, что этого не знает кто-то не из начинающих!
А вот почему это не просто можно, а нужно считать косяком - отдельная тема, порассуждайте!

P.S. а еще попробуйте следующее:
Visual Basic
1
2
3
4
Private Function qwe()
 a$ = "мама"
 Stop
End Function
и на стопе в дебаге напишите "? a$a$a$"
0
Казанский
14154 / 5853 / 1535
Регистрация: 24.09.2011
Сообщений: 9,200
15.12.2016, 22:19 115
Цитата Сообщение от StepInLik Посмотреть сообщение
в IDE в пустой строке пишем символ "? и жмем ентер
Не работает окно Immediate
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
18.05.2017, 16:09  [ТС] 116
Алгоритмы сортировки строковых массивов данных: MSD-сортировка и ABCSort (защищено патентом)
+ множество других методов сортировки (в реализации со строковыми массивами)
MSD-сортировка
0
Казанский
14154 / 5853 / 1535
Регистрация: 24.09.2011
Сообщений: 9,200
30.11.2017, 22:10 117
Разный приоритет операторов "унарный -" и "^" в формулах листа Excel и в VBA

На листе =-2^4 дает 16, т.е. - имеет приоритет перед ^.
В VBA -2^4 дает -16, т.е. ^ имеет приоритет перед -.
Именно так приоритеты описаны в Справке, так что багом этот факт считать нельзя.

Кстати, на листе можно извлекать корень нечетной степени из отрицательных чисел: =-7^(1/3) , и таким образом возводить отрицательные числа в дробную степень, например =-7^(1/3)^2 (напрямую =-7^(2/3) не работает).
В VBA отрицательное число можно возводить только в целую степень, т.е. кубический корень из отрицательного числа извлечь нельзя.
3
Казанский
14154 / 5853 / 1535
Регистрация: 24.09.2011
Сообщений: 9,200
02.12.2017, 00:51 118
Hidden features of VBA - тема на StackOverflow, родственная этой: https://stackoverflow.com/questions/1070863/hidden-features-of-vba

Там есть ссылка на описание интересной библиотеки Shlwapi для работы с путями файлов (и со строками)
https://msdn.microsoft.com/en-us/library/aa155716(office.10).aspx
2
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 416
12.07.2018, 12:57  [ТС] 119
Вы думаете, что работая с темой "зависимых ячеек", используя NavigateArrow или DirectDependents - все хорошо?!
ДА! до тех пор, пока вы не начали работать по этой теме в функции, вызванной с листа или из условного форматирования! - как только код отрабатывает в "этом режиме", то все ваши списки Dependents и Precedents превращаются в одну единственную (анализируемую) ячейку - все count=1! т.е. код по какой-то причине перестает получать доступ к дереву вычислений ... грустно
0
12.07.2018, 12:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2018, 12:57

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

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

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


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

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

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