Excel -> 2.5 несложных вопроса

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Бутч
Обычный пользователь
Обычный пользователь
 
Сообщения: 57
Зарегистрирован: 29.04.2005 (Пт) 17:30
Откуда: Днепр

Excel -> 2.5 несложных вопроса

Сообщение Бутч » 19.10.2005 (Ср) 21:26

Здавствуйте!
Выкладываю суть проблем:

(1) Есть у меня форма. При инициализации открывается книга Excel (по умолчанию appExcel.Visible=false). При нажатии на одну из кнопок книга отображается пользователю (visible становится true). Как сделать так, чтобы если пользователь попытался её закрыть, книга не закрывалась, а исчезала (visible менялась опять на false)?

(2) Существует ComboBox. При открытии списка выполняется команда
Код: Выделить всё
For i = 1 To appExcel.Workbooks.Count
      ComboBook.Items.Add(appExcel.Workbooks(i).Name)
Next


, то есть в список помещаются все имеющиеся рабочие книги.
(a) рабочие книги помещаются только те, которые были открыты после вызова программы. Как сделать, чтоб выводились имена книг, открытых до её вызова?
(б) как сделать, что если открытых книг не существует, то пустой combo список просто не открывался (иначе он "выворачивается" с одним пустым элементом, который нельзя выбрать), то есть чтобы ComboBox.DroppedDown менялось визуально на false?

Заранее благодарен за помощь.
"Пусть вон тот желтый кубик будет для наглядности синим шариком."

Windows XP: compiling 95%...
- Билл, опять повисло!
- Ничего, сойдет.

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

Сообщение GSerg » 19.10.2005 (Ср) 22:29

(1)
Код: Выделить всё
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Cancel = True
  Me.Windows(1).Visible = False
End Sub


(2)
(а) Непонятно. Перебираются все. Кстати, скобки убрать у Add. [Тьфу, форум по .NET. Скобки не убирать.]
(б) Что именно не получается?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Бутч
Обычный пользователь
Обычный пользователь
 
Сообщения: 57
Зарегистрирован: 29.04.2005 (Пт) 17:30
Откуда: Днепр

Сообщение Бутч » 20.10.2005 (Чт) 0:42

(1)

Спасибо. Не догадался бы.

(а) Непонятно. Перебираются все. Кстати, скобки убрать у Add.

у меня как раз перебираются только те, которые были открыты после выполнения команды
Код: Выделить всё
appExcel=new Excel.Application


(б) Что именно не получается?


Код: Выделить всё
    Private Sub ComboBook_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBook.DropDown
        ...
        ComboBook.DroppedDown = False
    End Sub

Почему список после этого обратно не залезает?
"Пусть вон тот желтый кубик будет для наглядности синим шариком."

Windows XP: compiling 95%...
- Билл, опять повисло!
- Ничего, сойдет.

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

Сообщение GSerg » 20.10.2005 (Чт) 0:56

Бутч писал(а):у меня как раз перебираются только те, которые были открыты после выполнения команды
Код: Выделить всё
appExcel=new Excel.Application

Ну разумеется.

Блин, развратился народ этой фичей офиса, когда документам MDI соответствуют кнопки таскбара... Вот и не видит, когда один инстанс экселя, а когда другой - сливается...
Иди в Сервис - Параметры - Вид и сними галку Окна на панели задач.

Бутч писал(а):
Код: Выделить всё
Private Sub ComboBook_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBook.DropDown
    ...
    ComboBook.DroppedDown = False
End Sub

Почему список после этого обратно не залезает?

Видимо, потому что это обработчик дропдауна? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Бутч
Обычный пользователь
Обычный пользователь
 
Сообщения: 57
Зарегистрирован: 29.04.2005 (Пт) 17:30
Откуда: Днепр

Сообщение Бутч » 20.10.2005 (Чт) 18:06

Ну разумеется.

Блин, развратился народ этой фичей офиса, когда документам MDI соответствуют кнопки таскбара... Вот и не видит, когда один инстанс экселя, а когда другой - сливается...
Иди в Сервис - Параметры - Вид и сними галку Окна на панели задач.

