powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / почему при обращении через GetObject изменятся режим видимости файла?
17 сообщений из 17, страница 1 из 1
почему при обращении через GetObject изменятся режим видимости файла?
    #35699143
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, разъясните, почему при этой конструкции:

Sub AddDataFile()
Dim DataFile As Object
Dim PathDataFile As String
PathDataFile = "D:\Документы\Отчет.xlsx"
Set DataFile = GetObject(PathDataFile)
With DataFile.Worksheets(1)
.Range("A3").EntireRow.Insert
.Cells(3, 1).Value = Format(Now, GeneralDateTime)
.Cells(3, 2).Value = 2
.Cells(3, 3).Value = 3
.Cells(3, 4).Value = 4
End With
DataFile.Close (True)
Application.DisplayAlerts = False
End Sub

код выполняется как положено, но последующее ручное открытие файла Отчет.xlsx происходит в скрытом режиме? Как этого избежать?
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699178
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рискну предположить что Вы не завершаете корректно работу Экселя и процесс остается висеть в памяти.

С уважением, Николай.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699200
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все верно. По-видимому, процесс Excel не "убивается" и ручное открытие приводит к использованию уже имеющегося экземпляра приложения.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699211
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gjghjc,

А как надобно корректно завершать? Дело в том, что Excel после выполнения кода закрывать не хотелось бы, а добавление строки Set DataFile=Nothing ничего не дает.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699312
piterblinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да эти GetObject, CreateObject как-то не так как хотелось бы работают, т.е. не совсем понятно, я вот такую катавасию городил правда Word, но Excel впринципе тоже самое.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        Set dd = GetObject(dstF)
        If NOT (dd Is Nothing) Then
          dd.Close (False)
          Set dd = Nothing
        End If
        Set WA = GetObject(, "Word.Application")
        If WA Is Nothing Then
          Set WA = CreateObject("Word.Application")
        End If
        If NOT (WA Is Nothing) Then
          WA.Documents.Open (dstF)
          WA.Visible = True
        End If  
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699313
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zenon77А как надобно корректно завершать?

Код: plaintext
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.
Sub AddDataFile()
    Dim DataFile As Object
    Dim PathDataFile As String
    Dim objApp As Object

    PathDataFile = "D:\Документы\Отчет.xls"
    
    Set DataFile = GetObject(PathDataFile)
    Set objApp = DataFile.Application
    
    objApp.DisplayAlerts = False
    
    With DataFile.WorkSheets( 1 )
        .Range("A3").EntireRow.Insert
        .Cells( 3 ,  1 ).Value = Format(Now, "dd.mm.yyyy")
        .Cells( 3 ,  2 ).Value =  2 
        .Cells( 3 ,  3 ).Value =  3 
        .Cells( 3 ,  4 ).Value =  4 
    End With
    
    objApp.DisplayAlerts = True
    
    DataFile.Close SaveChanges:=True
    Set DataFile = Nothing
    
    objApp.Quit
    Set objApp = Nothing
End Sub

zenon77Дело в том, что Excel после выполнения кода закрывать не хотелось бы, а добавление строки Set DataFile=Nothing ничего не дает

Ну если не хотите закрывать экземпляр приложения, то оставляйте все как есть.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699315
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton,

И еще, буду признателен за подсказку по вопросу: как идеологически более правильно обращаться к excel-файлу из макроса в другом excel-файле - через Application.Open или GetObject? Какие у каждого обращения подводные камни? А то практичски с нуля второй месяц ковыряюсь с написанием цикла из пары десятков макросов, пролистал две книжки, где-что на форумах подсмотрел, а когда какой из этих двух методов применять - так для себя и не разъяснил.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699382
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
piterblinov,

Дело в том, что я свой макрос запускаю из другого Excel файла, и, если я правильно понимаю, то у меня нет необходимости делать проверку аналогично Вашей. А со свойством Application.Visible я баловался, результатов не принесло.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699420
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton,

пробовал Ваш код, как с Quit, так и без него - никакого результата, файл так же скрыт при ручном запуске. Спасибо за подсказку с возвращением DisplayAlerts = True в исходное состояние. Но только не совсем понимаю, почему она перед строкой DataFile.Close SaveChanges:=True работает? Моя логика подсказывает, что нужно сначала закрыть файл с сохранением без запроса, и лишь потом возвращать опцию на запро в исходное состояние.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699473
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, ваша логика все верно подсказывает. :)

Перенесите

Код: plaintext
objApp.DisplayAlerts = True

после

