Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 34 След.
Почему происходит неверное ранжирование
 
roninza, при нажатии ввода в ячейке значение округляется и меняется на 20.
Я не волшебник, я только учусь.
Почему происходит неверное ранжирование
 
Упростил файл до предела. Может быть в отдельный пост его выкину, правда не знаю, что спрашивать, кроме того, что как узнать что там 20.000000000000004. Меня удивило, что при умножении на 10^20 эксель всё-равно продолжает делать вид, что там 2E+21, но хранит как 2.0000000000000003E+21.
Изменено: Wiss - 10 Июл 2020 21:07:33
Я не волшебник, я только учусь.
Почему происходит неверное ранжирование
 
Цитата
roninza написал:
но откуда хвост 04 приклеился
Надеюсь, кто-нить более опытный сможет ответить на этот вопрос. Мне тоже это очень интересно. Эксель и ВБА говорят, что в ячейке B3 стоит 20, а там на самом деле 20.000000000000004. Почему? Как это увидеть не черeз XML?!
Я не волшебник, я только учусь.
Почему происходит неверное ранжирование
 
В B3 находится значение 20.000000000000004. Как его из Экселя увидеть - не знаю. Сохранил книгу в формате XLSX, переименовал в ZIP и смотрел уже на XML

<c r="B2" s="6">
<f>[2]База!D15</f>
<v>20</v>
</c>
<c r="C2" s="10">
<f>B2/$A2</f>
<v>0.3125</v>
</c>
...........................
<c r="B3" s="6">
<f>[2]База!D29</f>
<v>20.000000000000004</v>
</c>
<c r="C3" s="10">
<f>B3/$A3</f>
<v>0.31250000000000006</v>
</c>

Как вариант решения проблемы - перед ранжированием округлять цифры до какого-то знака.
Изменено: Wiss - 10 Июл 2020 20:40:36
Я не волшебник, я только учусь.
Почему происходит неверное ранжирование
 
Забавно. Пытаюсь разобраться. Пока не получается. Переделал табличку чуть-чуть (оставил только "странные" значения). Думаю, что проблема где-то в ячейках, выделенных красных. Если зайти в них и нажать Enter - результат меняется.
Я не волшебник, я только учусь.
Отображение в выбранных ячейках дат из большой таблицы, таким образом, что бы даты из большой таблицы отображались через столбец
 
У меня получилось вот так. Для каждого столбца своя формула (из-за того, что в результате столбцы не подряд, а между ними ещё столбец факт. В шапке последние 3 ячейки с такой же формулой, что и столбцы.

О! У Михаила Л вариант, похоже, лучше. Одна формула вместо 4-х.
Изменено: Wiss - 8 Июл 2020 16:05:30
Я не волшебник, я только учусь.
Как разрешить редактировать данные только по двойному клику для всех TextBox и ComboBox в форме
 
Nordheim, спасибо. Ответили на мой основной вопрос. Видимо, наследование в VBA работает таким странным образом. А вот с "возвратом цвета" бяда осталась прежней. В Вашей версии все текстбоксы возвращаются к начальному состоянию при двойном нажатии на один из них. Если я, например, после двойного клика, один  раз нажму на какой-то другой из них (например, чтобы скопировать данные), то текстбокс всё-ещё останется зелёным (хоть он уже и не активный даже).

Вдохновлённый Вашим кодом, хотел ещё и на onClick поставить not_color, но такого события в VBA нет:)  Неужели придётся писать 30 однотипных, но не идентичных onExit?

Может быть можно как-то ActiveControl найти? Тогда перед выходом можно будет перебирать все элементы формы и блокировать активный (этот).
Я не волшебник, я только учусь.
Как разрешить редактировать данные только по двойному клику для всех TextBox и ComboBox в форме
 
