W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
1 |
|
10.02.2016, 10:04. Показов 3892. Ответов 19
Вывожу из Access данные для отчетов в шаблон Excel, заполняю ячейки сохраняю.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
10.02.2016, 10:04 |
19 |
alvk 7267 / 4469 / 288 Регистрация: 12.08.2011 Сообщений: 13,512 |
||||
10.02.2016, 10:10 |
2 |
|||
Может забыли
Если нет, то может у вас старая версия 2010-го Экселя? Что-то такое давно было тоже.
0 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 11:31 [ТС] |
3 |
Visible это вообще его видимость/невидимость, а мне типа модальность нужна или как ее там..
0 |
547 / 274 / 50 Регистрация: 03.04.2015 Сообщений: 926 |
|
10.02.2016, 11:39 |
4 |
Обычно при создании экземпляра Excel и выполнения вышеуказанной команды он как раз и оказывается верхним окном. Видимо это и правда глюк. А если окно свернуть и развернуть?
0 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 12:04 [ТС] |
5 |
свернуть и развернуть Программно? Как?
0 |
corbis 547 / 274 / 50 Регистрация: 03.04.2015 Сообщений: 926 |
||||||||
10.02.2016, 12:26 |
6 |
|||||||
Применение:
Вместо Me.Caption нужно будет поставить заголовок окна Excel.
1 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 13:28 [ТС] |
7 |
заголовок окна Excel. а «Microsoft Excel» хватит или надо все переписать с заголовка? Заголовки разные получаются:
0 |
547 / 274 / 50 Регистрация: 03.04.2015 Сообщений: 926 |
|
10.02.2016, 13:53 |
8 |
Да, именно разные. И нужно правильный подсунуть. Но это же не проблема. Если вы создаете экземпляр, так и заголовок можете узнать без проблем.
0 |
kavasaka W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
||||
10.02.2016, 14:13 [ТС] |
9 |
|||
вот так создаю и открываю. А как имя узнать?
0 |
texnik-san шапоклякистка 8-го дня 3674 / 2234 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
||||||||
10.02.2016, 14:19 |
10 |
|||||||
Вместо
А то что-то вы мудрите. Узнавать заголовок приложения, чтобы получить идентификатор окна…
1 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 14:26 [ТС] |
11 |
1 только xLObj в той процедуре еще нет. Его что Public сделать?
0 |
547 / 274 / 50 Регистрация: 03.04.2015 Сообщений: 926 |
|
10.02.2016, 14:29 |
12 |
Это общая функция. Не для этой конкретной задачи написанная. И так правильнее будет, да.
0 |
texnik-san шапоклякистка 8-го дня 3674 / 2234 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
||||||||
10.02.2016, 14:39 |
13 |
|||||||
Сообщение было отмечено alvk как решение Решение
только xLObj в той процедуре еще нет. Его что Public сделать? Да хоть входным параметром передайте. Добавлено через 6 минут
А прямо в свой код, в том месте, где вам уже нужно, чтобы окно стало «всплывающим» — это:
1 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 14:57 [ТС] |
14 |
Не работает — ексел все равно сзади. xLObj.Hwnd — это какой-то 7 значный код получается, а не заголовок окна. это еще для первого варианта
0 |
шапоклякистка 8-го дня 3674 / 2234 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
|
10.02.2016, 15:06 |
15 |
xLObj.Hwnd — это какой-то 7 значный код получается, а не заголовок окна. Заголовок окна и не нужен, мы проскочили этот шаг и сразу получаем то, для чего заголовок был нужен (идентификатор окна). Но этот вариант все равно отставляем и пробуем сразу второй.
0 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 15:13 [ТС] |
16 |
Сори. у вас там что-то пропущено в коде.
А прямо в свой код, в том месте, где вам уже нужно на эту строку ругается и на функцию SetWindowPos и на все параметры.
0 |
Модератор 11341 / 4660 / 748 Регистрация: 07.08.2010 Сообщений: 13,496 Записей в блоге: 4 |
|
10.02.2016, 15:18 |
17 |
попробуйте —формирование ворд документа из екселя и открытие впереди екселя
0 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 15:30 [ТС] |
18 |
попробуйте —формирование ворд документа из екселя и открытие впереди екселя зачем мне Ворд из ексцеля, если у меня прога В Акцесе, которая забивает отчеты в ексел???? я даже распаковал и открыл. Там даже макросов нет. Вы прикалываетесь?)))
Но этот вариант все равно отставляем и пробуем сразу второй. а в чем разница в этих вариантах? SetWindowPos думаю нельзя ставить в любом месте только в модуле (а это есть 1 вариант!) и Public Sub туда же.. в итоге полностью 1 вариант (который все равно не работает!) они все прикалываются??
0 |
шапоклякистка 8-го дня 3674 / 2234 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
|
10.02.2016, 15:33 |
19 |
на эту строку ругается и на функцию SetWindowPos и на все параметры. Потому что то, что я написала «в ваш модуль добавляете это» должно быть добавлено в ТОТ ЖЕ модуль, где и ваша функция, причем в самом верху модуля, сразу после строк Оption.
Сори. у вас там что-то пропущено в коде. Ничего не пропущего и ничего не должно быть. Добавлено через 1 минуту
думаю Это лишнее ))))
1 |
W 115 / 115 / 33 Регистрация: 16.04.2013 Сообщений: 748 |
|
10.02.2016, 15:46 [ТС] |
20 |
Просто когда все барахло в модуле, а в формах только вызов функции — как то привычнее Но главное что заработало в 10ке СПАСИБО!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
10.02.2016, 15:46 |
20 |
День добрый! Есть книга в которой выполняется макрос. По результатам макроса должна открываться другая книга. Книга открывается, но только на заднем плане. Подскажите плиз команду, которая открывает книгу по верх текущей. |
|
что значит открывается? командой open? |
|
{quote}{login=слэн}{date=18.03.2008 01:08}{thema=}{post}что значит открывается? командой open? |
|
последнее заменить на |
|
JK Гость |
#5 19.03.2008 09:16:25 {quote}{login=AMC}{date=18.03.2008 10:20}{thema=}{post}последнее заменить на AMC, спасибо! |
I am trying to bring and Excel window to the front of all applications running regardless.
Current code,
Private Declare Function SetForegroundWindow _
Lib "user32" _
(ByVal hWnd As Long) As Long
Public Sub Bring_to_front()
SetForegroundWindow wb.Application.hWnd
End Sub
Sub Test()
Set wb = Workbooks("MyWorkBook.xlxs")
call Bring_to_front
End Sub
At the moment nothing happens.
asked Dec 27, 2015 at 15:03
0
You don’t need an API for this, you can use something like:
Sub BringXLToFront()
AppActivate Application.Caption
End Sub
The AppActivate()
method in VBA takes a string argument, and it will activate (i.e. bring it to the front) any window that contains that exact string.
More specific to your question though — you need to understand how APIs work in VBA a bit more — if you’re using a x64 system then you need to use conditional compilation and declare the API function as pointer-safe by using the PtrSafe
keyword and the LongPtr
data type:
#If Win64 Then
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As LongPtr) As LongPtr
#Else
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long
#End If
answered Dec 27, 2015 at 15:15
SierraOscarSierraOscar
17.5k6 gold badges41 silver badges68 bronze badges
Found the answer to what I as trying to do after a bit more research.
This will bring the worksheet you specify to the front.
Public Declare Function SetForegroundWindow _
Lib "user32" (ByVal hwnd As Long) As Long
Public Sub Bring_to_front()
Dim setFocus As Long
ThisWorkbook.Worksheets("Sheet1").Activate
setfocus = SetForegroundWindow(Application.hwnd)
End Sub
answered Dec 28, 2015 at 11:37
- Remove From My Forums
-
Вопрос
-
Доброе утро друзья.
В Excel пытаюсь переместить Textbox на передний план перед ListBox.Все
кнопки перетыкал, но переместить Textbox на передний план не могу. Подскажите куда ещё надо нажать?
Ответы
-
Данный метод не подходит. Вопрос решился помещением TexTbox в Frame. После этого применяю Zorder и всё работает прекрасно.
Все ответы
-
Какая разница в том, как они расположены в дизайнере форм? Или они не перемещаются из кода?
-
вот так можно управлять ими в коде
Dim mFlag As Boolean
Private Sub UserForm_Click() mFlag = Not mFlag If mFlag = True Then Me.TextBox1.ZOrder msoBringToFront Me.ListBox1.ZOrder msoSendToBack Else Me.TextBox1.ZOrder msoSendToBack Me.ListBox1.ZOrder msoBringToFront End If Me.TextBox1.Visible = mFlag Me.ListBox1.Visible = Not mFlag End Sub Private Sub UserForm_Initialize() mFlag = True Me.TextBox1.Visible = mFlag Me.ListBox1.Visible = Not mFlag Me.TextBox1.ZOrder msoBringToFront Me.ListBox1.ZOrder msoSendToBack End Sub
-
Изменено
SergejS
7 октября 2017 г. 9:40
-
Изменено
-
Данный метод не подходит. Вопрос решился помещением TexTbox в Frame. После этого применяю Zorder и всё работает прекрасно.
-
Вы только TextBox во Frame
или ListBox тоже? -
Только Textbox поместил в Frame
-
Не совсем понимаю смысл этой операции, формы в VBA это не WPF, но хозяин — барин!
-
Вот тут я внизу отписался что именно хотел сделать
Ссылка
-
А что помешало использовать ComboBox? У него есть все мозможности, как для ввода текста, так и отображения в списке, при этом он такой же компактыный как и TextBox?
-
А какая разница чего перемещать на передний план? TextBox или Combobox? TextBox я считаю более правильно подходит.
-
а зачем перемещать? Combobox реализует в себе как TextBox, так ListBox и перемещать ничего не надо! И в том
коде, который я выклыдвал, все и так нормально перемещается при использовании TextBox и ListBox без использования
Frame. -
Как он реализует Listbox? Он реализует выпадающий список, или я что-то не знаю?
-
там есть стиль, когда она расскрытый, как ListBox
-
А Вы подскажите как этот стиль сделать?
-
возможно что ComboBox из VBA поддерживает не все настройки нормального Combobox,
что то я не могу найти, как сделать его расскрытм -
а зачем он должен быть раскрытым, там есть возможность, начинаешь воодить текст, он показывает элементы которые подходят для введенной пользователем информации
-
А это уже другая функция.
-
я мало работаю с VBA, а в нем свойства по другому называются, чем у обычного эл. управления
-
Да на VBA приходится поломать голову. Ту же прокрутку в Listbox на колёсико до сих пор адекватно никто придумать не может.
-
так в VBA элементы управления старые и они не изменялись с выходом VisualBasic 6 или даже 5 версии
-
что мешает использовать обычный VB.Net c Excel? я имено так и работаю.
-
Вы имеете ввиду написать на VB дополнение надстройку к Excel или что-то другое?
-
Я не знаю для каких целей вы используете Excel, у меня есть Excel файлы где обрабатываются большие объемы данных, но программа написана на VB.Net, стартуется exe файл, читаются данные из БД или из других файлов, которые вставляются
в Excel, выполняются какие-то вычисления и затем Excel, используется для представления диограм или печати предопределенных форм. -
У меня в Excel написана программа для расчётов и предоставления уже отчётов и тех же диаграмм. Я пробовал перенести её на VB, но успехом не увенчалось, так и лежит мёртвым грузом. А в Microsoft сказали
на что замахнулся я сидят сотни программистов разрабатывают. Вот поэтому и приходится извращаться и допиливать и подключать библиотеки в Excel. -
у меня есть проблемы с запуском макросов в Windows 10, не нашел возможности, как можно вообще запустить отладку в Windows 10 и отлаживать код, потому что макрос или деактивируется, или запускается сразу
при минимальных настройках безопасности, что не может устраивать клиента. Поэтому и пишу весь код в VB.Net,
чтобы не зависить от макросов (VBA) Excel.
Я пытаюсь вывести окно Excel на передний план всех работающих приложений.
Текущий код,
Private Declare Function SetForegroundWindow _
Lib "user32" _
(ByVal hWnd As Long) As Long
Public Sub Bring_to_front()
SetForegroundWindow wb.Application.hWnd
End Sub
Sub Test()
Set wb = Workbooks("MyWorkBook.xlxs")
call Bring_to_front
End Sub
На данный момент ничего не происходит.
2 ответа
Лучший ответ
Нашел ответ на то, что я пытался сделать после небольшого исследования.
Это переместит указанный вами рабочий лист на передний план.
Public Declare Function SetForegroundWindow _
Lib "user32" (ByVal hwnd As Long) As Long
Public Sub Bring_to_front()
Dim setFocus As Long
ThisWorkbook.Worksheets("Sheet1").Activate
setfocus = SetForegroundWindow(Application.hwnd)
End Sub
5
user1452705user1452705
28 Дек 2015 в 11:37
Для этого вам не нужен API, вы можете использовать что-то вроде:
Sub BringXLToFront()
AppActivate Application.Caption
End Sub
Метод AppActivate()
в VBA принимает строковый аргумент, и он активирует (т.е. выводит его на передний план) любое окно, содержащее это точное < / strong> строка.
Однако более конкретно для вашего вопроса — вам нужно немного больше понять, как API-интерфейсы работают в VBA — если вы используете систему x64, вам нужно использовать условную компиляцию и объявить функцию API как безопасную с указателем, используя {{X0 }} и тип данных LongPtr
:
#If Win64 Then
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As LongPtr) As LongPtr
#Else
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long
#End If
14
SierraOscar
29 Дек 2015 в 14:34