Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Универсальный обработчик событий контролов юзерформы
 
sokol92, там в общем написано и, к сожалению, не дает ответа на мой вопрос.
Дмитрий(The_Prist) Щербаков, спасибо за развернутое объяснение, стало понятнее.
DANIKOLA, спасибо за пример.
Ігор Гончаренко, не, мне хватило объяснений Дмитрия про Control чтобы не копать дальше, а сделать обработки пары нужных типов в одном классе (как в примере от DANIKOLA). KISS, YAGNI, вот эта вот вся фигня )
Изменено: user0 - 25.08.2022 01:48:38
Универсальный обработчик событий контролов юзерформы
 
Всем привет,

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

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

класс clsEventHandler_Universal
Код
Option Explicit

Private WithEvents mControl As MSForms.Control    '<-- тут ошибка возникает

Public Sub AssignControl(c As MSForms.Control)
    Set mControl = c
End Sub

Private Sub mControl_Change()
Debug.Print TypeName(mControl)
    Select Case True
        Case TypeName(mControl) = "TextBox"
            Debug.Print "txt", mControl.Name
        Case TypeName(mControl) = "ComboBox"
            Debug.Print "cbo", mControl.Name
    End Select
End Sub
юзер форма
Код
Private eventHandlerCollection As New Collection

Private Sub UserForm_Initialize()
    Dim c As Control

    Dim handler As clsEventHandler_Universal
    For Each c In Controls
        If TypeName(c) = "ComboBox" Or _
           TypeName(c) = "TextBox" Then
            Set handler = New clsEventHandler_Universal
            handler.AssignControl c
            eventHandlerCollection.Add handler
        End If
    Next    
End Sub
Изменено: user0 - 24.08.2022 09:53:02
Обрезка строк по горизонтали при печати
 
Спасибо, помогло.
Обрезка строк по горизонтали при печати
 
Всем привет,
Подскажите, чем вызвано такая обрезка строк по горизонтали в при печати и можно ли это исправить не копируя данные в новый файл.
Как будто с масштабированием у файла какие-то проблемы.


В окне экселя это еще заметно по масштабу заголовков (в обоих файлах 100% стоит).


Добавил нормальный файл, как оно должно выглядеть.
Изменено: user0 - 17.08.2022 10:35:42
Разница между Resume на GoTo
 
БМВ, спасибо.

Может быть у кого-нибудь есть идеи почему исполнение может стопориться на Resume?

Визуально это выглядит следующим образом:
1) запускаю код
2) в месте где ожидается ошибка она происходит (15 строка)
3) вариантс с Resume – никакого сообщения об ошибке не возникает, просто открывается окно vba где строка с Resume выделена желтым (см картинку).
3) вариантс с GoTo – код корректно перебрасывается на proc_exit:
Разница между Resume на GoTo
 
День добрый,

Проблема
Столкнулся с тем что при определенных условиях следующий код при возникновении ошибки в test_2 останавливается на строке Resume proc_exit, открывается окно vba и эта строка выделяется желтым, никакого сообщения об ошибке не выводится (поведение как если бы там было написано Stop).
Если заменить Resume на GoTo, то отрабатывает как и задумано, без остановок.
Код
Public Sub test_1()
 On Error GoTo proc_err
    Call test_2 

proc_exit:
    Debug.Print "proc_exit"
    Exit Sub
proc_err:
    Debug.Print "proc_err", Err.Description
    Resume proc_exit
   'GoTo proc_exit
End Sub

Function test_2()
    Debug.Print sapSession.findById("wnd[0]/usr/ctxtZL22D-MTART").Text
End Function

Условия
Если протестировать этот упрощенный кусок, то работет и Resume и GoTo, но в реале в test_2 идет обращение к контролу на форме SAP (через SAP GUI Scripting).
Без обработки ошибок будет сообщение об ошибке "run-time error 619: Control could not be found by id." (см скриншот), так как такого контрола нет на форме. Вроде бы никакого криминала.

Вопрос
Подскажите, чем обусловлена разница в поведении с Resume и GoTo при обработке ошибок в данном случае.
Изменено: user0 - 09.05.2022 10:49:52
Даблклик при открытии формы выделяет строку в списке ListBox
 
На самом деле я сюда не в остроумии упражняться зашел, но спасибо что заменили "айтем" на "список", сразу стало как-то понятнее что ли.
Если есть что теме сказать, то велкам.
Изменено: user0 - 02.08.2020 16:33:20
Даблклик при открытии формы выделяет строку в списке ListBox
 
Всем привет,

Открываю форму по даблклику на ячейках с данными в столбце А (открывается в центре окна экселя) и выделяю текущую строку в списке формы.
Возникла проблема - если так совпадает что список в форме открывается поверх курсора, то автоматически выделяется строка в списке, в том месте где находится курсор. Как будто я кликаю по списку уже после открытия формы.

