Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V4mp

    Код:
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Sub UserForm_Initialize()
    Dim hForm As Long
    hForm = FindWindow("ThunderDFrame", Caption)
    SetWindowLong hForm, -16, &H92CE6A80
    End Sub

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 18:52 03-02-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vlth
    Ага, переприменяем стили. Спс!
    ..
    Такс.. Пишет Form already displayed; can't show modally (Error 400) - это если свойство showmodal=true.
    Если ставить в false, то в панели задач не появляется иконки формы.
    Может, ошибка в константе &H92CE6A80 ??
    Или подскажи, где найти список констант стилей для vba, а то что-то на msdn не нахожу(

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 20:15 03-02-2010 | Исправлено: V4mp, 20:16 03-02-2010
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Такс.. Пишет Form already displayed; can't show modally (Error 400) - это если свойство showmodal=true.
    Если ставить в false, то в панели задач не появляется иконки формы  
    Вроде про немодальную форму речь шла выше???
    Иконки и не должно быть, но появляется возможность сворачивать-разворачивать окно формы, а также менять мышкой его размеры.

    Цитата:
    Или подскажи, где найти список констант стилей для vba
    Надо порыться по винтам: где-то был файлик. Но того, чего Вы хотите, там всё равно нет.
     
    Когда-то искал такую возможность сам, но не нашёл. Может быт Вы будете удачливее?

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 21:01 03-02-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Когда-то искал такую возможность сам, но не нашёл. Может быт Вы будете удачливее?

    так все работает как я хочу даже при выскакивании ошибки 400. Формочка сворачивается в панель задач отдельно по кнопке свернуть, все ок. Едниственное - это ошибка эта...  
    msdn пишет на ошибку -  

    Цитата:
    You tried to use Show, with the style argument set to 1 vbModal, on an already visible form.

    Т.е. как я понимаю, т.к. форма изначально инициализируется как модальная (чтобы в панели задач появился пункт), а потом накладывается стиль, где в константе &H92CE6A80 тоже "зашита" модальность - тут то ошибочка и вываливается....Попробуйте пожалуйста найти нужный файлик..
     
    Только заметил - ошибка стопорит дальнейшее выполнение кода (в частности UserForm_Activate), так что простое игнорирование ошибки не поможет...

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 21:24 03-02-2010 | Исправлено: V4mp, 21:27 03-02-2010
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. В новой книге создаю форму.
    2. Меняю свойство формы ShowModal на False
    3. Вставляю представленный код
    4. Жму кнопку "F5"
     
    Форма появляется на экране со всеми описанными возможностями. Ошибки 400 нет.
    Как она возникает?
     
    Добавлено:
    Кстати, код "выдран" из рабочего проекта с кучей наворотов, включая таймер(!). После отладки никогда никаких ошибок при работе с ним не возникало.

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 21:37 03-02-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ЕСТЬ!!! (свойство формы ShowModal на False)

    Код:
     
    ---модуль----
    Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, ByVal nIndex As Long, ByVal WindowStyles As Long) As Long
    Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As _
    Long, ByVal nCmdShow As Long) As Long

     
     
        Enum WindowStyles
            WS_OVERLAPPED = &H0
            WS_POPUP = &H80000000
            WS_CHILD = &H40000000
            WS_MINIMIZE = &H20000000
            WS_VISIBLE = &H10000000
            WS_DISABLED = &H8000000
            WS_CLIPSIBLINGS = &H4000000
            WS_CLIPCHILDREN = &H2000000
            WS_MAXIMIZE = &H1000000
            WS_BORDER = &H800000
            WS_DLGFRAME = &H400000
            WS_VSCROLL = &H200000
            WS_HSCROLL = &H100000
            WS_SYSMENU = &H80000
            WS_THICKFRAME = &H40000
            WS_GROUP = &H20000
            WS_TABSTOP = &H10000
            WS_MINIMIZEBOX = &H20000
            WS_MAXIMIZEBOX = &H10000
            WS_CAPTION = WS_BORDER Or WS_DLGFRAME
            WS_TILED = WS_OVERLAPPED
            WS_ICONIC = WS_MINIMIZE
            WS_SIZEBOX = WS_THICKFRAME
            WS_OVERLAPPEDWINDOW = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
            WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
            WS_POPUPWINDOW = WS_POPUP Or WS_BORDER Or WS_SYSMENU
            WS_CHILDWINDOW = WS_CHILD
        End Enum
    ----форма-----
    Private Sub UserForm_Initialize()
    Dim hForm As Long
    hForm = FindWindow("ThunderDFrame", Me.Caption)
    SetWindowLong hForm, -16, WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX + WS_OVERLAPPED + WS_VISIBLE
    ShowWindow hForm, 10
    End Sub
     

     
    Добавил выделенное - заработало. Зачеркнутое - это то, что приводит к ошибке (т.е. я этот атрибут меняю отдельной апи - функцией). Ошибка возникала сразу после окончания UserForm_Initialize, и UserForm_Activate не выполнялась, хотя потом нажатия на кнопки формы и т.д. исполнялись нормально.. Странно, а какой у вас эксэль? у меня 2007 без обновлений, может поэтому...
     
    Добавлено:

    Цитата:
    Форма появляется на экране со всеми описанными возможностями

    Проверьте мой код, возможности у вашего кода те же? Т.е. сворачивается именно в панель задач?
     
    Добавлено:

    Цитата:
    Ошибки 400 нет.  
    Как она возникает?

    Данный пункт

    Цитата:
    2. Меняю свойство формы ShowModal на False

    Измените на ShowModal на True

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 22:14 03-02-2010 | Исправлено: V4mp, 22:25 03-02-2010
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И я нашёл...
    Form_Style_1
    Form_Style_2
     
    Добавлено:

    Цитата:
    Странно, а какой у вас эксэль? у меня 2007 без обновлений, может поэтому...  
    Проект работал и в 2003 и в 2007 без обновления. Насчёт 2002 - не помню.
    У меня сейчас - 2003.  
     
    Добавлено:

    Цитата:
    Проверьте мой код, возможности у вашего кода те же?
    Всё то же самое, но невозможно изменить мышкой размеры формы.
     
    Уточню - у меня Excel 2003 SP3
     
    Добавлено:
    Вот ещё забыл: у меня VBA стал ругаться на вызовы API, объявленные как публичные.

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 22:26 03-02-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не знаю я уже... в панель задач то сворачивается (кнопка есть) , но попутно возле ПУСКА появляется мини окошко (заголовок формы с кнопками свернуть, развернуть и выход), когда окно свернуто.... КАК его убрать, я чего то не понимаю(

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 22:57 03-02-2010
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    но попутно возле ПУСКА появляется мини окошко (заголовок формы с кнопками свернуть, развернуть и выход), когда окно свернуто....  
    У меня только оно всегда и было - в панели задач никогда ничего не возникало (окно Excel у меня в проекте невидимо - на экране светится только форма).

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 23:02 03-02-2010 | Исправлено: vlth, 23:06 03-02-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не.... Вот скриншоты (у мну так работает, если использовать код, выложенный мной выше)
    Это при  несвернутой форме

    А это при свернутой -

     
    И все бы хорошо, но ерундовина возле пуска портит всю картину((
     
    В приведенном коде после его копирования удалите зачеркнутое + WS_VISIBLE. Может не удалили просто
     
    Добавлено:
    вроде нашел решение (форма нормально сворачивается в панель задач и рядом с пуском ничего нет)
     

    Код:
     
    ----код модуля----
    Option Explicit
     
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, ByVal nIndex As Long, ByVal WindowStyles As Long) As Long
    Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As _
    Long, ByVal nCmdShow As Long) As Long
     
     
        Enum WindowStyles
            WS_OVERLAPPED = &H0
            WS_POPUP = &H80000000
            WS_CHILD = &H40000000
            WS_MINIMIZE = &H20000000
            WS_VISIBLE = &H10000000
            WS_DISABLED = &H8000000
            WS_CLIPSIBLINGS = &H4000000
            WS_CLIPCHILDREN = &H2000000
            WS_MAXIMIZE = &H1000000
            WS_BORDER = &H800000
            WS_DLGFRAME = &H400000
            WS_VSCROLL = &H200000
            WS_HSCROLL = &H100000
            WS_SYSMENU = &H80000
            WS_THICKFRAME = &H40000
            WS_GROUP = &H20000
            WS_TABSTOP = &H10000
            WS_MINIMIZEBOX = &H20000
            WS_MAXIMIZEBOX = &H10000
            WS_CAPTION = WS_BORDER Or WS_DLGFRAME
            WS_TILED = WS_OVERLAPPED
            WS_ICONIC = WS_MINIMIZE
            WS_SIZEBOX = WS_THICKFRAME
            WS_OVERLAPPEDWINDOW = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
            WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
            WS_POPUPWINDOW = WS_POPUP Or WS_BORDER Or WS_SYSMENU
            WS_CHILDWINDOW = WS_CHILD
        End Enum
     
    Public Sub ssub()
    Dim hForm As Long
    hForm = FindWindow("ThunderDFrame", UserForm1.Caption)
    DoEvents
    SetWindowLong hForm, -16, WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX
    DoEvents
    ShowWindow hForm, 1
    DoEvents
    End Sub
     
    Sub qwe()
    Application.Visible = False
    Call UserForm1.UserForm_Initialize
    End Sub
     
    ----код формы ----
    Option Explicit
     
    Private Sub UserForm_Activate()
    MsgBox "UserForm_Activate"
    End Sub
     
    Public Sub UserForm_Initialize()
    Call ssub
    End Sub
     

     
    запускать соответственно макрос qwe
    vlth, протестируйте пожалуйста, а то может опять я туплю, однако у меня работает

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 23:40 03-02-2010 | Исправлено: V4mp, 23:43 03-02-2010
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Класс. Это то, чего мне лет пять назад не хватило терпения добиться. Осталось только иконку поменять с екселёвской на свою (где-то у меня лежит пример... вот где?)

     
    Добавлено:

    Цитата:
    В приведенном коде после его копирования удалите зачеркнутое + WS_VISIBLE. Может не удалили просто

     
    Не удалял: думал завтра поэкспериментировать

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 01:01 04-02-2010
    Oyger

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V4mp

    Цитата:
    Цитата:А что, при работе Формы(макроса) можно свернуть Excel???  
    Можно, если форма не модальная.  

     
    Пардон: а что такое не модальная форма?
     
    И еще вопрос не по теме: если вы так пытаетесь убрать Excel и оставить только форму, может имеет смысл написать все это в VB?

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 09:51 04-02-2010 | Исправлено: Oyger, 09:52 04-02-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    фишка в том, что FindWindow инициализирует форму, даже если она пока не запущена. поэтому можно сделать вообще просто -

    Код:
     
    ----код модуля----  
    Option Explicit  
     
    Private Declare ...
    ....
        ....End Enum  
       
    Sub qwe()  
    Dim hForm As Long  
    Application.Visible = False  
    hForm = FindWindow("ThunderDFrame", UserForm1.Caption)  
    SetWindowLong hForm, -16, WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX  
    ShowWindow hForm, 1  
    End Sub  
     
    ----код формы ----  
    Option Explicit  
     
    Private Sub UserForm_Activate()  
    MsgBox "UserForm_Activate"  
    End Sub  
     
    Private Sub UserForm_Initialize()  
    MsgBox "UserForm_Initialize"  
    End Sub
     

    Вот и все) Чет вчера вечером я до этого не допер
     
    Добавлено:
    Oyger

    Цитата:
    Пардон: а что такое не модальная форма?

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

    Цитата:
     может имеет смысл написать все это в VB

    уже смысла нет)

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 09:57 04-02-2010 | Исправлено: V4mp, 09:58 04-02-2010
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Осталось только иконку поменять с екселёвской на свою...  

     

    Код:
    Option Explicit
     
    Declare Function GetActiveWindow32 Lib "USER32" Alias _
                                       "GetActiveWindow" () As Integer
     
    Declare Function SendMessage32 Lib "USER32" Alias _
                                   "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
                                                   ByVal wParam As Long, ByVal lParam As Long) As Long
     
    Declare Function ExtractIcon32 Lib "SHELL32.DLL" Alias _
                                   "ExtractIconA" (ByVal hInst As Long, _
                                                   ByVal lpszExeFileName As String, _
                                                   ByVal nIconIndex As Long) As Long
                                                   
    'modification of code from Excel Experts E-Letter Archives.
    'Original code By Jim Rech can be found by following this
    'link > http://www.j-walk.com/ss/excel/eee/eee020.txt
     
    Sub ChangeApplicationIcon()
     
          Dim Icon&
           
          '*****Change Icon To Suit*******
          Const NewIcon$ = "notepad.exe"
          '*****************************
           
          Icon = ExtractIcon32(0, NewIcon, 0)
          SendMessage32 GetActiveWindow32(), &H80, 1, Icon      '< 1 = big Icon
          SendMessage32 GetActiveWindow32(), &H80, 0, Icon      '< 0 = small Icon
     
    End Sub

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 10:46 04-02-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vlth
     
    За иконку спс!
    GetActiveWindow32 получает hwnd активного окна. Может возникнуть гипотетическая ситуация, когда окно, в котором будем менять иконку, не будет активным. Думаю, в  SendMessage32 лучше явно указывать hwnd формы, полученный нами ранее.
     
    Кстати - уже добьем код окончательно, формочка то запускается изначально по координатам 0,0. Чтобы запускалась по центру -
    добавляем объявление-

    Код:
     
    Private Declare Function GetSystemMetrics _
       Lib "user32" (ByVal nIndex As Long) As Long
     

    и макросик qwe преобразуем в

    Код:
     
    Sub qwe()
    Dim hForm As Long
    Application.Visible = True
    hForm = FindWindow("ThunderDFrame", UserForm1.Caption)
    SetWindowLong hForm, -16, WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX + WS_MAXIMIZEBOX + WS_SIZEBOX
    UserForm1.Left = ((GetSystemMetrics(16) - UserForm1.Width * 1.333) / 2) * 0.75
    UserForm1.Top = ((GetSystemMetrics(17) - UserForm1.Height * 1.333) / 2) * 0.75
    ShowWindow hForm, 1
    End Sub
     

     
    Ну, получается полноценное приложение, и не поймешь сразу, что в эксэле написано
     
    И соответственно вопрос - как сделать в форме обыкновенное меню сверху? (ну там, где обычно выпадающие пункты файл, редактирование, справка и т.д.)
     
    Добавлено:
    сам спросил - сам отвечаю
    http://www.xcelfiles.com/API_Userform_MenuMaker.html

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 11:13 05-02-2010 | Исправлено: V4mp, 11:16 05-02-2010
    timsyk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день,
    Обращаюсь с просьбой помочь. Может кто подскажет - проблема вот в чем:Каждый день получаю по почте экселевский файлик с номерами заказов (они разбиты на два диапазона по типам) и каждый день надо копировать значения этих диапазонов в один столбец. Ну например есть:
    диап.1 = G2:G25; диап.2= E27:E39 надо вставить в C2:С25 и С27:С39, для меня трудность, сделать макрос, заключается в том , что кол-во строк в диапазонах каждый день разная.
    Может кто поможет новичку, буду очень благодарен.

    Всего записей: 3 | Зарегистр. 27-10-2009 | Отправлено: 23:17 07-02-2010
    vlth

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    timsyk
    Цитата:
    Может кто поможет новичку, буду очень благодарен.

    Кнопка F1, свойства диапазона End и CurrentRegion, например.
     
    Учитесь пользоваться в VBA помощью и отладчиком (пошаговое выполнение макросов - кнопка F8)
     
    В конечном итоге Вам надо создать конструкцию:
    ЧтоКопируем Copy КудаКопируем

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 11:47 08-02-2010
    ZlydenGL



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    ЧтоКопируем Copy КудаКопируем  

    ИМХО не стоит сразу человека подсаживать на порочную практику использования буфера обмена там, где и без нее обойтись можно Пусть лучше сразу привыкает писать такие макросы, чтобы у юзверей потом не было гневных воплей "я скопировала одно, а из-за ВАШЕЙ программки вставилось другое!"

    ----------
    Переработал: втыкая аккумулятор в шуруповерт пытаешься передёрнуть затвор

    Всего записей: 4296 | Зарегистр. 22-06-2002 | Отправлено: 11:50 08-02-2010
    Alexikit

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    timsyk
    не понятно, что у Вас до и после диапазона, если Вы можете програмно идентифицировать начало и конец диапазона, то начинать копировать надо после выполнения условия начало, и соответственно до условия конца данных.

    Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 13:23 08-02-2010
    timsyk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Первый диапазон: текст " Тип заказа 1" (G1)далее номера заказов, после пустые строки
    Второй: текст "Дата поставки"(Е1)далее пустые строки до Е25, далее текст "Тип заказа 2", номера заказов , после опять тишина.
    Как я уже сказал, проблема, что диапазоны каждый день разные по размеру, бывает когда второй вообще отсутствует. Тупо копировать надоело. Ладно буду сам разбираться. Спасибо за помощь. ( Правда спасибо, безо всякого подтекста).

    Всего записей: 3 | Зарегистр. 27-10-2009 | Отправлено: 19:08 08-02-2010
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru