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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 16:19   #1
Nasten'ka7
Пользователь
 
Регистрация: 27.01.2011
Сообщений: 56
Радость Долго работает код VBA

Здравствуйте! Вот эта штука долго работает. Проверила через Debug - затыкается на присвоении значений ячейкам.. Что можно сделать?



Dim i As Integer
Dim k As Integer
Dim J As Integer



Private Sub CommandButton1_Click()
DB.Activate

Dim i As Integer

i = 0

If i = 0 Then i = DB.Cells(1, 2).Value


DB.Cells(i, 1).Value = TextBox1.Text 'наименование клиента
DB.Cells(i, 2).Value = ComboBox8.Text ' имя менеджера
DB.Cells(i, 3).Value = ComboBox1.Text ' отдел
DB.Cells(i, 4).Value = ComboBox2.Text ' регион
DB.Cells(i, 5).Value = TextBox15.Text 'дата первого контакта
DB.Cells(i, 6).Value = TextBox16.Text ' дата последнего контакта
DB.Cells(i, 7).Value = TextBox17.Text ' дата следующего контакта
DB.Cells(i, 8).Value = ComboBox3.Text ' источник
DB.Cells(i, 9).Value = TextBox2.Text ' ФИО клиента
DB.Cells(i, 10).Value = TextBox11.Text ' Должность
DB.Cells(i, 11).Value = TextBox3.Text ' Тел клиента
DB.Cells(i, 12).Value = TextBox4.Text ' e-mail
DB.Cells(i, 13).Value = ComboBox4.Text ' отрасль клиента
DB.Cells(i, 14).Value = ComboBox6.Text ' процедура выбора
DB.Cells(i, 15).Value = ComboBox5.Text ' статус клиента
DB.Cells(i, 16).Value = TextBox9.Text ' продукция
DB.Cells(i, 17).Value = ComboBox7.Text ' тип работ
DB.Cells(i, 18).Value = TextBox13.Text 'потенциал
DB.Cells(i, 19).Value = TextBox14.Text 'комментарии
i = i + 1
Exit Sub

End Sub
Nasten'ka7 вне форума Ответить с цитированием
Старый 04.05.2011, 16:36   #2
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Переменная i объявлена локально и глобально?о_О


может имеет смысл в форме использовать свойсто tag эл. управ, где tag номер столбца.

и перечислять эл. управ.

в виде
Код:
sub s
Static i as integer

For each cN in  UserForm1.Controls
if vba.len(cn.tag)<>0 then
Sheets("DB").Cells(i, cn.tag).Value=cn.text
end if
next
i=i+1

end sub
WizarD.89 вне форума Ответить с цитированием
Старый 04.05.2011, 16:43   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Замените весь свой код на это:

Код:
Private Sub CommandButton1_Click()
    Dim i As Long    ' строк бывает больше 32 тысяч...
    ' получаем номер очередной пустой строки в переменную i
    i = Db.Range("A" & Db.Rows.Count).End(xlUp).Row + 1

    Db.Cells(i, 1).Value = TextBox1.Text    'наименование клиента
    Db.Cells(i, 2).Value = ComboBox8.Text    ' имя менеджера
    Db.Cells(i, 3).Value = ComboBox1.Text    ' отдел
    Db.Cells(i, 4).Value = ComboBox2.Text    ' регион
    Db.Cells(i, 5).Value = TextBox15.Text    'дата первого контакта
    Db.Cells(i, 6).Value = TextBox16.Text    ' дата последнего контакта
    Db.Cells(i, 7).Value = TextBox17.Text    ' дата следующего контакта
    Db.Cells(i, 8).Value = ComboBox3.Text    ' источник
    Db.Cells(i, 9).Value = TextBox2.Text    ' ФИО клиента
    Db.Cells(i, 10).Value = TextBox11.Text    ' Должность
    Db.Cells(i, 11).Value = TextBox3.Text    ' Тел клиента
    Db.Cells(i, 12).Value = TextBox4.Text    ' e-mail
    Db.Cells(i, 13).Value = ComboBox4.Text    ' отрасль клиента
    Db.Cells(i, 14).Value = ComboBox6.Text    ' процедура выбора
    Db.Cells(i, 15).Value = ComboBox5.Text    ' статус клиента
    Db.Cells(i, 16).Value = TextBox9.Text    ' продукция
    Db.Cells(i, 17).Value = ComboBox7.Text    ' тип работ
    Db.Cells(i, 18).Value = TextBox13.Text    'потенциал
    Db.Cells(i, 19).Value = TextBox14.Text    'комментарии
End Sub
Цитата:
Вот эта штука долго работает
Эта штука работает моментально - если правильно пользоваться этим макросом (запускать его ОДИН раз)

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

Последний раз редактировалось EducatedFool; 04.05.2011 в 16:45.
EducatedFool вне форума Ответить с цитированием
Старый 04.05.2011, 16:52   #4
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

EducatedFool

интересный участок кода)
Код:
   i = Db.Range("A" & Db.Rows.Count).End(xlUp).Row + 1
а можно узнать как это работает.
WizarD.89 вне форума Ответить с цитированием
Старый 04.05.2011, 17:00   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
можно узнать как это работает
можно даже увидеть:
1) выделяете самую последнюю (Db.Rows.Count) ячейку в столбце "A" - это будет ячейка Db.Range("A" & Db.Rows.Count)
2) нажимаете комбинацию клавиш Ctrl + <стрелка вверх> (.End(xlUp)) для перехода к последней заполненной ячейке в этом столбце
3) смотрите её номер строки (.Row) - и путём прибавления единицы ( + 1) получаете номер следующей строки, доступной для ввода данных
EducatedFool вне форума Ответить с цитированием
Старый 05.05.2011, 10:18   #6
Nasten'ka7
Пользователь
 
Регистрация: 27.01.2011
Сообщений: 56
Радость

Большое спасибо!!!
Nasten'ka7 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает пример из Хелпа по VBA CaptainNemo Microsoft Office Excel 2 08.02.2013 20:49
VBA, не работает скрипт Domain Microsoft Office Excel 2 04.10.2010 11:07
Windows Application not responding, когда долго работает цикл serres Общие вопросы .NET 5 18.02.2010 13:45
Shared файл. Долго работает. Jarik Microsoft Office Excel 3 21.09.2009 12:29