Цитата
Юрий М написал:
Придётся менять подход.
А почему сразу менять?! DblClick через класс, а onExit ручками 30 раз:(  Всё-равно альтернативы не вижу (для формы чего-то типа ActiveElementChange нету, в Class module тоже ничего не подходит)
Я не волшебник, я только учусь.
Как разрешить редактировать данные только по двойному клику для всех TextBox и ComboBox в форме
 
Юрий М, подход мне очень понравился. Сначала показалось, что для многих текстбоксов придётся для flag и text делать что-то типа коллекции, но и так всё отлично работать будет, но всё-равно для каждого текстбокса придётся прописывать 3 процедуры, а у меня их около 30.

Попробую ещё раз сформулировать свою проблему: есть форма, на ней 30 текстбоксов, в которые нужно разрешить редактировать только по двойному щелчку. Для каждого из 30 текстбоксов описывать одни и те же события - не наш метод. Задача частично решена через Class, но "есть нюансы":
1. Class к TextBox как-то криво применён (неужели нет более красивого варианта наследования и я это правильно сделал?!).
2. В Class Module нету события onExit (неужели для каждого TextBox его отдельно описывать)?!
3. В событии onExit для каждого элемента приходится подставлять его имя. Разве нельзя как-то сослаться на элемент, на котором сработало событие? (гуглил, не нашёл)
Изменено: Wiss - 7 Июл 2020 13:37:30
Я не волшебник, я только учусь.
Как разрешить редактировать данные только по двойному клику для всех TextBox и ComboBox в форме
 
А можно я немножко нарушу правила и апну тему? Мне кажется, это была плохая идея просить помощи в выходной день в час ночи.
Изменено: Wiss - 7 Июл 2020 12:45:06
Я не волшебник, я только учусь.
Миллион с буквой в миллион цифрами
 
У вас там сейчас не число, а текст, так что и работать с ним нужно как с текстом. Формулой ТОЛЬКО ДЛЯ МИЛЛИОНОВ могу предложить вот так
=ПОДСТАВИТЬ(ЛЕВСИМВ(ПРАВСИМВ(H7;ДЛСТР(H7)-2);ДЛСТР(H7)-4);".";",")*1000000
Может вот это на какие-то мысли натолкнёт (решение обратной задачи - русский денежный формат в американский)
Я не волшебник, я только учусь.
Как ускорить свой код в 1000 раз
 
Цитата
bedvit написал:
Написать свою библиотеку?
Да у меня в общем-то и не вопрос был. Сразу в курике создавал. Зачем мелочиться с библиотекой?! Создать сразу свой отечественный офис с блэкждеком. Сейчас ещё не поздно. Импортозамещение и всё такое.
Я не волшебник, я только учусь.
Как ускорить свой код в 1000 раз
 
Цитата
Андрей VG написал:
Книжки читать, справочник изучать - это же такая скука, хочется же только вот этот конкретный момент изучить, а об остальном - хоть трава не расти
Истину глаголете. Если бы я в своё время прочитал вторую (сложную) половину книжки по VBA, то кучи проблем бы избежал и знал много важных вещей.
«И жить торопится и чувствовать спешит» - ничего не меняется, люди всего лишь люди.
Цитата
БМВ написал:
Вот за что я "люблю" все эти видео , так это за трату времени.
Ну с видео, как и со справочной литературой нужно уметь работать. Я как-то и не обратил внимания, что видео по 15 минут. Минуты за 3 каждое промотал. По принципу что сделали-что получилось. Там просто циферки очень наглядные.
Я не волшебник, я только учусь.
Как разрешить редактировать данные только по двойному клику для всех TextBox и ComboBox в форме
 
Если попробуете мой файл-пример, то увидите, что при двойном клике тестбокс красится зелёным и его можно редактировать. После выхода из текстбокса он возвращается к обычному цвету и редактировать его снова нельзя. Просто залочить все мне мало. Каждый текстбокс должен 2 события иметь. Одно я повесил через класс, но как то криво, второе мне тоже не очень нравится.
Я не волшебник, я только учусь.
Подсчет промежутка времени ввода данных в ячейку
 
Доброй ночи.
1. Во втором сообщении Вы забыли оформить код (есть специальная кнопочка в окне редактирования сообщения).
2. Код привели не целиком, там ещё одна строчка должна быть.
Код
Private iTimer As Date, iCollection As New Collection
3. Не хватает фала-примера.
4. Вот ещё примечания от автора макроса и источник http://www.msoffice-nm.ru/faq/macros/range5.htm
Цитата
Комментарий :
[*]Таймер запускается после ввода(редактирования/копирования) данных в любую из ячеек указанного диапазона.
[*]Удаление(очистка) данных игнорируется, но если такие действия должны учитываться, то просто оставьте только заполнение коллекции.
[*]В примере лимит времени задан как 60секунд(1минута), но это не является обязательным, проще говоря, Вы можете изменить его.
[*]Функция MsgBox используется только в качестве демонстрации.
[*]Если диапазон, за которым мы установили слежку, насчитывает много ячеек или время, отведённое пользователю на ввод, невелико, то вычисление временного интервала, имеет смысл осуществлять перед работой с коллекцией.
А по существу пока ничего ответить не могу, так как приходится самому делать файл-пример, пихать в него код и разбираться в нём, а уже спать пора.

P.S. И вообще тот макрос слегка о другом
Цитата
"Если Вам необходимо отслеживать сколько времени занял ввод данных в нужные ячейки (в примере это A1,C1,F1) и в зависимости от результатов, выполнять различные действия"
То есть он рассчитан на работу с диапазоном в iSource1 предполагается не одна ячейка, а несколько. И считается время от окончания правки первой ячейки в диапазоне, до окончания правки последней ячейки в диапазоне. Для одной ячейки этот код не сработает. Вообще не знаю как решать вариант с одой ячейкой.
Изменено: Wiss - 4 Июл 2020 04:03:10
Я не волшебник, я только учусь.
Как разрешить редактировать данные только по двойному клику для всех TextBox и ComboBox в форме
 
Всем доброй охоты!

Рисую форму, в которой будет около 20 текстбоксов и комбобоксов разного размера. Хочу, чтобы данные в них можно было вносить только по двойному щелчку. Менять свойство на Locked для каждого элемента и прописывать событие onDoubleClick лениво. Вроде бы это всё делается через ClassModule, но я с ними не особо дружу и реализовал всё как-то коряво, на мой взгляд. Как правильно создать и использовать customTextBox и customComboBox?

myClass
Код
Option Explicit

Private WithEvents cbX As MSForms.ComboBox
Private WithEvents tbX As MSForms.TextBox

Public Sub setCont(ByVal cont)
    If TypeName(cont) = "ComboBox" Then
        Set cbX = cont
        cbX.Locked = True
    ElseIf TypeName(cont) = "TextBox" Then
        Set tbX = cont
        tbX.Locked = True
    End If
End Sub

Private Sub cbX_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    cbX.Locked = False
    cbX.BackColor = vbGreen
End Sub

Private Sub tbX_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    tbX.Locked = False
    tbX.BackColor = vbGreen
End Sub
Код в форме
Код
Option Explicit

Private contList() As myClass

Private Sub UserForm_Initialize()
    Dim cntrX As Control
    ReDim contList(0 To 0)

    For Each cntrX In frmTest.Controls
        ReDim Preserve contList(0 To UBound(contList) + 1) 'да, нулевой элемент массива пустой, но я с этим массивом работать не собираюсь. Он просто костыль.
        Set contList(UBound(contList)) = New myClass
        contList(UBound(contList)).setCont cntrX
    Next cntrX
    
End Sub

'Событие Exit вроде как нельзя описать в Class Module, так что придётся писать для каждого элемента. Можно как-то это сократить?
'Ещё один вопрос: я могу как-то обратиться к элементу, на котором произошло событие? This (ничего)? Me (форма)?
Private Sub cb1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    cb1.Locked = True
    cb1.BackColor = &H80000005
End Sub

Private Sub tb1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    tb1.Locked = True
    tb1.BackColor = &H80000005
End Sub

Private Sub tb2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    tb2.Locked = True
    tb2.BackColor = &H80000005
End Sub
В комментариях к коду ещё 2 маленьких вопроса, ответ на которые вроде бы "никак", но спросить-то всё-равно надо.
Изменено: Wiss - 4 Июл 2020 01:18:19
Я не волшебник, я только учусь.
Как ускорить свой код в 1000 раз
 
Напоролся на 2 интересных видео:
1. Первое - ничего особенного, просто конкретно в цифрах показывает почему нельзя выделять, копировать/вставлять и т.д. Лично для меня это видео оказалось из серии "смотреть до конца", потому что я слоупок и не знал про Range.AdvancedFilter.
https://www.youtube.com/watch?v=GCSF5tq7pZ0
2. Во втором видео более продвинутые техники, например про то, что Коллекции существенно быстрее перебираются через For Each.
https://www.youtube.com/watch?v=RNqd89K_bbU


P.S. Как думаете, позднее/ранее связывание со словарями экономить 30 милисекунд или реально существенно ускоряет код? (последний трик во втором видео)
Я не волшебник, я только учусь.
Как изменить формулу, если она ссылается на ячейку, ниже которой находится пустое значение
 
Тут без куска исходного кода, который что-то перебирает и меняет формулу в H2 ни ответа нормального не дать, ни темы не предложить.
Код
If range(Mid(range("H7").Formula,2)).offset(1)="" then range("H7").Formula = "=P2"
Тема для моего ответа "Как изменить формулу, если она ссылается на ячейку, ниже которой находится пустое значение"
Изменено: Wiss - 29 Июн 2020 14:05:28
Я не волшебник, я только учусь.
Анекдот дня, Постим сюда понравившиеся:)
 
