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

Страницы: 1
DoEvents ... Loop не даёт открывать другие книги Эксель в процессе работы.
 
DoEvents Loop не даёт открывать другие книги Эксель в процессе работы, в то время, как мне это необходимо.
Не могли бы Вы мне помочь, как можно открывать Эксель Книги не прерывая цикла?
Код
Private Sub Label111_Click()

While DoEvents()    
    Label111 = Format(Now, "h:mm:ss AM/PM") 'Код, работающий в процессе цикла ожидания    
Loop

End Sub
Немодальная UserForm без шапки, с прозрачностью и возможностью перетаскивания
 
Вот частичное решение задачи. Форма прозрачная, без заголовка, отображается поверх всех окон, но не могу привинтить сюда перемещение за тело.
Код
Private Declare PtrSafe Function FindWindow _
       Lib "user32.dll" Alias "FindWindowA" ( _
       ByVal lpClassName As String, _
       ByVal lpWindowName As String) As Long
       
Private Declare PtrSafe Function GetWindowLong _
       Lib "user32.dll" Alias "GetWindowLongA" ( _
       ByVal hWnd As Long, _
       ByVal nIndex As Long) As Long
       
Private Declare PtrSafe Function SetWindowLong _
       Lib "user32.dll" Alias "SetWindowLongA" ( _
       ByVal hWnd As Long, _
       ByVal nIndex As Long, _
       ByVal dwNewLong As Long) As Long
       
Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _
       ByVal hWnd As Long) As Long
       
       Private Declare PtrSafe Function SetLayeredWindowAttributes _
        Lib "user32.dll" ( _
        ByVal hWnd As Long, _
        ByVal crKey As Long, _
        ByVal bAlpha As Long, _
        ByVal dwFlags As Long) As Long
       
       Private Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As LongPtr, _
     ByVal hWndInsertAfter As LongPtr, _
     ByVal X As Long, ByVal Y As Long, _
     ByVal cx As Long, ByVal cy As Long, _
     ByVal wFlags As Long) As Long
Private Const HWND_NOTOPMOST = -2
Private Const HWND_TOPMOST = -1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
 

Private Sub UserForm_Initialize()
   Dim ihWnd As Long, iStyle As Long
 
   ihWnd = FindWindow(vbNullString, Me.Caption)
   iStyle = GetWindowLong(ihWnd, -16&)
   SetWindowLong ihWnd, -16&, iStyle And Not &HC00000
   DrawMenuBar ihWnd
   
   Dim hWnd As LongPtr
  hWnd = FindWindow(vbNullString, Me.Caption)
      Call SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, WP_NOMOVE Or SWP_NOSIZE)
'*******Форма в нормальное положение**************
'       Call SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
'**********************************************

UserForm1.Left = 875
 UserForm1.Top = 600
 
 SetWindowLong ihWnd, -20&, iStyle Or 524288
    SetLayeredWindowAttributes ihWnd, 0&, 100&, 2&
End Sub
Нужно эти 2 кода скрестить (нижний позволяет таскать за тело форму без шапки).
Прошу помочь.
Код
Option Explicit
    'константы для функций API
    Private Const GWL_STYLE As Long = -16& 'для установки нового вида окна
    Private Const GWL_EXSTYLE = -20& 'для расширенного стиля окна
    Private Const WS_CAPTION As Long = &HC00000 'определяет заголовок
    Private Const WS_BORDER As Long = &H800000 'определяет рамку формы
    
    Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const HTCAPTION = 2
    
    'Функции API, применяемые для поиска окна и изменения его стиля

    Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
    
    
    Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare PtrSafe Sub ReleaseCapture Lib "user32" ()
    
    Dim ihWnd As Long

    Private Declare PtrSafe Function SetWindowPos Lib "user32.dll" ( _
        ByVal hWnd As Long, _
        ByVal hWndInsertAfter As Long, _
        ByVal X As Long, _
        ByVal Y As Long, _
        ByVal cx As Long, _
        ByVal cy As Long, _
        ByVal wFlags As Long) As Long

