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

Страницы: 1 2 3 4 5 След.
Суммы для одинаковых дат из разных столбцов
 
Упс... обнаружил ашыпочку логике вычислений. Не всегда выдавало правильный результат. Вообще, конечно, организация данных ни к чёрту :-) Так никто не делает! Поэтому пришлось повозиться...  
Вот исправленный вариант
Суммы для одинаковых дат из разных столбцов
 
ну, что-то типа такого...
Просуммировать с первой строки по строку над
 
Потому, что нужно делать так:  
=МАКС(ЕСЛИ(C1:C22=C24;B1:B22))
ПОЛУЧИТЬ.ЯЧЕЙКУ (или другая из набора макрофункций) для получения номера активной строки
 
vikttur и DV, тогда уже так:  
=ИНДЕКС(F:F;ЯЧЕЙКА("строка")) ну и желательно добавить &""  
 
Вот мой вариант:  
создаётся имя "акт.яч", которое равно =АКТИВНАЯ.ЯЧЕЙКА()    
В B3:D3 вводится формула:  
=ИНДЕКС(1:65536;СТРОКА(акт.яч);СТОЛБЕЦ(F:F))&""  
Отличия в том, что вариант с ЯЧЕЙКА("строка") летучий для всей книги, а конструкция ИНДЕКС(1:65536;....) делает формулу летучей только для выделенного диапазона (в данном случае для всего листа)
Формулами сделать из большой таблицы маленькую (альтернатива сводной)
 
Ну в таком варианте да, это ясно.    
И если использовать =A9&B9&C9, то медленно не будет. На глаз можно и не ощутить разницы даже для большого кол-ва строк. Другое дело, что для моего варианта необходима сортировка, чтобы не было подобных перемешиваний.
Формулами сделать из большой таблицы маленькую (альтернатива сводной)
 
А так будет в 10-ки раз быстрее и формула универсальаня.
Макрос Эксель 2007 - дата время редактирования любой из ячеек левее
 
Да, Казанский, до сих пор за Спектрумом тоскую! :-))  
Вот, вроде сделал. Есть привязка к заголовку. Теперь можно добавлять/удалять строки/столбцы. Работает только с константами.
Проблема с захватом оконной процедуры Экселя.
 
А по поводу скрытой копии экселя - это вариант :-))
Проблема с захватом оконной процедуры Экселя.
 
Кстати, слэн, в твоём варианте, если включить режим конструктора, а затем перейти в другое приложение, то хук не снимается.    
 
А снимать хук, действительно, лучше всего в самом хуке, типа того, как ты сказал. Только нужно учесть обнуление переменных при переходе в режим конструктора.
Проблема с захватом оконной процедуры Экселя.
 
упс, обнаружил, что диапазон [Rng1]= Лист1!$D$9, а должен быть равен =Лист1!$D$9:$D$10. Поэтому, если щёлкнуть на D10, то активизировать ячейку получается, а на D9 - нет.
Проблема с захватом оконной процедуры Экселя.
 
Придумал ещё один метод, правда не такой элегантный, как хотелось бы. Принцип такой: при деактивации экселя (проверяется всё так по таймеру, а не в процедуре хука на мышь, поскольку переключиться в другое приложение можно и клавиатурой) останавливается таймер. При этом на всю видимую область окна книги натягивается Label0. У неё прописано событие MouseMove. Как только мышь наедет на эксель, событие срабатывает и можно опять следить за тем, когда же станет активным :))) Тупо, конечно, но рабоает :-))  
Правда, пришлось повозиться... Нужно было учесть варианты, когда открыта не одна книга и когда осущ. переход в режим конструктора. Событие Selection_Change тоже пришлось задействовать. Выкладываю, что у меня получилось.  
 
Хоть и много писанины, но зато можно значительно преукрасить интерфейс, снабдив его функциями, которые до этого казались нереальными для экселя (вспыхивающие метки, появляющиеся под мышкой текстбоксы, всплывающие подсказки и т.п.)  
 