Код: plaintext
DataFile.Close SaveChanges:=True
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699508
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton,

Ну а по существу вопроса как же? Файл, будь он неладен, как был скрыт так и остается. Ну не может же быть, чтоб это только у меня происходило, неужто никто не сталкивался?
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35699848
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет раннего или позднего связывания.

Я бы порекомендовал использовать раннее связывание.

Код: plaintext
1.
2.
Dim objXl As Excel.Application
    
Set objXl = New Excel.Application

Это быстродействие, vba уже знает обо всех методах и свойствах. Удобство разработки, можно просмотреть все свойства и методы определенного объекта.

По поводу CreateObject и GetObject.

CreateObject используют для создания нового экземпляра приложения.

GetObject используются при уже существующем экземпляре приложения.

В любом случае считается, что лучше использовать CreateObject.

В вашем случае, я не думаю, что эта проблема связанна именно с GetObject, или с позднем связыванием. Я выяснил, что проблема в том, что окно приложения остается скрытым.

Попробуй сделать так.

Код: plaintext
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.
Sub AddDataFile()
    Dim DataFile As Object
    Dim PathDataFile As String
    Dim objApp As Object

    PathDataFile = "D:\Документы\Отчет.xls"
    
    Set DataFile = GetObject(PathDataFile)
    Set objApp = DataFile.Application
        
    objApp.DisplayAlerts = False
    
    With DataFile.WorkSheets( 1 )
        .Range("A3").EntireRow.Insert
        .Cells( 3 ,  1 ).Value = Format(Now, "dd.mm.yyyy")
        .Cells( 3 ,  2 ).Value =  2 
        .Cells( 3 ,  3 ).Value =  3 
        .Cells( 3 ,  4 ).Value =  4 
    End With
    
    objApp.Windows( 1 ).Visible = True
    DataFile.Close SaveChanges:=True
    
    objApp.DisplayAlerts = True
    
    Set DataFile = Nothing
    
    objApp.Quit
    Set objApp = Nothing
End Sub
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35700025
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton,

Странное дело, если включить Ваш код, то результат у меня упорно остается прежним. Но я попробовал изменить строку

Код: plaintext
objApp.Windows( 1 ).Visible = True

явно указывая имя файла, например так:

Код: plaintext
objApp.Windows(Dir(PathDataFile)).Visible = True

и - о чудо, все получилось! Одно отравляет радость - мелькание открывающегося-закрывающегося файла. А я именно от этого хотел уйти. Если б не это мелькание то я б не прибегал к GetObject, а использовал более простую конструкцию:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub AddDataFile()
    Dim DataFile As Object
    Dim PathDataFile As String
    
    PathDataFile = "D:\Документы\Отчет.xls"

    Set DataFile = Application.Workbooks.Open(Filename:=PathDataFile)
    
    DataFile.Application.DisplayAlerts = False
    
    With DataFile.Worksheets( 1 )
        .Range("A3").EntireRow.Insert
        .Cells( 3 ,  1 ).Value = Format(Now, GeneralDateTime)
        .Cells( 3 ,  2 ).Value =  2 
        .Cells( 3 ,  3 ).Value =  3 
        .Cells( 3 ,  4 ).Value =  4 
    End With
    
    DataFile.Close SaveChanges:=True
    
    Application.DisplayAlerts = True
    
    Set DataFile = Nothing
End Sub

Теперь вопрос - как избавиться от мелькания? :)
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35700056
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте отключить обновление экрана...

Код: plaintext
1.
2.
Application.ScreenUpdating = False 
...
Application.ScreenUpdating = True 
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35700205
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton,

Спасибо. Все работает без мелькания в обоих случаях. Файл в последующем открывается. Только вот остался мелкий, но щекочущий меня вопрос: какой вариант кода все-таки предпочтительней в моем случае - с GetObject или c Application.Workbooks.Open, тот что в моем предыдущем посте?
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35700250
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ты сразу не сказал, что открываешь книгу из текущего приложения. Здесь, однозначно мудрить не стоит. Используй вариант с Application.
...
Рейтинг: 0 / 0
почему при обращении через GetObject изменятся режим видимости файла?
    #35700296
zenon77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton,

Премного благодарен. Я тоже так думаю :) Просто когда мне нужно было только взять данные из ячеек excel-файлов, не изменяя их, я применял GetObject - мне казалось это проще и короче написать. Опять же, при этом достигалась нужная мне скрытость процессов открытия-закрытия.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / почему при обращении через GetObject изменятся режим видимости файла?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]