Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.01.2009, 17:21   #1
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию Помогите с текстбоксами

У меня вопрос. В VBA форме создано 450 текстбоксов. Код работы постоянно повторяется с определенной последовательностью. Возможен ли вариант написание какого-то макроса чтоб не повтараять код n-ое количество раз?
SIV84 вне форума
Старый 09.01.2009, 17:29   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

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

Цитата:
Возможен ли вариант написание какого-то макроса чтоб не повтараять код n-ое количество раз?
В большинстве случаев это возможно. Но надо хотя бы знать, что Вы хотите получить от этих текстбоксов...

Опишите свою задачу подробнее.
EducatedFool вне форума
Старый 09.01.2009, 17:40   #3
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

Вы знаете, чем больше я посещаю форумы по вба, тем больле расстраиваюсь глубиной своих знаний в этой теме. Может это и смешно, но явсе 450 рисовал вручную. Я для своей фирмы пишу программу по бухучету. Переделываю программу, чтобы она максимально напоминала 1-С. На формк я создал 40 строк по 9 текстбоксов в каждом. Стандартный набот: № п/п, код товара, характеристика, едю издерения, кол-во, цена и сумма. Заполнение идет по коду товара, с определенными условиями и лошикой заполнения. Алгоритм заполнения стандартный. 10 строк я набил. Потратил на это пол дня. Отсюда и задался вопросом об автоматизации такого процесса.
SIV84 вне форума
Старый 09.01.2009, 17:47   #4
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

Вы знаете, чем больше я посещаю форумы по вба, тем больле расстраиваюсь глубиной своих знаний в этой теме. Может это и смешно, но явсе 450 рисовал вручную. Я для своей фирмы пишу программу по бухучету. Переделываю программу, чтобы она максимально напоминала 1-С. На формк я создал 40 строк по 9 текстбоксов в каждом. Стандартный набот: № п/п, код товара, характеристика, едю издерения, кол-во, цена и сумма. Заполнение идет по коду товара, с определенными условиями и лошикой заполнения. Алгоритм заполнения стандартный. 10 строк я набил. Потратил на это пол дня. Отсюда и задался вопросом об автоматизации такого процесса.
SIV84 вне форума
Старый 09.01.2009, 18:23   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
На форме я создал 40 строк по 9 текстбоксов в каждом
Я бы такого не смог. Честно
Специально сейчас попробовал засунуть на форму текстбоксы по 40 штук в столбце. Не получилось
Вроде и монитор 19", и форма получилась на весь экран, а влезло всего лишь 36...

Ну, можно, конечно, их ещё уменьшить, и они влезут, но как читать-то потом, что в них написано?

Так что, создав форму с 360-ю текстбоксами, Вы сделали невозможное

Скриншот формы в студию, если можно


А автоматизировать всё это, конечно, можно.
Но нужно смотреть Ваш код. Иначе посоветовать что-либо дельное весьма сложно.
EducatedFool вне форума
Старый 09.01.2009, 18:34   #6
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

Куда я могу сбросить код программы?
SIV84 вне форума
Старый 09.01.2009, 18:44   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Прикрепите к сообщению Ваш файл.

Просто "сбросить код" будет недостаточно - воссоздать форму мне не по силам.

В расширенном режиме (кнопка под полем для ввода сообщения) к сообщению можно прикрепить файл.

Код вставляется прямо в сообщение, оформляется тегом [CОDE] код [/CОDE] (значок # над полем сообщения)
EducatedFool вне форума
Старый 09.01.2009, 18:48   #8
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

вот здесь очень много полезной информации.
см.вложение : создаешь модуль - insert - class module
называешь как нравиться например MyTextBox
в нем пишеш:
Код:
public withEvents tb as MSForms.TextBox
private sub tb_Change()
   'пишеш то что должны делать все твои текстбоксы
end sub
создаешь обычный модуль и назови его например vars
в нем пишеш:
Код:
public arrOfTextBox() as New MyTextBox
в нужной форме (в которой надо со всеми текст боксами замутить) пишеш в какой-нибудь процедуре(лучше в UserForm_Initialize():
Код:
ReDim vars.arrOfTextBox(0)
for each i in controls
  if TypeName(i) = "TextBox" then
    ReDim Preserve vars.arrOfTextBox(Ubound(arrOfTextBox,1)+1)
    set vars.arrOfTextBox(Ubound(vars.arrOfTextBox,1)).tb = i
  end if
next i
и всем текстбоксам в товей форме будут присвоены одинаковые события
Стоит заметить, что если у тебя на форме есть Frame, MultiPage и т.д., то последний код стоит заменить на:
Код:
ReDim vars.arrOfTextBox(0)
for each i in controls
  if TypeName(i) = "TextBox" then
    ReDim Preserve vars.arrOfTextBox(Ubound(arrOfTextBox,1)+1)
    set vars.arrOfTextBox(Ubound(vars.arrOfTextBox,1)).tb = i
  elseif TypeName(i) = "Frame" or TypeName(i) = "MultiPage" then
    for each a in i.controls
      if TypeName(a) = "TextBox" then
        ReDim Preserve vars.arrOfTextBox(Ubound(arrOfTextBox,1)+1)
        set vars.arrOfTextBox(Ubound(vars.arrOfTextBox,1)).tb = i
      end if
    next a
  end if
next i
Вложения
Тип файла: rar пример класса.rar (12.0 Кб, 34 просмотров)
tolikman вне форума
Старый 09.01.2009, 18:50   #9
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

Я бадаюсь на 27формой. Нашел вариант решения с помощью модуля класса. Но что с ним делать я не знаю. Может вы что-то подскажете.
SIV84 вне форума
Старый 09.01.2009, 18:58   #10
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

По идее в приложении прога
Вложения
Тип файла: rar Разработка проги.rar (913.0 Кб, 48 просмотров)
SIV84 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц