Vba открыть книгу excel невидимо

Как при окрытии книги сделать ее «невидимой»?

Michael_S

Дата: Среда, 20.03.2013, 21:18 |
Сообщение № 1

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

Всем добрый день!
Суть вопроса: у меня есть книга, при своем открытии она также открывает (или создает и сохраняет в туже папку) книгу с названием Date & «.xlsx», . Потом в этой книге макросы выполняют некоторые действия — какие, не суть важно.
Вопрос, как мою книгу открыть в фоновом режиме, и по закрытии книги, с которой она работает (и только этой книги) сохранить и закрыть обе?

зы. Только мне не надо направление, пальцем укажите, если это действие возможно biggrin

Сообщение отредактировал Michael_SСреда, 20.03.2013, 21:21

 

Ответить

Гость

Дата: Среда, 20.03.2013, 21:25 |
Сообщение № 2

visible=false

 

Ответить

Michael_S

Дата: Среда, 20.03.2013, 21:35 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

Цитата (Гость)

visible=false

Пробую для проверки
[vba]

Код

Sub ttt1()
Workbooks(3).Visible = False
End Sub

[/vba]
-ошибка
Workbooks(3).Name = «Демонстрация (001_1).xlsm», открыта.

 

Ответить

RAN

Дата: Среда, 20.03.2013, 21:40 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Погляди в сторону GetObject
Set CADObject = GetObject(«C:CADDate & «.xlsx»»)
После такого открытия книга всегда будет открываться скрытой. Чтобы при ручном открытии она отображалась, ее перед сохранением необходимо отобразить. Можешь поставить свойство IsAddin (в модуле книги) True.Тогда при необходимости проглядеть книгу, нужно будет в модуле книги вручную или макросом сменить свойство IsAddin на False.
Ну и visible=false можно использовать.

PS
[vba]

Код

Sub qq()
ActiveWindow.Visible = False
End Sub

[/vba]

PPS При использовании IsAddin открытую книгу не увидишь даже через меню Вид-Отобразить.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANСреда, 20.03.2013, 21:50

 

Ответить

Michael_S

Дата: Среда, 20.03.2013, 21:52 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

RAN, мне нужно (желательно) скрыть не новую книгу, а мою «основную», с которой я начинаю (пусть она называется Книга1.xlsm).
Я работаю с новой книгой, но в ней нет макросов, и потому мне нужна первая книга.

 

Ответить

RAN

Дата: Среда, 20.03.2013, 22:12 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

В таком разе тебе нужна надстройка. Она при запуске невидима, но макросы в ней работают. Создается либо сохранением как надстройка (Книга1.xlam), либо поставить свойство IsAddin (в модуле книги) True (Книга1.xlsm)

Но если просто убрать с глаз долой — тогда Visible.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANСреда, 20.03.2013, 22:14

 

Ответить

Michael_S

Дата: Среда, 20.03.2013, 22:47 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

Спасибо, с вопросом Visible разобрался..[vba]

Код

Windows(«книга1.xlsx»).Visible=false

[/vba]

Остался вопрос про закрытие и сохранение.

 

Ответить

RAN

Дата: Среда, 20.03.2013, 23:07 |
Сообщение № 8

Группа: Друзья

Ранг: Экселист

Сообщений: 5645


Быть или не быть, вот в чем загвоздка!

 

Ответить

Michael_S

Дата: Четверг, 21.03.2013, 17:04 |
Сообщение № 9

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

Спасибо, но не совсем то, что мне надо. второй вопрос — создам другую тему.

Сообщение отредактировал Michael_SЧетверг, 21.03.2013, 17:05

 

Ответить

RAN

Дата: Четверг, 21.03.2013, 18:22 |
Сообщение № 10

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Тогда поподробнее, можно с примерчиком и кодом. happy
А то я совсем не понял, что нать.


Быть или не быть, вот в чем загвоздка!

 

Ответить

 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

#1

10.09.2013 15:07:04

Здравствуйте. Подскажите пожалуйста, как открыть книгу через VBA, чтоб она открывалась в фоне, а не становилась активной. Код ниже открывает книгу и делает ее активной. А надо чтобы оставалась открытой в фоне.

Код
WorkBooks.Open("C:template.xlsx")
 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#2

10.09.2013 15:12:19

Код
 Dim WB As Workbook
Set WB = GetObject("C:template.xlsx")

Изменено: Михаил С.10.09.2013 15:13:12

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Или активировать затем окно «основной» книги.

 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

Понятно. Спасибо. Сделал книгу изначально скрытой, теперь при открытии она не мешает. Но в конце макроса мне надо написать код, чтоб сделать ее видимой.

 

ber$erk

Пользователь

Сообщений: 2735
Регистрация: 25.12.2012

а как вы книгу делаете невидимой? Вот и идите от обратного  :D

Учимся сами и помогаем другим…

 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

#6

10.09.2013 16:16:05

