Фича с Excel

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Фича с Excel

Сообщение Чудик » 16.01.2005 (Вс) 20:00

Делаем так:
Код: Выделить всё
Public MyPrint As Excel.Application
Public wrBook As Object

Private Sub cmdPrint_Click()
Set MyPrint = New Excel.Application
Set wrBook = MyPrint.Workbooks.Open("E:\Proba.xls")
Unload Me
End Sub

Теперь запускаем любой файл Excel на компьютере. Получаем, что вначале на экран выводится Proba.xls (т.е. становиться видимым), а потом открывается нужным нам файл. Как это устранить, т.е. чтобы Proba.xls оставался невидимым?
Век живи - век учись!
www.detal-plast.narod.ru

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 17.01.2005 (Пн) 1:57

Код: Выделить всё
Application.Windows("Proba.xls").Visible = False

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 17.01.2005 (Пн) 11:08

Да, Proba.xls остается невидимым, но если мы открываем какой-то excel файл, а потом закрываем, Excel спрашивает вначале про сохранение этого файла, а потом "а не сохранить ли Proba.xls?" И, соответственно, его закрывает (сохраняя или нет, смотря что выбрано).
Вообще-то, насколько я заметил ситуация, тревожащая меня, происходит если открыть один файл, а потом в этом же приложении Excel открыть другой файл. Тогда наблюдается подобная связь. Но если открыть файл в одном приложении, а потом открыть новое приложение Excel и в нем открыть другой файл - файлы не зависимы друг от друга.
Век живи - век учись!
www.detal-plast.narod.ru

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 17.01.2005 (Пн) 16:51

Код: Выделить всё
Application.Workbooks("Proba.xls").Saved = True

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 17.01.2005 (Пн) 19:21

Не, чуть не так. Я работаю из программы с Excel. Пользователь иногда параллельно открывает другие файлы Excel, в связи с чем скрытый файл, с которым работает моя программа, снановится видимым. Но данную проблему решили, зато перешли к другой. Когда пользователь открывает при работающей моей программе какой-то файл Excel, теперь все хорошо - спасибо за совет, но когда он его закрывает, выходит запрос о сохранении и моем скрытом файле, с которым работет программа. И, не зависимо какой ответ даст пользователь, он закроется. Мне этого не нужно. Мне нужно, чтобы он продолжал работать, так как он нужен для корректной работы моей программы. Иначе говоря, мне нужно, чтобы все последующие открывающиеся и закрывающиеся файлы Excel не влияли на тот файл, которым управляет программа.
Век живи - век учись!
www.detal-plast.narod.ru

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.01.2005 (Пн) 22:15

Ессесно. Пользователь-то щелкает не на закрытии файла, а на закрытии экселя. Я что-то даже не уверен, что есть возможность сделать так, как ты хочешь. Фактически, нужно ведь, чтобы при открытии другой книги запускалась новая копия экселя.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 17.01.2005 (Пн) 22:40

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

Думаю, это в точку. Но не знаю как это сделать.
Век живи - век учись!
www.detal-plast.narod.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.01.2005 (Вт) 5:23

Очень просто...
Приложения Office используют dde для определения того, кому что открывать. Поэтому вызов на открытие будет приходит уже существующему инстансу. Просто обрабатывай событие application_workbookopen. Смотри полный путь к этой книге, создавай новый видимый инстанс экселя, закрывай книгу у себя и вызывай newexcel.workbooks.open.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Фича с Excel

Сообщение Чудик » 18.01.2005 (Вт) 23:27

Код: Выделить всё
Public wrBook As Object
Public WithEvents MyPrint As Excel.Application

Public Sub cmdPrint_Click()
Set MyPrint = New Excel.Application
Set wrBook = MyPrint.Workbooks.Open("E:\Proba.xls")
End Sub

Private Sub Command1_Click()
MyPrint.Application.Quit
Set MyPrint = Nothing
Set MyBlock = Nothing
End Sub

Private Sub MyPrint_WorkbookOpen(ByVal Wb As Excel.Workbook)
Dim MyString As String
MyPrint.Windows(1).Visible = False
On Error GoTo 1
MyString = MyPrint.Workbooks(2).FullName
    MyPrint.Visible = False
    MyPrint.DisplayAlerts = False
    MyPrint.Workbooks(2).Close (MyString)
        Set MyBlock = New Excel.Application
        MyBlock.Workbooks.Open (MyString)
        MyBlock.Application.Visible = True
1:
End Sub


Вот, работает! А можно что-нибудь в коде преобразовать, чтоб на мониторе не мигало ничего (а то в ходе переключения программой видимости на экране успевает что-то прорисовываться)?
Век живи - век учись!
www.detal-plast.narod.ru

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 19.01.2005 (Ср) 11:16

Попробуй в начале кода поставить
Application.Screenupdating=False,
а в конце
Application.Screenupdating=True.
Быть... или не быть. Вот. В чём вопрос?

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 19.01.2005 (Ср) 18:47

Не, изменений не нашел.
Век живи - век учись!
www.detal-plast.narod.ru


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 16

    TopList