Как при окрытии книги сделать ее «невидимой»? |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
VISXAN Пользователь Сообщений: 135 |
#1 10.09.2013 15:07:04 Здравствуйте. Подскажите пожалуйста, как открыть книгу через VBA, чтоб она открывалась в фоне, а не становилась активной. Код ниже открывает книгу и делает ее активной. А надо чтобы оставалась открытой в фоне.
|
||
Михаил С. Пользователь Сообщений: 10514 |
#2 10.09.2013 15:12:19
Изменено: Михаил С. — 10.09.2013 15:13:12 |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Или активировать затем окно «основной» книги. |
VISXAN Пользователь Сообщений: 135 |
Понятно. Спасибо. Сделал книгу изначально скрытой, теперь при открытии она не мешает. Но в конце макроса мне надо написать код, чтоб сделать ее видимой. |
ber$erk Пользователь Сообщений: 2735 |
а как вы книгу делаете невидимой? Вот и идите от обратного Учимся сами и помогаем другим… |
VISXAN Пользователь Сообщений: 135 |
#6 10.09.2013 16:16:05 Невидимой сделал вручную и сохранил. А теперь с помощью кода надо сделать видимой.
не получается. Изменено: VISXAN — 10.09.2013 16:21:08 |
||
Hugo Пользователь Сообщений: 23251 |
#7 10.09.2013 16:20:38
|
||
VISXAN Пользователь Сообщений: 135 |
#8 10.09.2013 16:29:35
этот код открывает книгу скрытой (даже если она такой не является), поэтому от него отказался.
Далее, после определенной процедуры VBA (заполнения данной книги данными), нужно сделать книгу видимой. Этот код не помогает:
Изменено: VISXAN — 10.09.2013 16:31:03 |
||||||
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#9 10.09.2013 16:39:06 Вы сами себя слышите?
Поэтому открываю книгу и тут же делаю ее невидимой
Мазохисты всех стран — объединяйтесь. А на вопрос ответил Hugo. Я сам — дурнее всякого примера! … |
||||
Hugo Пользователь Сообщений: 23251 |
Т.к. форум тормозит с screenupdating — диалог получается интересным |
VISXAN Пользователь Сообщений: 135 |
KuklP, да не делаю я ее скрытой. Она сама скрытая, куда ее еще скрывать. |
Михаил С. Пользователь Сообщений: 10514 |
#12 10.09.2013 16:49:43
Изменено: Михаил С. — 10.09.2013 16:52:46 |
||
VISXAN Пользователь Сообщений: 135 |
Михаил С., спасибо Вам большое. Четко и просто. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#14 10.09.2013 16:57:50 Миша, мож так?
Я сам — дурнее всякого примера! … |
||
Без разницы. Но так наверно проще. Изменено: Михаил С. — 10.09.2013 17:02:47 |
|
VISXAN Пользователь Сообщений: 135 |
#16 10.09.2013 17:03:18 А что делает этот код?
|
||
удаляет GetObject. зы. ежели что — я сам ангелького не понимаю. Пользуюсь переводчиком Изменено: Михаил С. — 10.09.2013 17:08:35 |
|
VISXAN Пользователь Сообщений: 135 |
Ах да, ступил. Удаляет присвоенное значение. Ну или присваивает ничего)) Изменено: VISXAN — 10.09.2013 17:30:37 |
Максим Пользователь Сообщений: 268 |
#19 09.04.2019 20:00:14 подскажите пожалуйста как сделать чтобы не моргало на
Application.ScreenUpdating = False — не помогает Изменено: Максим — 09.04.2019 22:01:33 |
||
Максим Пользователь Сообщений: 268 |
#20 09.04.2019 20:42:23 пока решил так:
но что-то кажется что слишком тяжёлая артиллерия Изменено: Максим — 09.04.2019 20:42:55 |
||
I want to search through existing Excel files with a macro, but I don’t want to display those files when they’re opened by the code. Is there a way to have them open «in the background», so to speak?
Teamothy
1,9903 gold badges15 silver badges24 bronze badges
asked Feb 23, 2009 at 23:08
1
Not sure if you can open them invisibly in the current excel instance
You can open a new instance of excel though, hide it and then open the workbooks
Dim app as New Excel.Application
app.Visible = False 'Visible is False by default, so this isn't necessary
Dim book As Excel.Workbook
Set book = app.Workbooks.Add(fileName)
'
' Do what you have to do
'
book.Close SaveChanges:=False
app.Quit
Set app = Nothing
As others have posted, make sure you clean up after you are finished with any opened workbooks
answered Feb 23, 2009 at 23:25
Patrick McDonaldPatrick McDonald
63.7k14 gold badges106 silver badges118 bronze badges
5
If that suits your needs, I would simply use
Application.ScreenUpdating = False
with the added benefit of accelerating your code, instead of slowing it down by using a second instance of Excel.
answered Aug 13, 2009 at 15:46
iDevlopiDevlop
24.6k11 gold badges89 silver badges147 bronze badges
3
To open a workbook as hidden in the existing instance of Excel, use following:
Application.ScreenUpdating = False
Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
answered Jan 16, 2012 at 11:54
AshokAshok
1,0743 gold badges14 silver badges24 bronze badges
2
Using ADO (AnonJr already explained) and utilizing SQL is possibly the best option for fetching data from a closed workbook without opening that in conventional way. Please watch this VIDEO.
OTHERWISE, possibly GetObject(<filename with path>)
is the most CONCISE way. Worksheets remain invisible, however will appear in project explorer window in VBE just like any other workbook opened in conventional ways.
Dim wb As Workbook
Set wb = GetObject("C:MyData.xlsx") 'Worksheets will remain invisible, no new window appears in the screen
' your codes here
wb.Close SaveChanges:=False
If you want to read a particular sheet, need not even define a Workbook variable
Dim sh As Worksheet
Set sh = GetObject("C:MyData.xlsx").Worksheets("MySheet")
' your codes here
sh.Parent.Close SaveChanges:=False 'Closes the associated workbook
answered Jan 22, 2021 at 16:03
5
A much simpler approach that doesn’t involve manipulating active windows:
Dim wb As Workbook
Set wb = Workbooks.Open("workbook.xlsx")
wb.Windows(1).Visible = False
From what I can tell the Windows index on the workbook should always be 1
. If anyone knows of any race conditions that would make this untrue please let me know.
answered Jul 13, 2016 at 18:40
wooobiewooobie
3452 silver badges12 bronze badges
Even though you’ve got your answer, for those that find this question, it is also possible to open an Excel spreadsheet as a JET data store. Borrowing the connection string from a project I’ve used it on, it will look kinda like this:
strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & objFile.Path & ";Extended Properties=""Excel 8.0;HDR=Yes"""
strSQL = "SELECT * FROM [RegistrationList$] ORDER BY DateToRegister DESC"
Note that «RegistrationList» is the name of the tab in the workbook. There are a few tutorials floating around on the web with the particulars of what you can and can’t do accessing a sheet this way.
Just thought I’d add.
answered Aug 13, 2009 at 15:58
AnonJrAnonJr
2,7491 gold badge28 silver badges39 bronze badges
4
The problem with both iDevlop’s and Ashok’s answers is that the fundamental problem is an Excel design flaw (apparently) in which the Open method fails to respect the Application.ScreenUpdating setting of False. Consequently, setting it to False is of no benefit to this problem.
If Patrick McDonald’s solution is too burdensome due to the overhead of starting a second instance of Excel, then the best solution I’ve found is to minimize the time that the opened workbook is visible by re-activating the original window as quickly as possible:
Dim TempWkBk As Workbook
Dim CurrentWin As Window
Set CurrentWin = ActiveWindow
Set TempWkBk = Workbooks.Open(SomeFilePath)
CurrentWin.Activate 'Allows only a VERY brief flash of the opened workbook
TempWkBk.Windows(1).Visible = False 'Only necessary if you also need to prevent
'the user from manually accessing the opened
'workbook before it is closed.
'Operate on the new workbook, which is not visible to the user, then close it...
answered Jul 22, 2014 at 19:07
pstratonpstraton
1,04014 silver badges9 bronze badges
4
Open the workbook as hidden and then set it as «saved» so that users are not prompted when they close out.
Dim w As Workbooks
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Set w = Workbooks
w.Open Filename:="\serverPriceList.xlsx", UpdateLinks:=False, ReadOnly:=True 'this is the data file were going to be opening
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
w.Item(2).Saved = True 'this will suppress the safe prompt for the data file only
End Sub
This is somewhat derivative of the answer posted by Ashok.
By doing it this way though you will not get prompted to save changes back to the Excel file your reading from. This is great if the Excel file your reading from is intended as a data source for validation. For example if the workbook contains product names and price data it can be hidden and you can show an Excel file that represents an invoice with drop downs for product that validates from that price list.
You can then store the price list on a shared location on a network somewhere and make it read-only.
answered Jul 18, 2014 at 17:19
1
Open them from a new instance of Excel.
Sub Test()
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
Dim w As Workbook
Set w = xl.Workbooks.Add()
MsgBox "Not visible yet..."
xl.Visible = True
w.Close False
Set xl = Nothing
End Sub
You need to remember to clean up after you’re done.
answered Feb 23, 2009 at 23:43
guillermoooguillermooo
7,83515 gold badges53 silver badges58 bronze badges
1
In excel, hide the workbooks, and save them as hidden. When your app loads them they will not be shown.
Edit: upon re-reading, it became clear that these workbooks are not part of your application. Such a solution would be inappropriate for user workbooks.
answered Feb 23, 2009 at 23:18
JohnWJohnW
2,9621 gold badge27 silver badges30 bronze badges
I have created an application which displays UserForm and makes the excel invisible. I have used «application.visible» property however it makes all the excel workbook invisible as well. I just need to make one workbook invisible. Hiding that specific workbook is not working for me as codes don’t run in background and gives me an error.
Is there a way wherein I just make the macro containing workbook invisible using application.visible property? The same was what application.visible does but just with one workbook. Please help me.
asked Jul 9, 2016 at 6:14
ThisWorkbook.Application.Visible = False
will change the Visible property of the application running your workbook, i.e. an instance of Excel.EXE … if this instance is running your other books, too, then as a consequence all these books will disappear from screen.
To hide a single workbook, use
ActiveWindow.Visible = False
or alternatively, if the workbook you want to hide (e.g. «MyWorkbook») is not the active one
Windows("MyWorkbook").Visible = False
answered Jul 9, 2016 at 6:29
skkakkarskkakkar
2,7322 gold badges16 silver badges29 bronze badges
4
rank1 |
|
1 |
|
Как сделать книгу невидимой?12.05.2012, 23:07. Показов 5848. Ответов 4
Есть ли способ сделать так, чтобы книга сидела в памяти, но ее не было бы видно в таскбаре и у нее бы не было ни одного видимого листа. То есть чтобы это был xls файл, а не xla надстройка. |
VladConn 5 / 5 / 3 Регистрация: 17.10.2007 Сообщений: 1,119 |
||||
13.05.2012, 05:07 |
2 |
|||
0 |
0 / 0 / 0 Регистрация: 02.09.2010 Сообщений: 102 |
|
13.05.2012, 11:12 |
3 |
Ошибка выполнения ’91’: Обьектная переменная или переменная блока With не задана
0 |
5 / 5 / 3 Регистрация: 17.10.2007 Сообщений: 1,119 |
|
13.05.2012, 17:07 |
4 |
Application.Visible = False
0 |
rank1 |
|
14.05.2012, 15:33 |
5 |
дошло … ThisWorkbook.Windows(1).visible=false |