В коде имя Rng1 используется по назначениею только в процедуре хука. В остальных местах оно служит только для того, чтобы получить Лист1.  
 
Вцелом, всё равно вопрос остаётся открытым.
Проблема с захватом оконной процедуры Экселя.
 
Пробовал привязаться к таймеру и, скажем, 3 раз в секунду делать:    
 
If GetActiveWindow = Application.hwnd Then  
где GetActiveWindow - функция API, возвращающая хендл текущего активного приложения.  
Всё работает, хук на мышь снимается, когда эксель деактивируется и ставится, когда активируется. Но становится жутко неудобно писать программу на ВБА, поскольку срабатывает процедура, вызываемая по таймеру и тут же исчезают свойства объекта, открываемые символом ".".  
 
У меня просьба к тем, кто общается ещё и на других форумах, в т.ч. и англоязычных, где имеются хорошие специалисты, задать мой вопрос и приложить файл-пример. Может там что подскажут...
Проблема с захватом оконной процедуры Экселя.
 
Выкладываю красочный файл-пример, чтобы всё-таки заинтересовать подумать над тем, как снять хук при деактивации книги экселя.  
Если хук не снимать, то при переходе в редактор ВБА можно увидеть, как неприятно мерцает заголовок ВБА при перемещении мыши и остаётся заметная загрузка процессора (если смотреть диспетчером задач).
Проблема с захватом оконной процедуры Экселя.
 
Я слежу за мышей, когда она над экселем (поставил hook на WH_MOUSE_LL). Когда стоит такой хук, написанный на ВБА, это требует немалых ресурсов, пусть даже он самый простейший. Следить за мышей мне нужно только над одним листом рабочей книги, поэтому, ресурсы можно сэкономить. По событиям Worksheet_Activate/Worksheet_Deactivate я ставлю/снимаю хук над нужным мне листом.  
 
ЗАДАЧА: Ставить/снимать хук ещё и при активации/деактивации Экселя.  
Я думал делать это путём отлавливания сообщения WM_ACTIVATE для родительского окна приложения Экселя. Вот это у меня и не получается, а именно - получить адрес оконной процедуры Экселя.  
 
Есть альтернативное решение: поставить WH_CBT хук на поток. Тогда можно отлавливать код HCBT_ACTIVATE и по нему ставить/снимать хук на мышь. Но тут выплыл такой момент: когда мышь находится над экселем и он активен, то забираются все ресурсы процессора! Поэтому такой вариант тоже не годится!  
 
Вопрос: как поймать событие активации экселя ? (любым способом)  
Workbook_Activate не подходит, поскольку когда имеется только одна книга, оно не возникает.
Проблема с захватом оконной процедуры Экселя.
 
Не получается переопределить оконную процедуру Экселя.  
Public Const GWL_WNDPROC = -4  
 
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Long) As Long  
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long  
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long  
 
Sub SetNewWindProc()  
Dim hWnd As Long  
hWnd = Application.hWnd  
OldWindowProc = GetWindowLong(hWnd, GWL_WNDPROC)  
OldWindowProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)  
End Sub  
 
Public Function WindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long  
'Пока ничего не делаем  
WindowProc = CallWindowProc(NewWindowProc, hWnd, Msg, wParam, lParam)  
End Function  
 
OldWindowProc  в обоих случаях возвращает отрицательное значение и, как следствие, после вызова SetWindowLong Excel погибает. Для задания/получения других свойств окна, не GWL_WNDPROC, всё работает нормально.
Очень медленно обновляются связи с другим файлом в формате Excel 2007/2010
 
Данные/Импорт внешних данных/Создать запрос...  
База данных: Файлы Excel*  
Ну а там уже разберётесь... если чё - спрашивайте.Хотя в поиске по форуму найдёте много примеров.
Очень медленно обновляются связи с другим файлом в формате Excel 2007/2010
 