Инстант, насколько понял, это мой appExcel после команды
Код: Выделить всё
appExcel=new Excel.Application


Вот мне и надо получить список этих самых инстантов, открытых до меня (Excel насколько я понял создает один из них и пихает все книги туда, а я другой (или несколько другий) и книги уже в свои "инстанты")
Блин, и можешь объяснить, что это слово означает? :scratch:

Видимо, потому что это обработчик дропдауна?

Да я это уже понял. Но в нем же нету агрумента
Код: Выделить всё
Cancel as Boolean

Как же быть?
"Пусть вон тот желтый кубик будет для наглядности синим шариком."

Windows XP: compiling 95%...
- Билл, опять повисло!
- Ничего, сойдет.

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

Сообщение GSerg » 20.10.2005 (Чт) 18:17

Инстанс - экземпляр класса...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Бутч
Обычный пользователь
Обычный пользователь
 
Сообщения: 57
Зарегистрирован: 29.04.2005 (Пт) 17:30
Откуда: Днепр

Сообщение Бутч » 20.10.2005 (Чт) 23:22

Инстанс - экземпляр класса...

Понял 8)
Расскажи только, пожалуйста, как мне задачи необходимые выполнить. Особенно как найти все созданние инстансы Excel. Очень надо :roll: :|
"Пусть вон тот желтый кубик будет для наглядности синим шариком."

Windows XP: compiling 95%...
- Билл, опять повисло!
- Ничего, сойдет.

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

Сообщение GSerg » 20.10.2005 (Чт) 23:31

Замучаешься.
Создавать массив объектов, ловить их события, да ещё и ловить появление новых инстансов экселя.

Вообще что пишешь-то? Чё-то очень злостно получается.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Бутч
Обычный пользователь
Обычный пользователь
 
Сообщения: 57
Зарегистрирован: 29.04.2005 (Пт) 17:30
Откуда: Днепр

Сообщение Бутч » 21.10.2005 (Пт) 0:41

Мне необходимо переделать чужую программку из VBA в самостоятельную VB.NET. Программа должна либо открывать книгу из OpenDialog, либо выводить список уже открытых. Ну и далее листы в них создавать, расчеты проводить и т.д.
В VBA было все просто (что-то вроде такого)
Код: Выделить всё
For i = 1 To Workbooks.Count
      ComboBox1.AddItem Workbooks(i).Name
Next i

И всё. Список книг у тебя в кармане :P
А здесь не знаю как быть :cry: . Уже программу почти доделал. Только эту часть осталось закончить. А это обязательно :( .
Ну должен ведь где-то Excel хранить название открытых книг :? . Эх, мне бы только этот списочек получить :roll: . Я бы тогда их просто еще разочек открыл и сразу в свой инстанс запихнул :roll: . А там уж что хотел бы с ними, то и делал :roll: .
"Пусть вон тот желтый кубик будет для наглядности синим шариком."

Windows XP: compiling 95%...
- Билл, опять повисло!
- Ничего, сойдет.

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

Сообщение GSerg » 21.10.2005 (Пт) 0:49

Не надо так делать.

Лучше тогда не новый инстанс экселя делать, а брать имеющийся.
Код: Выделить всё
= GetObject(, "excel.application")


Если ошибка, значит создавать новый.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Бутч
Обычный пользователь
Обычный пользователь
 
Сообщения: 57
Зарегистрирован: 29.04.2005 (Пт) 17:30
Откуда: Днепр

Сообщение Бутч » 21.10.2005 (Пт) 1:07

GSerg, это то, что мне нужно :D . Теперь я и программу закончу, и в будущем смогу над всеми открытыми Вордами и Ацессами извращатся 8) :lol: . Я просто безпредельно благодарен тебе за помощь :D ! Желаю тебе успехов :P !
"Пусть вон тот желтый кубик будет для наглядности синим шариком."

Windows XP: compiling 95%...
- Билл, опять повисло!
- Ничего, сойдет.


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 102

    TopList