Скрытый текст
Изменено: Wiss - 10 Апр 2020 17:14:15
Я не волшебник, я только учусь.
Присвоение уникального артикула для категорий товаров
 
Ігор Гончаренко, злой Вы. Ну зачем автору поста категории отдельно от таблицы?! Там формула нужна.
1. В первой строчке ручками прописать 1.
2. Вторую сначала лучше пропустить;
3. В третьей строке индексов формула типа: =ЕСЛИОШИБКА(ИНДЕКС(диапазон артикулов сверху этой строчки, верхняя граница диапазона закреплена;ПОИСКПОЗ(текущая категория;диапазон категорий сверху этой строчки, верхняя граница диапазона закреплена;0));МАКС((диапазон артикулов сверху этой строчки, верхняя граница диапазона закреплена)+1);
4. Скопировать формулу во вторую строку и протянуть до конца таблицы.
Поздравляю! категориям присвоены  уникальные артикулы
Я не волшебник, я только учусь.
Подсчёт количества обработанных счетов
 
Вот такой вариант не подойдёт? Исходил из того, что дата всегда начинается с цифры, а имя сотрудника - с буквы.
=ЕСЛИ(ЕОШИБКА(--ЛЕВСИМВ(RC[-3]));R[1]C;R[1]C*(--НЕ(ЕОШИБКА(--ЛЕВСИМВ(R[1]C[-3]))))+1)
Изменено: Wiss - 24 Мар 2020 12:36:17
Я не волшебник, я только учусь.
Найти различия в данных двух книг
 
А почему не говорит, что в офисе(в 2013 точно) есть Spreadsheet Compare 2013?? (Пуск/Microsoft Office 2013/Средства Office 2013/Spreadsheet Compare 2013)
Потому что в данной ситуации он не поможет и всё-таки придётся сравнивать формулами или ещё как-то?
Изменено: Wiss - 24 Мар 2020 12:27:29
Я не волшебник, я только учусь.
Power Query. Меняю источник данных, выдает ошибку
 
У Вас картинка не вставилась + скорее всего картинки будет не достаточно. Нужен файл-пример (см. правила форума)
Я не волшебник, я только учусь.
Анекдот дня, Постим сюда понравившиеся:)
 