Да... Как всё сложно :-) Нюансов - масса :-) Я уже когда-то говорил, что работа со сложной задачей в экселе зачастую превращается в борьбу с глюками экселя :-)
Очень медленно обновляются связи с другим файлом в формате Excel 2007/2010
 
ZVI, а почему тогда, как говорит автор, проблема решается, если:  
......  
2. Столбцы первого файла соответствуют столбцам ссылок (то есть если я из столбца "С" ссылаюсь на столбец "С" второго файла) или расстояние между нахождением столбца ссылки и ссылкой не превышает одного столбца ??
Какую формулу использовать
 
Неужели никто не заметил, что впереди не хватает символа одинарной кавычки? :-))
Очень медленно обновляются связи с другим файлом в формате Excel 2007/2010
 
Получите данные через SQL-запрос к книге Excel.
Скорость работы пользовательских функций, возвращающих несколько значений
 
Что такое "VSTO" и что даст его использование ?
Скорость работы пользовательских функций, возвращающих несколько значений
 
Я так полагаю, пример функции приведён чисто условный. Оптимизировать саму функцию смысла нет. Можно вообще сделать так:  
 
Function SpeedTest(inp1 As Double, inp2 As Double, inp3 As Double)  
 SpeedTest = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  
End Function  
 
и разница в скорости будет практически не заметна.  
Тут уже дело в скорости вызова самой пользовательской функуии, что для экселя оставляет желать лучшего. Если UDF вводится в большой диапазон ячеек - сразу появляются "тормоза", какая бы простая она ни была. Скорость вызова UDF можно приравнять к скорости перебора по ячейкам листа. При чём, даже если ей не передавать ни один параметр:  
Function SpeedTest()  
 SpeedTest = 1  
End Function  
(Естественно, вызывать её нужно тоже без пераметров).  
 
Это и есть та ложка дёгтя в бочке мёда! Такая полезная вещь, как пользовательские функции, иногда неприемлемы из-за своей скорости вызова.    
Мой вопрос заключается в том, можно ли вызвать внешнюю функцию, находящуюся в dll, не заходя в VBA, а сразу обратиться к сторонней библиотеке ? Может быть это можно сделать как-то через Excel Macro 4 ?
Способ быстрого заполнения столбцов.
 
Если работаете не в новом документе, а в котором уже имеются данные, то для подобных целей очень удобно использовать сочетания клавиш:  
Ctrl+End, Ctrl+стрелки курсора - для перемещения по границам данных  
Ctrl+Shift+стрелки курсора - для выделения диапазонов по границам данных  
Shift+стрелки курсора - для того, чтобы подправить выделенную область данных  
Т.о., вначале можно скопировать ячейку, затем быстро выделить требуемый диапазон, затем вставить.
Найти площадь криволинейной трапеции f(x)
 
{quote}{login=KukLP}Хорошая шутка.{/post}{/quote}  
По ходу да... МСН более прав :-) Время идёт... Школа всё дальше..... :-))
Найти площадь криволинейной трапеции f(x)
 
Я не уточнил. В моём случае F(x) - это не первообразная, а именно та самая функция f(x).
Найти площадь криволинейной трапеции f(x)
 
Const c = 0.0001  'задаёт точность вычисления площади  
 
Function SquareFx(a#, b#)  
Dim S#, x#  
For x = a To b Step c  
 S = S + F(x)  
Next  
End Function
Сортировка именованного списка и связанной таблицы
 
Можно так...
Прочитать поле, содержащее и текст и данные через ODBC
 
Ясно. Не нравится мне всё это :-)    
А если я хочу затянуть именно текст? Как мне это сделать ? Похоже, что никак :-(
Прочитать поле, содержащее и текст и данные через ODBC
 
И что ? Никак нельзя вытащить и то и другое ?
Прочитать поле, содержащее и текст и данные через ODBC
 
Имеется книга с данными. Какое-то поле содержит и текст и числа. При подключении к этой таблице через ODBC с поля читаются только числа. Как можно прочитать всё, не внося никаких изменений в книгу 2 ?
Страницы: 1 2 3 4 5 След.
Наверх