Как разработать приложение на VBA for Application?

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

Как разработать приложение на VBA for Application?

Сообщение Vilkov » 28.07.2005 (Чт) 14:25

Подскажите кто делал на VBA for application проги, типа которая будет скачивать файлы эксель, проводить расчёты и создавать файлы эксель и выгружать данные туда. (ну типа строить там разные таблицы, графики).
конкретные вопросы:
1. Есть ли встроенный объект для записи историй по результатам.
2. Как запускать ворд через VBA и закачивать туда результаты
(ну это я знаю хочу узнать другие методы, мой метод геморройный)
3. в какие ещё объекты массивы можно записывать информацию кроме массивов и структурированных записей массивов.
4. как сделать так, чтобы эту прогу запускать не через редактор VBA а через ярлык или открытие файла.
если ещё вопросы будут я допишу.
Кто может помогите....

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

Сообщение GSerg » 28.07.2005 (Чт) 14:34

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

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 14:35

как сделать вот такое дейтсвие.

есть десять текстбоксов и одна кнопка.
кнопка недоступна.
но когда все текстбоксы заполнены () тогда кнопка доступна.
заполняются тексбоксы в случайном порядке.
когда последний текстбокс заполняется (а последним может быть любой) то кнопка открывается.

не могу никак сделать.

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

Сообщение GSerg » 28.07.2005 (Чт) 14:37

Логично (c).

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

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 14:44

ну как не понял.
1. есть ли какой-либо объект который будет записывать автоматически данные типа поля или переменные, ставить дату создания записи и в любой момент можно просматривать все результаты
3. вот я когда массив обозначаю dim A(1 to 100, 1 to 100) as string
могу я другие массивы использовать? они вообще есть в ВБА
на напиример A^(1 to 100, 1 to 100) as B^
типа опр. польз. переменные мне не подходят dim A() as records

4. чтобы запустить программу мне нужно открыть файл эксель, потом редактор VBA (alt-f11) и потом f5. А я хочу сразу запускать форму.
как это сделать?

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

Сообщение GSerg » 28.07.2005 (Чт) 14:50

1. Всё равно не понял.
3. Снова не понял, раз тебе не подходят dim A() as records.
4. Обрабатывать событие Open соответствующего документа, для чего поместить соответствующий макрос в него же.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 15:09

ладно какие ввобще можно испотзовать массивы в вба?

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

Сообщение GSerg » 28.07.2005 (Чт) 15:11

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

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 15:18

слушай приятель.
я читал учебники по Дельфи и ВБА пять лет назад и знаю.
мы в иституте кроме обычных массивов и паскале и дельфи использовали массивы с собственным выделением памяти, и деревья.
Вот я и спрашиваю, можно использовать массивы такие в ВБА.

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

Сообщение GSerg » 28.07.2005 (Чт) 15:23

Я читал учебники по Delphi, C++, ассемблеру, VB6, VBA, VB .NET и C#. Я понятия не имею, что ты имеешь в виду под массивами с собственным выделением памяти. А деревья - вообще не массивы.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение alibek » 28.07.2005 (Чт) 15:26

GSerg, может это призрак BP вернулся? :)
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение GSerg » 28.07.2005 (Чт) 15:27

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

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 15:31

информатику и программирование я изучал в МЭСИ,
у нас программирование там было 3 года подряд.
и нам объясняли про эти массивы. сначала сам выделяешь память под эти массивы, потом заполняешь их, работаешь с ними, а потом по завершении удаляешь, и освобождаешь память.
записывали мы их A^.

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

ну ладно может их уже и не используют.
Короче пулачается что кроме dim A() as string этого ничего нет?
да деревья не массивы а отедльный класс, но через них можно записывать массивы данных.

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

Сообщение GSerg » 28.07.2005 (Чт) 15:39

Массивы VB бывают статические и динамические.
Память под статические отводится автоматически в момент входа в процедуру и автоматически обнуляется.
Память под динамические отводится при вызове ReDim и автоматически обнуляется.

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

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 15:48

я же говорю, что это знаю.
мне нужно создавать массивы вручную. не автоматически.
в дельфи это можно делать, значит в ВБА нельзя или можно? может в книгах просто не пишут об этом.
бывает памяти не хватает, массивы огромные загружаю.
а если работать через БД то работает все по 8-10 часов.
оперативка 512 мб. процессор 3,2 мгц.
а по поводу объекта.
придётся самому его создавать что-ли?
ну типа объект массив который сохраняет все манипуляции проводимые с данными. как записная книжка.

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

Сообщение GSerg » 28.07.2005 (Чт) 15:54

Я же говорю.
dim a() as long не создаёт массив. Массив создастся при вызове redim a(1 to 100). И уничтожится при erase a.

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

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 16:00

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

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 28.07.2005 (Чт) 16:25

