Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6. Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты. Читайте требования к создаваемым темам.
Подскажите кто делал на VBA for application проги, типа которая будет скачивать файлы эксель, проводить расчёты и создавать файлы эксель и выгружать данные туда. (ну типа строить там разные таблицы, графики).
конкретные вопросы:
1. Есть ли встроенный объект для записи историй по результатам.
2. Как запускать ворд через VBA и закачивать туда результаты
(ну это я знаю хочу узнать другие методы, мой метод геморройный)
3. в какие ещё объекты массивы можно записывать информацию кроме массивов и структурированных записей массивов.
4. как сделать так, чтобы эту прогу запускать не через редактор VBA а через ярлык или открытие файла.
если ещё вопросы будут я допишу.
Кто может помогите....
есть десять текстбоксов и одна кнопка.
кнопка недоступна.
но когда все текстбоксы заполнены () тогда кнопка доступна.
заполняются тексбоксы в случайном порядке.
когда последний текстбокс заполняется (а последним может быть любой) то кнопка открывается.
В VBA, ввиду отсутствия массива контролов, это делается путём написания своего обработчика события Change для каждого текстбокса. В обработчике проверять, не пуст ли хоть один.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
ну как не понял.
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. А я хочу сразу запускать форму.
как это сделать?
1. Всё равно не понял.
3. Снова не понял, раз тебе не подходят dim A() as records.
4. Обрабатывать событие Open соответствующего документа, для чего поместить соответствующий макрос в него же.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
слушай приятель.
я читал учебники по Дельфи и ВБА пять лет назад и знаю.
мы в иституте кроме обычных массивов и паскале и дельфи использовали массивы с собственным выделением памяти, и деревья.
Вот я и спрашиваю, можно использовать массивы такие в ВБА.
Я читал учебники по Delphi, C++, ассемблеру, VB6, VBA, VB .NET и C#. Я понятия не имею, что ты имеешь в виду под массивами с собственным выделением памяти. А деревья - вообще не массивы.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
информатику и программирование я изучал в МЭСИ,
у нас программирование там было 3 года подряд.
и нам объясняли про эти массивы. сначала сам выделяешь память под эти массивы, потом заполняешь их, работаешь с ними, а потом по завершении удаляешь, и освобождаешь память.
записывали мы их A^.
В учебниках, вообще ничего путного не пишут, самые банальные вещи, и в справке тоже много не найдёшь.
ну ладно может их уже и не используют.
Короче пулачается что кроме dim A() as string этого ничего нет?
да деревья не массивы а отедльный класс, но через них можно записывать массивы данных.
Массивы VB бывают статические и динамические.
Память под статические отводится автоматически в момент входа в процедуру и автоматически обнуляется.
Память под динамические отводится при вызове ReDim и автоматически обнуляется.
Я не знаю, в каком учебнике этого не написано.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
я же говорю, что это знаю.
мне нужно создавать массивы вручную. не автоматически.
в дельфи это можно делать, значит в ВБА нельзя или можно? может в книгах просто не пишут об этом.
бывает памяти не хватает, массивы огромные загружаю.
а если работать через БД то работает все по 8-10 часов.
оперативка 512 мб. процессор 3,2 мгц.
а по поводу объекта.
придётся самому его создавать что-ли?
ну типа объект массив который сохраняет все манипуляции проводимые с данными. как записная книжка.
Набор объектов характерен не для языка а для системы. В VBA можно использовать любой СОМ объект. Надо прогресс в отдельном окне - делай отдельную форму с прогрессом
Vilkov, похоже все занятия по информатике ты прогулял. Это невероятная глупость - использовать vba для работы с большими объемами данных. vba предназначен прежде всего для автоматизации работы приложений, в которые он встроен, а под твоими задачами он просто умрет. Пиши всю обработку данных на дельфях, если уж ты в них волокешь, а потом выгружай в эксель или куда там надо. Да и с прогрессбарами там будет попроще. Объектную модель экселя или ворда можно посмотреть нажав в них alt+f11 а потом f2. Как создать экземпляр activex-приложения в дельфях сам должен знать.
А вообще, более невнятных вопросов я еще не видел.
ЗЫ: Задать количество байтов для каждой переменной массива вручную нельзя, каждый элемент будет занимать столько места, сколько занимает переменная того типа, которым объявлен массив. vb вообще ограничен в манипуляциях с памятью.
...... и дело тут не в ограничениях ВБ, а просто в том, что это справедливо всегда - переменная в массиве всегда будет занимать столько же места сколько и вне его.
ну тогда лучше написать отедльную процедуру кот.
будет создавать форму, выводить её с прогрессом и потом убирать и удалять форму.
А то что плодить формы ненужные????
собственно я думал, что есть готовый объект, с прогрессом, ну типа как меседжбокс, только с прогрессом.
а ведь можно свой объект написать и подключить его таким макаром и потом работать????
никогда не писал свои объекты, только в учебных целях.
а где можно эл. литературы нарыть такого содержния?????
вот именно как этот объект описывать и потом компилировать.
Я раньше это в дельфи делал, а как в VBA знаете ????
Antonariy ну я уже делал такие программы на ВБА.
работали они нормально, только когда процесс записи в массивы и из массивов в тексбоксы, занимает долгое время. ну минуты 2-3.
кстати в дельфях по времени столько же.
у меня на работе дельфи нет....
только дома, но дома я не работаю, работы на работе хватает.
Ещё один вопрос.
чтобы скачать данные из файла ексель нужно его открыть и потом скачать и закрыть.
можно сделать так чтобы все эти опрерации выполнить, но файл на экране не маячил. Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??
И можно сделать так, чтобы вообще скачивать данные из файла ексель без его физического открытия?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??
Без экселя считать файл эксель, кажется, нельзя (хотя, если я ничего не путаю, что-то говорилось про control, который читает экселевские файлы, можешь попробовать поискать по сайту).
Чтобы на экране не мелькало, сделай объекту Excel проперти .Visible=False, тогда он станет невидимым.
Vilkov писал(а):И можно сделать так, чтобы вообще скачивать данные из файла ексель без его физического открытия?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??
За вопрос "Как прочитать файл, не открывая его" Рей обещал банить сразу
Чтоб на экране не мелькало, применяется application.screenupdating=false...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
Кто знает где ошибка?Я идиот! Убейте меня, кто-нибудь!??
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