Проблемы с Excel

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

Проблемы с Excel

Сообщение DeBass » 27.10.2007 (Сб) 21:44

Здравствуте. Появилась проблема, задача такая: Есть 3 файла Excel( прайс листы),в них 3 колонки, номер товара(во всех прайсах у одних и тех же товаров одинаковый), название товара (то же одинаковый) и цена, надо написать программу что бы он сравнивал цену, и выводил название компании (номер прайса), и минималбную цену из этих 3 прайсов. В VB с Excel никогда не работад, в нете все ссылаются на VBA, но мне это надо сделеть отдельной прогой! помогитe PLZ!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 27.10.2007 (Сб) 23:42

Я конечно могу за "не просто так" помочь ...:)
В противном случае - могу подсказать куда копать - а писать всю программу ... это сам понимаешь :)

с Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

DeBass
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 27.10.2007 (Сб) 21:35

Сообщение DeBass » 28.10.2007 (Вс) 9:46

SSecurity писал(а):Я конечно могу за "не просто так" помочь ...:)
В противном случае - могу подсказать куда копать - а писать всю программу ... это сам понимаешь :)

с Уважением,
Сергей

Вот мне именнно и надо немного подсказать, в какую сторону идти, а иначе какой тогда из меня толк выйдет, если за меня будут что то делать, что я и сам смогу, но потратив на это некоторое кол-во усислий! :)

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 28.10.2007 (Вс) 14:40

Попробуй вот что для начала.
В Excel выбери меню: Севис >> Макрос >> Начать запись.
Проделай вручную операции с данными листов и книг которые тебе нужны, потом открой встроенный редактор VBA (ALT + F11) и проанализируй результат записи макроса.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 28.10.2007 (Вс) 15:41

DeBass, я так понял с VB ты знаком, но не работал с Excel? Тогда подключаешь к проекту библиотеку Microsoft Excel XX.X Object Library (Project => Preferences) и пишешь примерно такой код:
Код: Выделить всё

Dim xApp    As New Excel.Application
Dim xWB     As Excel.Workbook
Dim xWS     As Excel.Worksheet

Private Sub Form_Load()

    Set xWB = xApp.Workbooks.Open(File_Name)
    Set xWS = xWB.Worksheets(1)
    '....
    'Тут пишешь код как в VBA (его можешь получить как предложил EUGY)
    '....
    xWB.Close
    xApp.Quit

End Sub
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 29.10.2007 (Пн) 5:51

EUGY писал(а):Попробуй вот что для начала ..... и проанализируй результат записи макроса.

:lol: :lol: :lol:
и тогда может произойти такое, что потом просто отобъет желание у него разбираться в том что там написано :)
(уж слишком дословно VBA описывает действия)

О чем ещё мог промолчать уажаемый burik?
Ну наверно о том, что:
- крайне желательно скрывать сам новый экземпляр экселя;
- от себя рекомендую отключать все предупреждения;
- доступ любой ячейке можно осуществлять по адресу ("A1","С33" например) или как к элементам массива применительно к указанным примерам [(1,1) и (33,3) соответсвенно].

как преобразуется код?
А вот так:


Код: Выделить всё
Dim xApp    As New Excel.Application
Dim xWB     As Excel.Workbook
Dim xWS     As Excel.Worksheet

Private Sub Form_Load()
    '## отключаем сообщения и отображение
    xApp.DisplayAlerts =False
    xApp.Visible  = False
    Set xWB = xApp.Workbooks.Open(File_Name)
    '....
    '## обращение к листу книги:
    '## через индекс, например 1й лист:
    Set xWS = xWB.Worksheets(1)
    '## через название, например лист "Results":
    Set xWS = xWB.Worksheets("Results")

    '## получение значения в ячейке B21
    '## по адресу:
    testValue = xWS.Range("B21").Value
    '## или через массив
    testValue = xWS.Cells(21,2).Value
    '...
    xWB.Close
    xApp.Quit

End Sub
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

DeBass
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 27.10.2007 (Сб) 21:35

Сообщение DeBass » 09.11.2007 (Пт) 13:17

А вот теперь у еня появились вопросики! поиск не помог!
1)надо узнать сколько ячеек содержит столбец
2)надо осуществить оиск по таблице, что бы узнать в каком столбе есть слово "TOTAL"
Помогите пожалуйста

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 09.11.2007 (Пт) 13:42

DeBass
65535 :))

вообще
1. это строка последней используемой ячейки... (т.е. не больше этого)
Код: Выделить всё
P = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

2. типа вот так :)
Код: Выделить всё
Set pp = ActiveSheet.Cells.Find("ToTal")
msgbox PP.Address


С Уважением,
Коротких Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

DeBass
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 27.10.2007 (Сб) 21:35

Сообщение DeBass » 09.11.2007 (Пт) 14:09

я просто сейчас на работе поэтому хотел спрасить а будет ли это работать если я подгружаю Excel файлы так :
Dim xApp As New Excel.Application
Dim xWB As Excel.Workbook
Dim xWS As Excel.Worksheet

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 09.11.2007 (Пт) 16:17

Объявление у тебя сработает :))
если в референсах ссылку сделал :)

а вообще код на рабочий похож


С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 09.11.2007 (Пт) 16:25

DeBass, ну так этот код никакие файлы не "подгружает". Это декларации переменных:
(Private / Public / Dim / Static) имя_переменной As тип_переменной.
Файл загружается вот этой строкой:
Код: Выделить всё
Set xWB = xApp.Workbooks.Open(File_Name)


P. S. Ты с VB раньше работал?
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

DeBass
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 27.10.2007 (Сб) 21:35

Сообщение DeBass » 09.11.2007 (Пт) 22:22

SSecurity писал(а):DeBass

2. типа вот так :)
Код: Выделить всё
Set pp = ActiveSheet.Cells.Find("ToTal")
msgbox PP.Address




а на ли как нибудь описывать пременную pp, а то вылетает ошибка 91?
DeBass, ну так этот код никакие файлы не "подгружает". Это декларации переменных:
(Private / Public / Dim / Static) имя_переменной As тип_переменной.
Файл загружается вот этой строкой:
Visual Basic:
Set xWB = xApp.Workbooks.Open(File_Name)


P. S. Ты с VB раньше работал?


Извините, просто не до конца привел исходник, короче подгружаю так как Вы предложили!

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

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 10.11.2007 (Сб) 15:05

Вот рабочий код с комментариями:

Код: Выделить всё

'Декларации
Dim xApp    As New Excel.Application 'Сам Excel
Dim xWB     As Excel.Workbook        'Документ Excel (книга)

Private Sub Form_Load()
    'Отключаем сообщения (необязательно, но желательно)
    xApp.DisplayAlerts = False
    'Делаем окно Excel невидимым (необязательно, но желательно)
    xApp.Visible = False
    'Загружаем документ (обязательно)
    'Эту строку ты скорее всего пропустил
    Set xWB = xApp.Workbooks.Open("C:\1.xls")
    'Ищем ячейку со значением ToTal
    Set PP = ActiveSheet.Cells.Find("ToTal")
    'Выводим сообщение с адресом искомой ячейки
    MsgBox PP.Address
    'Закрываем документ
    xWB.Close
    'Завершаем Excel
    xApp.Quit
End Sub
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

DeBass
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 27.10.2007 (Сб) 21:35

Сообщение DeBass » 13.11.2007 (Вт) 12:59

burik спасибо, разобрался! =) но вот появился еще один вопрос можно ли как нибудь поместить столбец в массив не изпользуя цикла, а то очень это долго!


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

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

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

    TopList  
cron