Пытаюсь сделать универсальный обработчик событий (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
Всем привет, Подскажите, чем вызвано такая обрезка строк по горизонтали в при печати и можно ли это исправить не копируя данные в новый файл. Как будто с масштабированием у файла какие-то проблемы.
В окне экселя это еще заметно по масштабу заголовков (в обоих файлах 100% стоит).
Добавил нормальный файл, как оно должно выглядеть.
Проблема Столкнулся с тем что при определенных условиях следующий код при возникновении ошибки в 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 при обработке ошибок в данном случае.
Открываю форму по даблклику на ячейках с данными в столбце А (открывается в центре окна экселя) и выделяю текущую строку в списке формы. Возникла проблема - если так совпадает что список в форме открывается поверх курсора, то автоматически выделяется строка в списке, в том месте где находится курсор. Как будто я кликаю по списку уже после открытия формы.
Чтобы воспроизвести эффект надо сделать окно экселя маленьким (см картинку), например: 1) при даблклике на ячейке A11, открывается форма и в списке уже выделена строка на том же уровне - так не должно быть. 2) при даблклике на ячейке A23, открывается форма, список в форме находтся не под курсором и выделяется корректное значение. Все ок, так и должно быть.
После установки Excel 2013 (что превью, что финала) изменилось поведение системы при обработке ссылок на источник данных для сводной таблицы.
Если файл сохраняется в Excel 2013, то после любой операции с файлом (переименование/перемещение/копирование) относительная ссылка на источник данных для сводной преобразуется в абсолютную. Ссылка на данные может быть задана простым диапазоном или проименованым, на этом же листе или соседнем - без разницы. Местоположение файла тоже роли не играет, у меня так происходит и на локальном диске (рабочем столе) и сетевом и внешнем.
Сталкивался ли кто-нибудь с таким поведением Excel 2013 и если да то как поборол? С файлами, сохраненные в Excel 2010 на той же машине таких метаморфоз не случается.
Помогите, пожалуйста, решить задачу на расчет кол-ва перемещающегося персонала и транспорта, необходимого для его перемещения.
Дано: Personnel – несколько групп персонала, для которых установлена опреденная длительность вахты, время заезда и срока пребывания на объекте. Crewchange – кол-во персонала, которое необходимо переместить (мобилизовать/демобилизлвать, сменить по окончанию вахты) четырьмя видами транспорта (вертолет-и-самолет или судно-и-поезд). Transport – кол-во рейдов того или иного вида транспорта, необходимое для перевозки людей в заданную неделю.
Сейчас люди суммируются по типу транспортного средства через цветовое кодирование (добавлена функция ColorFunction). Но суммируются без учета длительности вахт.
Необходимо добавить возможность распределения перемещающегося персонала в зависимости от времени заезда/выезда с объекта и длительности вахты (желтым выделено - как это примерно должно выглядеть).
Помогите, пожалуйста, с решением задачи на вычисление задержки судна(ов) в порту(ах) из-за непогоды. Критерии погоды могут меняться, соответственно нельзя заранее просчитать вероятную задержку в определенном месяце. Неизменным остается только время на обработку судна.
Изменяющиеся из-за критериев "непогоды" вводные выделено желтым в примере. Я рассчитал задержу из-за непогоды для нескольких месяцев, но это приблизительный "расчет на пальцах", с таблицей где приведены все дни месяца.. и, к сожалению, он не работает при изменяемых исходных значениях.
Подскажите как вычислить максимум для повторяющихся нечисловых значений. В частности, данные за несколько месяцев по кол-ву прибывающих и убывающих людей в день. Необходимо найти найти максимальное кол-во прибывающих (On) и убывающих (Off) за все время для каждого дня недели и построить график. Пытаюсь сделать это сводной табл, сводным графиком, но что-то не выходит.
ps. может еще подскажете, как на графике выстроить дни недели (буквенные обозначения) по порядку, вез использования цифр.
Файл-пример во вложении. В примере, в сводной табл. указаны просто общее кол-во прибывших, убывших с разбивкой по дням.