Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Не Excel, а база данных!

Автор d7d1cd, 28.02.2013, 20:57

« назад - далее »

d7d1cd

Привет всем. На работе из приложений установлены только Word и Excel 2003. Возникла необходимость написать что-то наподобие базы данных. Планирую сделать все в книге Excel.

Все будет выглядеть так:
1. При открытии книги выходит окно с кнопками выбора что надо сделать в базе данных (добавить запись, удалить, редактировать, создать отчет и т. д.).
2. Пользователь жмет желаемую кнопку, текущее окно скрывается и открывается другое.
3. В этом другом окне пользователь что-то вводит, выбирает и т. д. Потом жмет "Сохранить", "Удалить" и т. д.
4. После нажатия вся информация заносится в определенные листы книги и сама книга сохраняется.
5. Пользователь снова попадает в окно из пункта 1.
6. Если пользователь закрывает окно из пункта 1, то вся книга закрывается.

Теперь вопросы:
1. Мне надо чтобы пользователь не смог добраться к самим листам в книге. Все окна я вывожу модальными, но в таком случае если открыт другой файл Excel, то и в нем нельзя работать. Как быть?
2. В окне мне надо разместить некоторые элементы управления, которых нет в наборе. Например мне нужна таблица. Такая как в Delphi, например. Это можно как-то осуществить или придется довольствоваться тем, что есть?

kuklp

1.Сделать все все листы veryhidden. Оставить один лист-заставку.
2. Можно использовать многоколоночный ListBox. Это стандартный элемент для юзерформ.
P.S. а вообще Эксель - табличный процессор. Можно использовать его и как базу данных но увы, со всеми вытекающими ограничениями. В Ворде, и в Эксе можно еще и рисовать, но это будет далеко не фотошоп и не автокад.:-)
Удачи!
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

d7d1cd

Цитата: KuklP от 01.03.2013, 19:24
1.Сделать все все листы veryhidden. Оставить один лист-заставку.

Как это сделать?

kuklp

Попробуйте выполнить:
Public Sub www()
    Sheets(1).Visible = 2
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

d7d1cd

Все получилось, но не решается вопрос номер 1: листы скрыты, но ведь открыто окно и пользователь не может работать с другим файлом Excel...

kuklp

Цитата: d7d1cd от 02.03.2013, 10:59
открыто окно и пользователь не может работать с другим файлом Excel...
Стесняюсь спросить - почему? Что мешает? Форма? Делайте ее немодальной, или по событиям книги Workbook_Activate, Workbook_Deactivate вообще ее прячьте-отображайте. Это элементарные вещи. Без обид, но если Вы не знаете этого и никогда не писали на ВБА, может есть смысл начать с чего-нибудь попроще? Тяжело Вам будет.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

d7d1cd

#6
Цитата: KuklP от 02.03.2013, 14:45
Стесняюсь спросить - почему? Что мешает? Форма? Делайте ее немодальной, или по событиям книги Workbook_Activate, Workbook_Deactivate вообще ее прячьте-отображайте. Это элементарные вещи. Без обид, но если Вы не знаете этого и никогда не писали на ВБА, может есть смысл начать с чего-нибудь попроще? Тяжело Вам будет.

Я не писал на VBA. Я писал на С++ и не в встроенном редакторе офисных программ, а в отдельной системе программирования. Из-за этого есть некоторые сложности.
Немодальной форму делать не хочется, а вот прятать и отображать по событиям активации\деактивации - это подходит! Спасибо, что помогаете!
Попробовал сделать так:
Private Sub Workbook_Activate()
UserForm1.Show
End Sub

Private Sub Workbook_Deactivate()
UserForm1.Hide
End Sub


При открытии выводится окно, но если попытаться открыть другой файл Excel, то он не открывается. Если же открыть его заранее, а потом открыть файл с макросом, то снова открывается окно и я не могу перейти к другому файлу для редактирования.  :-[

ikki

Цитата: d7d1cd от 28.02.2013, 20:57Например мне нужна таблица.
ну так и используйте лист Excel.
вообще не факт, что для такого варианта обязательно нужны именно формы.
можно весь интерфейс реализовать на листах.


d7d1cd

Цитата: ikki от 02.03.2013, 17:55
ну так и используйте лист Excel.
вообще не факт, что для такого варианта обязательно нужны именно формы.
можно весь интерфейс реализовать на листах.

Можно, но хочется сделать именно формами.

d7d1cd

Снова вопрос, относящийся к создаваемой базе данных.

В этой базе данных планируется работа какого-то количества пользователей (на данный момент их 13). Естественно, все они должны иметь доступ к базе, должны добавлять в нее информацию, удалять ее и редактировать. Сам файл Excel будет лежать в общедоступной сетевой папке.

Я планирую сделать файл общедоступным. Когда кто-то из пользователей захочет сделать запись в базу или изменить ее, то мой макрос предварительно на выделенном листе в книге сделает отметку о том, что файл занят, сохранит его и только потом внесет всю информацию, снимет признак занятости файла и снова сохранит. Перед каждой записью, в свою очередь, макрос проверит, не стоит ли признак занятости файла и если стоит, то будет ждать, пока не будет дан зеленый свет.

Подскажите, данный алгоритм применим или можно как-то сделать по другому?