Скрытый текст
Я не волшебник, я только учусь.
Рейтинг значений, где присутствует несколько категорий и возможны одинаковые суммы (открытая таблица), необходимой создать рейтинг, где для каждой категории будет считаться свой рейтинг с учетом возможного наличия подобных сумм (для них рейтинг должен быть идентичным)
 
Так?

=СУММ(ЕСЛИ([@Сумма]<[Сумма];ЕСЛИ([@Категория]=[Категория];1/СЧЁТЕСЛИМН([Категория];[Категория];[Сумма];[Сумма]))))+1
Я не волшебник, я только учусь.
Анекдот дня, Постим сюда понравившиеся:)
 
Как-то так
Скрытый текст
Изменено: Wiss - 12 Мар 2020 17:58:07
Я не волшебник, я только учусь.
Задачка
 
Цитата
sokol92 написал:
Есть ли корректное решение?
1. По пункту 1 есть только одно решение (проверено моим кодом с учётом всего описанного Вами. Код БМВ,  тоже, наверное, это подтверждает, но он такой же как его формулы, а я временно не пью).
2. Почему "очевидно" что только 1 может быть больше 9? Может ли встречаться не 11 раз? Есть ли третье решение вообще?
3. Критикуя - предлагай.
Я не волшебник, я только учусь.
Задачка
 
Цитата
PooHkrd написал:
который "красивый".
ВАУ! Пошёл перегружаться в винду и разбирать по косточкам Ваше чудо. Странно, что именно "красивый первым выходит".
Я не волшебник, я только учусь.
Задачка
 
PooHkrd, а у Вас получается один ответ или больше? Не могу проверить - офиса под рукой нет.
Я не волшебник, я только учусь.
Задачка
 
Максим Зеленский, спасибо за похвалу, но мне пока не нравится. Я там с граничными показателями накосячил. С одним - точно (поэтому второй ответ не получил), а во втором я теперь тоже стал сомневаться (забыл, чем я его обосновывал).
Я не волшебник, я только учусь.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 34 След.
Наверх