sokol92, там в общем написано и, к сожалению, не дает ответа на мой вопрос. Дмитрий(The_Prist) Щербаков, спасибо за развернутое объяснение, стало понятнее. DANIKOLA, спасибо за пример. Ігор Гончаренко, не, мне хватило объяснений Дмитрия про Control чтобы не копать дальше, а сделать обработки пары нужных типов в одном классе (как в примере от DANIKOLA). KISS, YAGNI, вот эта вот вся фигня )
Пытаюсь сделать универсальный обработчик событий (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% стоит).
Добавил нормальный файл, как оно должно выглядеть.
Может быть у кого-нибудь есть идеи почему исполнение может стопориться на Resume?
Визуально это выглядит следующим образом: 1) запускаю код 2) в месте где ожидается ошибка она происходит (15 строка) 3) вариантс с Resume – никакого сообщения об ошибке не возникает, просто открывается окно vba где строка с Resume выделена желтым (см картинку). 3) вариантс с GoTo – код корректно перебрасывается на proc_exit:
Проблема Столкнулся с тем что при определенных условиях следующий код при возникновении ошибки в 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, открывается форма, список в форме находтся не под курсором и выделяется корректное значение. Все ок, так и должно быть.
уточняющий вопрос - возможно ли ограничиться в формуле только диапазоном цифр (с D до M), не захватывая соседние ячейки (в вашей формуле учитывается столбец С с названием строк А и В)?
После установки Excel 2013 (что превью, что финала) изменилось поведение системы при обработке ссылок на источник данных для сводной таблицы.
Если файл сохраняется в Excel 2013, то после любой операции с файлом (переименование/перемещение/копирование) относительная ссылка на источник данных для сводной преобразуется в абсолютную. Ссылка на данные может быть задана простым диапазоном или проименованым, на этом же листе или соседнем - без разницы. Местоположение файла тоже роли не играет, у меня так происходит и на локальном диске (рабочем столе) и сетевом и внешнем.
Сталкивался ли кто-нибудь с таким поведением Excel 2013 и если да то как поборол? С файлами, сохраненные в Excel 2010 на той же машине таких метаморфоз не случается.
не стал создавать новую тему, так как задача похожа, но попроще.
необходимо сделать перенос значений из строки А в В, учитывая, что все значения больше определенного числа (120 в примере) должны суммироваться со следующим столбцом. Возможна ситуация когда подряд будут идти значения больше 120, в таких случаях остаток сверх 120 переносится дальше вправо.
Помогите, пожалуйста, решить задачу на расчет кол-ва перемещающегося персонала и транспорта, необходимого для его перемещения.
Дано: Personnel – несколько групп персонала, для которых установлена опреденная длительность вахты, время заезда и срока пребывания на объекте. Crewchange – кол-во персонала, которое необходимо переместить (мобилизовать/демобилизлвать, сменить по окончанию вахты) четырьмя видами транспорта (вертолет-и-самолет или судно-и-поезд). Transport – кол-во рейдов того или иного вида транспорта, необходимое для перевозки людей в заданную неделю.
Сейчас люди суммируются по типу транспортного средства через цветовое кодирование (добавлена функция ColorFunction). Но суммируются без учета длительности вахт.
Необходимо добавить возможность распределения перемещающегося персонала в зависимости от времени заезда/выезда с объекта и длительности вахты (желтым выделено - как это примерно должно выглядеть).
возможно описание сверху несколько сумбурно, попробую изложить просьбу проще..
на листе 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) за все время для каждого дня недели и построить график. Пытаюсь сделать это сводной табл, сводным графиком, но что-то не выходит.
ps. может еще подскажете, как на графике выстроить дни недели (буквенные обозначения) по порядку, вез использования цифр.
Файл-пример во вложении. В примере, в сводной табл. указаны просто общее кол-во прибывших, убывших с разбивкой по дням.