Набор объектов характерен не для языка а для системы. В VBA можно использовать любой СОМ объект. Надо прогресс в отдельном окне - делай отдельную форму с прогрессом :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.07.2005 (Чт) 16:27

Vilkov, похоже все занятия по информатике ты прогулял. Это невероятная глупость - использовать vba для работы с большими объемами данных. vba предназначен прежде всего для автоматизации работы приложений, в которые он встроен, а под твоими задачами он просто умрет. Пиши всю обработку данных на дельфях, если уж ты в них волокешь, а потом выгружай в эксель или куда там надо. Да и с прогрессбарами там будет попроще. Объектную модель экселя или ворда можно посмотреть нажав в них alt+f11 а потом f2. Как создать экземпляр activex-приложения в дельфях сам должен знать.

А вообще, более невнятных вопросов я еще не видел.

ЗЫ: Задать количество байтов для каждой переменной массива вручную нельзя, каждый элемент будет занимать столько места, сколько занимает переменная того типа, которым объявлен массив. vb вообще ограничен в манипуляциях с памятью.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 28.07.2005 (Чт) 16:34

...... и дело тут не в ограничениях ВБ, а просто в том, что это справедливо всегда - переменная в массиве всегда будет занимать столько же места сколько и вне его.

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 28.07.2005 (Чт) 16:36

ну тогда лучше написать отедльную процедуру кот.
будет создавать форму, выводить её с прогрессом и потом убирать и удалять форму.
А то что плодить формы ненужные????
собственно я думал, что есть готовый объект, с прогрессом, ну типа как меседжбокс, только с прогрессом.
а ведь можно свой объект написать и подключить его таким макаром и потом работать????

никогда не писал свои объекты, только в учебных целях.
а где можно эл. литературы нарыть такого содержния?????
вот именно как этот объект описывать и потом компилировать.
Я раньше это в дельфи делал, а как в VBA знаете ????

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.07.2005 (Чт) 16:53

Никак. Забудь про VBA, VBA это встраиваемый интерпретатор, а не среда разработки с компилятором.

Книжки все равно рулят. И не 3 года назад, а сейчас.

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 9:08

Antonariy
ну я уже делал такие программы на ВБА.
работали они нормально, только когда процесс записи в массивы и из массивов в тексбоксы, занимает долгое время. ну минуты 2-3.
кстати в дельфях по времени столько же.

у меня на работе дельфи нет....
только дома, но дома я не работаю, работы на работе хватает.

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 10:35

Ещё один вопрос.
чтобы скачать данные из файла ексель нужно его открыть и потом скачать и закрыть.
можно сделать так чтобы все эти опрерации выполнить, но файл на экране не маячил. Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??

И можно сделать так, чтобы вообще скачивать данные из файла ексель без его физического открытия?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??


Кто знает подскажите, ПОЖАЛУЙСТА.

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 10:36

GSerg
ШАМАН ЕСЛИ ЗНАЕШЬ СКАЖИ КАК????

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

Сообщение uhm » 29.07.2005 (Пт) 11:05

Без экселя считать файл эксель, кажется, нельзя (хотя, если я ничего не путаю, что-то говорилось про control, который читает экселевские файлы, можешь попробовать поискать по сайту).

Чтобы на экране не мелькало, сделай объекту Excel проперти .Visible=False, тогда он станет невидимым.

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

Сообщение GSerg » 29.07.2005 (Пт) 11:30

Vilkov писал(а):И можно сделать так, чтобы вообще скачивать данные из файла ексель без его физического открытия?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??

За вопрос "Как прочитать файл, не открывая его" Рей обещал банить сразу :)

Чтоб на экране не мелькало, применяется application.screenupdating=false...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 12:22

Кто знает где ошибка?Я идиот! Убейте меня, кто-нибудь!??
Sub CheckTextBoxes()
Dim Ct As Control
For Each Ct In UserForm1.Frame4.Controls
If TypeOf Ct Is TextBox Then
Select Case Ct.Name
Case "TextBox1"
If Ct.Text = "" Then Exit Sub
Case "TextBox2"
If Ct.Text = "" Then Exit Sub
Case "TextBox3"
If Ct.Text = "" Then Exit Sub
Case "TextBox4"
If Ct.Text = "" Then Exit Sub
Case "TextBox5"
If Ct.Text = "" Then Exit Sub
End Select
End If
Next Ct
CommandButton3.Enabled = True
End Sub

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

Сообщение Sedge » 29.07.2005 (Пт) 12:27

Ошибки здесь нет.
А какой смысл в цикле For Each, если в конечном итоге контролы все равно перебираются If'ом?

След.

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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 68

    TopList