Чтобы воспроизвести эффект надо сделать окно экселя маленьким (см картинку), например:
1) при даблклике на ячейке A11, открывается форма и в списке уже выделена строка на том же уровне - так не должно быть.
2) при даблклике на ячейке A23, открывается форма, список в форме находтся не под курсором и выделяется корректное значение. Все ок, так и должно быть.

Как убрать такое поведение?

кросспост
Заливка областей, формат диаграммы
 
На основании тех примеров я и сделал свой файл с диаграммой ганта, вот только как бы добавить те пару вещей, что я написал выше.
Заливка областей, формат диаграммы
 
Добрый день,
Помогите, пожалуйста, доработать диаграмму с временными отрезками.

Необходимо:
1) закрасить 2 области с 21 по 6 часов
2) добавить линии на каждые 0:00

Перенос остатка на другую ячейку
 
спасибо, работает!  
 
уточняющий вопрос - возможно ли ограничиться в формуле только диапазоном цифр (с D до M), не захватывая соседние ячейки (в вашей формуле учитывается столбец С с названием строк А и В)?
Excel 2013 - ссылка на источних данных для сводной
 
спасибо за наводку, на сделал кроспос на excelworld.ru:  
http://www.excelworld.ru/forum/2-2869-1  
 
собственно больше интересует мое ли это невезение или баги офиса.
Excel 2013 - ссылка на источних данных для сводной
 
После установки Excel 2013 (что превью, что финала) изменилось поведение системы при обработке ссылок на источник данных для сводной таблицы.    
 
Если файл сохраняется в Excel 2013, то после любой операции с файлом (переименование/перемещение/копирование) относительная ссылка на источник данных для сводной преобразуется в абсолютную. Ссылка на данные может быть задана простым диапазоном или проименованым, на этом же листе или соседнем - без разницы. Местоположение файла тоже роли не играет, у меня так происходит и на локальном диске (рабочем столе) и сетевом и внешнем.  
 
Сталкивался ли кто-нибудь с таким поведением Excel 2013 и если да то как поборол? С файлами, сохраненные в Excel 2010 на той же машине таких метаморфоз не случается.  
 
кросспост  
http://www.excel-vba.ru/forum/index.php?topic=1718
Перенос остатка на другую ячейку
 
не стал создавать новую тему, так как задача похожа, но попроще.  
 
необходимо сделать перенос значений из строки А в В, учитывая, что все значения больше определенного числа (120 в примере) должны суммироваться со следующим столбцом. Возможна ситуация когда подряд будут идти значения больше 120, в таких случаях остаток сверх 120 переносится дальше вправо.
Расчет передвижения персонала и необходимых транспортных средств
 
ни у кого нет идей?
Расчет передвижения персонала и необходимых транспортных средств
 
Добрый день,  
 
Помогите, пожалуйста, решить задачу на расчет кол-ва перемещающегося персонала и транспорта, необходимого для его перемещения.  
 
Дано:    
Personnel – несколько групп персонала, для которых установлена опреденная длительность вахты, время заезда и срока пребывания на объекте.  
Crewchange – кол-во персонала, которое необходимо переместить (мобилизовать/демобилизлвать, сменить по окончанию вахты) четырьмя видами транспорта (вертолет-и-самолет или судно-и-поезд).  
Transport – кол-во рейдов того или иного вида транспорта, необходимое для перевозки людей в заданную неделю.  
 
Сейчас люди суммируются по типу транспортного средства через цветовое кодирование (добавлена функция ColorFunction). Но суммируются без учета длительности вахт.  
 
Необходимо добавить возможность распределения перемещающегося персонала в зависимости от времени заезда/выезда с объекта и длительности вахты (желтым выделено - как это примерно должно выглядеть).
Как автоматически обновлять сводные таблицы?
 
ikki, Serge 007  
Спасибо  
 
Я бы с удовольствием почитал справку по VBA, но к сожалению на данном этапе я мало что там пойму, а так я только за самобразование )    
 
Еще раз спасибо!
Как автоматически обновлять сводные таблицы?
 
возможно описание сверху несколько сумбурно, попробую изложить просьбу проще..  
 
на листе data есть код который при изменении данных на листе обновляет 6 сводных на листах pivot_sheet1 и pivot_sheet2. Собственно сам код:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
Worksheets("pivot_sheet1").PivotTables("pivot1_1").PivotCache.Refresh  
Worksheets("pivot_sheet1").PivotTables("pivot1_2").PivotCache.Refresh  
Worksheets("pivot_sheet1").PivotTables("pivot1_3").PivotCache.Refresh  
Worksheets("pivot_sheet2").PivotTables("pivot2_1").PivotCache.Refresh  
Worksheets("pivot_sheet2").PivotTables("pivot2_2").PivotCache.Refresh  
Worksheets("pivot_sheet2").PivotTables("pivot2_3").PivotCache.Refresh  
End Sub  
 
