Как VB связать с Excel?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JawsIk
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 23.12.2003 (Вт) 23:19

Как VB связать с Excel?

Сообщение JawsIk » 24.12.2003 (Ср) 0:19

Я вообще не програмист (по крайней мере пока). Но голова на плечах вроде бы всегда была. Но это не к делу...

А к делу вот что: Чато пользуюсь Excel`ем и считаю его достаточно хорошей программой.
1. В эксэле при помоши "границ" сделал бланк на втором листе и похожий бланк(оборот) на третем листе.
2. На первом же листе организовал ввод данных, которые переносятся (соответственно) в ячейки бланка второго и третьего листа.
3. Подогнал размер ячеек для печати и теперь распечатав с обеих сторон 2й и 3й листы можно вырезать готовый заполненый бланк.

Затем попробовал МАКРОСЫ.

4. Добавил на первый лист кнопки "Распечатать 1ю страницу" и "Распечатать 2ю страницу"

Потом заскочил в редактор "Visual Basic"

5. Создал там форму. Натыкал Тестовых полей ввода. Всё так красивенько и замечательно.

Но столкнулся с тем, что не могу связать эти поля ввода со своим первым листом. Пошел купил книжку про VBA и о Ужас!!! Как я понял из этой книжки я не могу из всего этого создать отдельное приложение. Это прада? Неужели из VBA нельзя сделать отдельное приложение?

Честно говоря я всё-равно не расстроился. Полез на полку с дисками. Поставил VB-6 и быстренько состряпал подобную форму в VB. Почитал книжку "Visual Basic 6 - учебный курс (ПИТЕР)". Но в ней тоже ничего не нашел о том КАК СВЯЗАТЬ ПРИЛОЖЕНИЕ VB с Excel.

Вот и вся предистория а теперь вопросы:

1. Как связать VB Форму (тектовые поля, переключатели) с книгой (листами) Excel.
2. Как распечатать из VB лист Excel (c параметрами печати листа)
------------------------и ещё пару--------------------------------------
3. Как создавать из VB новый лист Excel?

4. ГДЕ ВЗЯТЬ ПОДРОБНУЮ ИНФОРМАЦИЮ(на русском) О РАБОТЕ VB (не VBA!) с EXCEL?

p.s. Не нужно отвечать типа "Да как и с Acess". (Я в ацессе дуб-дубом, а с эхелем в ладах)


TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Сообщение TEH3OP » 24.12.2003 (Ср) 10:26

Очень просто!
Сначала подключаешь библиотеку объектов Ёксель! (см. Рис.1)
(на всяк Project->References, а там ищешь надпись MicroSoft Exel... и выставляешь галку!)
А потом создаёшь в проекте VB объект Exel, а дальше всё как с макросами почти! Только по завершению работы, не забывай делать Ёкселю Quit!
Вот например после выполнения следующего кода, в папке "C:\" будет создана книга "Hallo.xls":
Код: Выделить всё
Dim XLObj As New Excel.Application
Private Sub Form_Load()
Dim WBObj As New Excel.Workbook
    Set WBObj = XLObj.Workbooks.Add
    With WBObj.ActiveSheet
        .Range("A1").Font.Bold = True
        .Range("A1").Font.Size = 26
        .Range("A1").Value = "Привет из VB!"
    End With
    XLObj.DisplayAlerts = False
    WBObj.SaveAs "C:\Hallo.xls"
    XLObj.Quit
End Sub
Вложения
addxls.rar
Рис. 1
(47.84 Кб) Скачиваний: 185

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 24.12.2003 (Ср) 17:00

Я, конечно, не силен в работе с самим Excel-ем, только для чего использовать внешний VB, когда есть почти такой же по силе VBA? Есть же всякие ухищрения с файлами .xlt - шаблоны, в которых, наверное, также как и в .xls, могут храниться твои формы.

А по поводу доступа к книге и листам, есть такие методы Active**** (например, ActiveWorkbook, ActiveSheet и т.п.) у различных объектов, начиная с главного - Application (который, кстати, в VBA не задается, а в VB его еще нужно получить). Также каждый объект обладает коллекциями различных подобъектов. например, Workbook обладает коллекцией Sheets - листов, - через которую можно и добавлять, и удалять, и искать лист, и производить другие действия.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

JawsIk
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 23.12.2003 (Вт) 23:19

Стоп! Мужики кажись не в те дебри лезим...

Сообщение JawsIk » 24.12.2003 (Ср) 18:52

Значит что я еще накопал:

Создал в VB форму

Положил на ней Текстовое поле (Text1)

Затем положил такую штуку, которая называется "Data"

В свойствах этой даты выбрал так: Connect - Excel 8.0;
Затем выбрал: DataBaseName - C:\proba.xls
RecordSours - $Лист1
Ну и затушил её на форме: Visible - False

Теперь на текстовом поле выбрал:
DataSours - Data1

Как теперь мне указать нужную ячейку (ну например С12)???


Я накопал ещё в свойствах "Текстового поля", как DataField, но в ней можно выбрать только элементы 1й строчки листа Ёкселя (прикольно вы его называете :)) ), а мне нужно

чтобы Текстовое поле (Text1) было связано с ячейкой Листа Ёкселя С12...

Что я делаю не так?

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Re: Стоп! Мужики кажись не в те дебри лезим...

Сообщение TEH3OP » 25.12.2003 (Чт) 13:47

JawsIk писал(а):Значит что я еще накопал:

Создал в VB форму

Положил на ней Текстовое поле (Text1)

Затем положил такую штуку, которая называется "Data"

В свойствах этой даты выбрал так: Connect - Excel 8.0;
Затем выбрал: DataBaseName - C:\proba.xls
RecordSours - $Лист1
Ну и затушил её на форме: Visible - False

Теперь на текстовом поле выбрал:
DataSours - Data1

Как теперь мне указать нужную ячейку (ну например С12)???


Я накопал ещё в свойствах "Текстового поля", как DataField, но в ней можно выбрать только элементы 1й строчки листа Ёкселя (прикольно вы его называете :)) ), а мне нужно

чтобы Текстовое поле (Text1) было связано с ячейкой Листа Ёкселя С12...

Что я делаю не так?

Помоему, ты в бутылку лезешь!!! Хотя, я про такой способ коннекта с Ёкселем вааще не знаю, так что, возможно я и не прав!
А вот если моим способом делать, то всё в акурат как в макросах, в Text1_Change делаешь,
WBObj.Sheets(0).Range("C12").Value = text1.text

AlexSp
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.06.2008 (Ср) 17:53

Сообщение AlexSp » 04.06.2008 (Ср) 18:03

Код: Выделить всё
Dim XLObj As New Excel.Application
Private Sub Form_Load()
Dim WBObj As New Excel.Workbook
    Set WBObj = XLObj.Workbooks.Add
    With WBObj.ActiveSheet
        .Range("A1").Font.Bold = True
        .Range("A1").Font.Size = 26
        .Range("A1").Value = "Привет из VB!"
    End With
    XLObj.DisplayAlerts = False
    WBObj.SaveAs "C:\Hallo.xls"
    XLObj.Quit
End Sub


Вы не подскажите как сделать из этого кода так, чтобы если файла ещё не существует, то создавал новый, а если уже есть такой, то дополнял его?

AlexSp
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.06.2008 (Ср) 17:53

Сообщение AlexSp » 05.06.2008 (Чт) 3:50

Народ, ну помогите хоть кто нибудь, очень нужно.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.06.2008 (Чт) 9:31

Если тебе надо открыть существующий файл, используй не Workbooks.Add, а Workbooks.Open.
Lasciate ogni speranza, voi ch'entrate.

AlexSp
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.06.2008 (Ср) 17:53

Сообщение AlexSp » 05.06.2008 (Чт) 15:11

alibek писал(а):Если тебе надо открыть существующий файл, используй не Workbooks.Add, а Workbooks.Open.

А путь к существующему файлу где нужно прописывать?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.06.2008 (Чт) 15:27

В первом аргументе этого метода.
Lasciate ogni speranza, voi ch'entrate.

AlexSp
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.06.2008 (Ср) 17:53

Сообщение AlexSp » 05.06.2008 (Чт) 16:15

Большое спасибо!

AlexSp
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.06.2008 (Ср) 17:53

Сообщение AlexSp » 05.06.2008 (Чт) 17:22

Во всём разобрался и в самом конце опять тупик:
сохраняя введённую инфу использую:
Код: Выделить всё
XLObj.SaveAs "D:\work\06.2008.xls"

а VB мне выдаёт:
"Сохранить изменения в файле 06.2008.xls?"
пробовал также и так:
Код: Выделить всё
XLObj.Save

Можно ли как сделать, чтобы небыло этой таблички, а сразу сохранялась?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.06.2008 (Чт) 17:26

DisplayAlerts=True
Также, ЕМНИП, у метода SaveAs можно задать параметр, указывающий что файлы необходимо перезаписывать без вопросов.
Если сохраняется уже существующий файл, лучше использовать Save.
Lasciate ogni speranza, voi ch'entrate.

AlexSp
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.06.2008 (Ср) 17:53

Сообщение AlexSp » 05.06.2008 (Чт) 18:01

Ещё раз большое спасибо!!!


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

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

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

    TopList  
cron