Невидимой сделал вручную и сохранил. А теперь с помощью кода надо сделать видимой.
Пробую так:

Код
WorkBooks("template.xlsx").Visible = true

не получается.

Изменено: VISXAN10.09.2013 16:21:08

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

#7

10.09.2013 16:20:38

Код
Dim WB As Workbook
Set WB = GetObject("C:template.xlsx")
'... здесь код
WB.Windows(1).Visible = True
 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

#8

10.09.2013 16:29:35

Код
Set WB = GetObject("C:template.xlsx")

этот код открывает книгу скрытой (даже если она такой не является), поэтому от него отказался.
Теперь книгу изначально сделал скрытой и пользуюсь для открытия таким кодом:

Код
Workbooks.Open("C:template.xlsx")

Далее, после определенной процедуры VBA (заполнения данной книги данными), нужно сделать книгу видимой. Этот код не помогает:

Код
WorkBooks("C:template.xlsx").Visible = true

Изменено: VISXAN10.09.2013 16:31:03

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#9

10.09.2013 16:39:06

Вы сами себя слышите?

Цитата
этот код открывает книгу скрытой …, поэтому от него отказался.

Поэтому открываю книгу и тут же делаю ее невидимой

Цитата
Далее, после определенной процедуры VBA …нужно сделать книгу видимой.

:D Мазохисты всех стран — объединяйтесь. А на вопрос ответил Hugo.

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Т.к. форум тормозит с screenupdating — диалог получается интересным :)

 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

KuklP, да не делаю я ее скрытой. Она сама скрытая, куда ее еще скрывать.
В процедуре открываю эту книгу (скрытую), та же процедура забивает ту же книгу (скрытую) данными и теперь необходимо ее отобразить с помощью кода в той же процедуре. Что тут не понятного.

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#12

10.09.2013 16:49:43

Код
Dim WB As Workbook
Set WB = GetObject("C:template.xlsx")

'... здесь код
 Set WB = Nothing
Windows("template.xlsx").Visible = True

Изменено: Михаил С.10.09.2013 16:52:46

 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

Михаил С., спасибо Вам большое. Четко и просто.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#14

10.09.2013 16:57:50

Миша, мож так?

Код
Windows(WB.name).Visible = True
Set WB = Nothing

Я сам — дурнее всякого примера! …

 

Без разницы. Но так наверно проще.
Главное, что бы книгу сделать «видимой», в любом месте кода после открытия нужно Set WB = Nothing.
Лучше в самом конце, что WB использовать можно было.

Изменено: Михаил С.10.09.2013 17:02:47

 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

#16

10.09.2013 17:03:18

А что делает этот код?

Код
Set WB = Nothing
 

удаляет

GetObject.

зы. ежели что — я сам ангелького не понимаю. Пользуюсь

переводчиком

Изменено: Михаил С.10.09.2013 17:08:35

 

VISXAN

Пользователь

Сообщений: 135
Регистрация: 01.01.1970

Ах да, ступил. Удаляет присвоенное значение. Ну или присваивает ничего))

Изменено: VISXAN10.09.2013 17:30:37

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

#19

09.04.2019 20:00:14

подскажите пожалуйста как сделать чтобы не моргало на

Код
Set WB = GetObject("C:template.xlsx")
'.......

Windows(WB.name).Visible = True ' <-- вот тут моргает
WB.Close True

Application.ScreenUpdating = False — не помогает

Изменено: Максим09.04.2019 22:01:33

 

Максим

Пользователь

Сообщений: 268
Регистрация: 31.12.2012

#20

09.04.2019 20:42:23

пока решил так:

Код
Set EXapp = New Application
EXapp.Visible = False
Set WB = EXapp.Workbooks.Open("C:template.xlsx")
'.........
WB.Close True
Set EXapp = Nothing

но что-то кажется что слишком тяжёлая артиллерия

Изменено: Максим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's user avatar

Teamothy

1,9903 gold badges15 silver badges24 bronze badges

asked Feb 23, 2009 at 23:08

notnot's user avatar

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 McDonald's user avatar

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

iDevlop's user avatar

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

Ashok's user avatar

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

Munim Rashid's user avatar

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

wooobie's user avatar

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

AnonJr's user avatar

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

pstraton's user avatar

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

Pen123's user avatar

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

guillermooo's user avatar

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

JohnW's user avatar

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.

Community's user avatar

asked Jul 9, 2016 at 6:14

P Kumar's user avatar

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

skkakkar's user avatar

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
Dim oe As Excel.Application
 
Private Sub Command1_Click()
oe.Visible = True
End Sub
 
Private Sub Command2_Click()
oe.Visible = False
End Sub
 
Private Sub Form_Load()
Set oe = New Excel.Application
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
Set oe = Nothing
End Sub



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

Like this post? Please share to your friends:
  • Vba определить другой excel
  • Vba объединить документы word в один
  • Vba объединение файлов word
  • Vba обращение к файлу excel
  • Vba обработка файлов excel