вопрос 1 (основной)  
сейчас как сделать обновление сводных при изменении только:  
а) определенной ячееки (например B3)  
б) диапазона (например B3:C4)    
в) столбца (например B)  
 
вопрос 2 (побочный)  
можно ли как-то увеличить скорость обновления сводных?
Как автоматически обновлять сводные таблицы?
 
Подскажите, пожалуйста, по автоматическому обновлению сводных при изменении данных на текущем листе:  
 
1) обновляю 6 сводных таблиц, источником данных для которых являются 2 листа (~10k строк на лист), следующим кодом:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
 Worksheets("pivot_sheet1").PivotTables("pivot1_1").PivotCache.Refresh  
 Worksheets("pivot_sheet1").PivotTables("pivot1_2").PivotCache.Refresh  
 Worksheets("pivot_sheet1").PivotTables("pivot1_3").PivotCache.Refresh  
 Worksheets("pivot_sheet2").PivotTables("pivot2_1").PivotCache.Refresh  
 Worksheets("pivot_sheet2").PivotTables("pivot2_2").PivotCache.Refresh  
 Worksheets("pivot_sheet2").PivotTables("pivot2_3").PivotCache.Refresh  
End Sub  
 
Возможно можно как-то оптимизировать и ускорить обновление? Поиском нашел тему про принудительное использование одного кэша для всех сводных таблиц, но не смог применить это к нескольким источникам сводных:  
http://www.planetaexcel.ru/forum.php?thread_id=26093  
 
2) как задать обновление только при изменении а)определенной ячееки б)диапазона(выделен желтым в примере) в)столбца, так как сейчас все обновляется при изменении любой ячейки листа, что несколько неудобно.  
 
зы: на всякий случай пример во вложении
Рассчет задержки из-за непогоды
 
{quote}{login=MCH}{date=25.07.2012 12:26}{thema=}{post}может так нужно?{/post}{/quote}спасибо большое! очень похоже на правду, но есть несколько моментов которые меня смущают.    
 
Построил вариант4 с высоким количеством дней непогоды и:  
1) результат формулы как-то слишком уж сильно отличается от посчитанного вручную. Возможно, это проблема именно ручного подсчета без учета дробей, хотя я старался подобрать максимально целые вводные.  
2) мне кажется, что на среднее время обработки в порту негативно влияют последние дни месяца (выделено красным), которые необоснованно улучшают средний показатель за месяц. Возможно стоит добавить в формулу все дни до момента окончания действия начатого в текущем месяце?
Рассчет задержки из-за непогоды
 
Доброго времени суток,  
 
Помогите, пожалуйста, с решением задачи на вычисление задержки судна(ов) в порту(ах) из-за непогоды. Критерии погоды могут меняться, соответственно нельзя заранее просчитать вероятную задержку в определенном месяце. Неизменным остается только время на обработку судна.  
 
Изменяющиеся из-за критериев "непогоды" вводные выделено желтым в примере. Я рассчитал задержу из-за непогоды для нескольких месяцев, но это приблизительный "расчет на пальцах", с таблицей где приведены все дни месяца.. и, к сожалению, он не работает при изменяемых исходных значениях.  
 
зы: пока изучаю формулу вероятность
Вычисление максимума
 
Михаил С.,  
Спасибо
Вычисление максимума
 
ikki,  
Спасибо, пожалуй подойдет и двухшаговое решение. Небольшая доводка руками таблицы приемлема, так как сводный график обновлять только раз в месяц.
Вычисление максимума
 
>>Объясните, почему именно так.  
>>В моей арифметике 5 и 6 получается  
я наверное не совсем понятно изложил суть, не обессудьте )  
Приложил скриншот сводной таблицы с выделенными максимумами, которые я бы хотел видеть как конечный результат вычислений..
Вычисление максимума
 
Спасибо за попытку )  
 
Должны получиться вот такие значения для максимума  
on off  
Mon 3 4  
Tue 5 16  
Wed 0 18  
Thu 23 28  
Fri 12 5  
Sat 3 10  
Sun 9 6
Вычисление максимума
 
Доброго времени суток,  
 
Подскажите как вычислить максимум для повторяющихся нечисловых значений. В частности, данные за несколько месяцев по кол-ву прибывающих и убывающих людей в день. Необходимо найти найти максимальное кол-во прибывающих (On) и убывающих (Off) за все время для каждого дня недели и построить график. Пытаюсь сделать это сводной табл, сводным графиком, но что-то не выходит.  
 
ps. может еще подскажете, как на графике выстроить дни недели (буквенные обозначения) по порядку, вез использования цифр.  
 
Файл-пример во вложении. В примере, в сводной табл. указаны просто общее кол-во прибывших, убывших с разбивкой по дням.
Страницы: 1
Наверх