Private Sub UserForm_Initialize()
    Dim hStyle
    'ищем окно формы среди всех открытых окон
    If Val(Application.Version) < 9 Then
        ihWnd = FindWindow("ThunderXFrame", Me.Caption) 'для Excel 97
    Else
        ihWnd = FindWindow("ThunderDFrame", Me.Caption) 'для Excel 2000 и выше
    End If
    'получаем информацию о найденном окне(стили и т.д.)
    hStyle = GetWindowLong(ihWnd, GWL_STYLE)
    'назначаем переменной новый стиль для окна формы
    hStyle = hStyle And Not WS_CAPTION And Not WS_BORDER
    'изменяем вид окна: убираем меню(заголовок) и рамку
    SetWindowLong ihWnd, GWL_STYLE, hStyle
    SetWindowLong ihWnd, GWL_EXSTYLE, 0
    'перерисовываем форму, точнее строку меню(заголовка)
    DrawMenuBar ihWnd
    'меняем размер формы, т.к. сделали смещение элементов формы вверх на высоту заголовка
    Me.Height = Me.Height + GWL_EXSTYLE
End Sub

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        ReleaseCapture
        SendMessage ihWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
    End If
End Sub

В файлике в первой Юзерформ первый код, во второй - второй.  
Изменено: Arrio - 10.12.2019 17:51:23
Событие "если выбран любой пункт в срезе" таблицы автоматически запускать макрос., Не могу решить задачу запуска макроса по клику в срез.
 
- Дано: Есть умная таблица к которой прикреплён срез. И есть макрос скрытия пустых столбцов.
- Задача: запускать макрос скрытия пустых столбцов (уже написан) после клика на срез.
- Проблема: если прикрепить макрос к срезу то элементы среза нажать невозможно. Порыскав по интернету я понял что такого события не существует для добавления в модуль листа.

Прошу помочь выкрутиться из этого положения.

- Альтернативное решение: запускать макрос скрывания/открывания пустых/заполненных столбцов каждые пол секунды и получаем то, что я прошу. Но, это откровенно говоря, огромный костыль. Я его реализовал, но это бесит по причине всплывающих часиков и маленькой задержки в обновлении инфы.

- Доп. инфа: на странице только 1 срез и только они осуществляет фильтрацию.

Просьба помочь. Спасибо.
Изменено: Arrio - 30.05.2019 15:49:00
Запуск макроса поворотом колеса мыши вниз и вверх
 
Уважаемые знатоки, поискав информацию по поводу запуска макроса поворотом колеса мыши я рабочего ответа не нашёл. Просьба помочь мне с этим. Как запускать макросы поворотом колеса вниз (первый макрос) и вверх (второй макрос)?
Изменено: Arrio - 30.05.2019 08:23:58
Суммировать числа, записанные с буквой
 
Здравствуйте, знатоки. Не могу найти ответ, как сначала применить формулу к заданному диапазону, а потом просуммировать значания , пропущенные через формулу БЕЗ создания дополнительных столбцов.

А так же, как это записать в пользовательскую формулу, если есть такая возможность.

Так же классно бы было получить более-менее универсальный приём, через счётчики, для суммирования значений выбранного диапазона  через пользовательской функцию в который потом можно будет подставить любую формулу для предварительного форматирования перед суммированием? А я уже туда поставлю нужную формулу.
Спасибо.

К примеру диапазон чисел 1а,2а,3а,4а,5а. Записанные в столбик. Что бы сначала она удалила букву "а", а потом просумировала значения. И все одной формулой без доп. столбов, не через СТРЛ Ф.
Изменено: ArRiO - 05.05.2019 20:33:13
Автоматизация вставки текста из Эксель в поле произвольной программы, Работаю в чате, помогите
 
Работаю в чате. Наработал себе очень много шаблонов в Эксель и всё что мне нужно, это не проходить путь Клик Эксель - Клик инфу ( всегда одна ячейка) - Копировать (CTRL C) - Клик программу - клик в поле программы - Вставить (CTRL V). Я хочу что бы было так: Клик в 1 ячейку Эксель - Клик макрос (либо Энтер) - И информация автоматически залетит в станет поле моей программы и переключиться на неё. Уважаемые, если знаете как решить эту задачу, подскажите, пожалуйста.
Изменено: ArRiO - 05.04.2019 14:59:50
Страницы: 1
Наверх