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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2013, 17:20   #1
Вадим12091965
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 143
По умолчанию Как сократить код?

Всем привет. Написал код, в котором пока 171 блок, а планировалось около 600, но мне сейчас уже выдоается ошибка, что процедура большая. Что можно сделать? Начало кода:
Код:
Private Sub Treeview1_NodeClick(ByVal Node As MSComctlLib.Node)
Dim ImagePath As String
        ImagePath = ThisWorkbook.Path & "\Image\"
         If TreeView1.SelectedItem = "Для вытяжки-600" And IsExists(ImagePath & "001.bmp") Then
                Image1.Picture = LoadPicture(ImagePath & "001.bmp")
                 End If
                If TreeView1.SelectedItem = "Для вытяжки-600" Then
                TextBox19.Tag = 600
                TextBox19.Text = 600
                TextBox2.Tag = 300
                TextBox2.Text = 300
                TextBox3.Tag = 720
                TextBox3.Text = 720
                TextBox4.Tag = 1
                TextBox4.Text = 1
                End If
         If TreeView1.SelectedItem = "1 откидная дверь R1000-300" And IsExists(ImagePath & "002.bmp") Then
                Image1.Picture = LoadPicture(ImagePath & "002.bmp")
                 End If
                If TreeView1.SelectedItem = "1 откидная дверь R1000-300" Then
                TextBox19.Tag = 300
                TextBox19.Text = 300
                TextBox2.Tag = 300
                TextBox2.Text = 300
                TextBox3.Tag = 720
                TextBox3.Text = 720
                TextBox4.Tag = 1
                TextBox4.Text = 1
                End If
        If TreeView1.SelectedItem = "1 откидная дверь R1000-350" And IsExists(ImagePath & "002.bmp") Then
                Image1.Picture = LoadPicture(ImagePath & "002.bmp")
                 End If
                If TreeView1.SelectedItem = "1 откидная дверь R1000-350" Then
                TextBox19.Tag = 350
                TextBox19.Text = 350
                TextBox2.Tag = 300
                TextBox2.Text = 300
                TextBox3.Tag = 720
                TextBox3.Text = 720
                TextBox4.Tag = 1
                TextBox4.Text = 1
                End If
и т.д.

Последний раз редактировалось Stilet; 15.09.2013 в 17:55.
Вадим12091965 вне форума Ответить с цитированием
Старый 15.09.2013, 17:34   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Если так сделаете, уже на много сократите код
Код:
Sub m()
    If TreeView1.SelectedItem = "Для вытяжки-600" Then Call TextValue(600, 300, 720, 1)
    If TreeView1.SelectedItem = "1 откидная дверь R1000-300" Then Call TextValue(300, 300, 720, 1)
End Sub

Sub TextValue(ByVal t19 As Variant, ByVal t2 As Variant, ByVal t3 As Variant, ByVal t4 As Variant)
    TextBox19.Tag = t19
    TextBox19.Text = t19
    TextBox2.Tag = t2
    TextBox2.Text = t2
    TextBox3.Tag = t3
    TextBox3.Text = t3
    TextBox4.Tag = t4
    TextBox4.Text = t4
End Sub
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 15.09.2013, 20:36   #3
Вадим12091965
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 143
По умолчанию

Спасибо, что ответили. Попробовал ваш код. В текстбоксы данные не приходят. Поставил после каждой строки End If - без изменений.
Sub m()
If TreeView1.SelectedItem = "Äëÿ âûòÿæêè-600" Then Call TextValue(600, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-300" Then Call TextValue(300, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-350" Then Call TextValue(350, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-400" Then Call TextValue(400, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-450" Then Call TextValue(450, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-500" Then Call TextValue(500, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-550" Then Call TextValue(550, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-600" Then Call TextValue(600, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-650" Then Call TextValue(650, 300, 720, 1)
End If
If TreeView1.SelectedItem = "1 îòêèäíàÿ äâåðü R1000-700" Then Call TextValue(700, 300, 720, 1)
End If

End Sub
Sub TextValue(ByVal t19 As Variant, ByVal t2 As Variant, ByVal t3 As Variant, ByVal t4 As Variant)
TextBox19.Tag = t19
TextBox19.Text = t19
TextBox2.Tag = t2
TextBox2.Text = t2
TextBox3.Tag = t3
TextBox3.Text = t3
TextBox4.Tag = t4
TextBox4.Text = t4
End Sub
Вадим12091965 вне форума Ответить с цитированием
Старый 15.09.2013, 20:40   #4
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Хз, чот значит криво сделали! Должно работать.
Приложите файл будем кумекать...
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 16.09.2013, 18:35   #5
Вадим12091965
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 143
По умолчанию

Попробовал так
Код:
Private Sub Treeview1_NodeClick(ByVal Node As MSComctlLib.Node)
Dim ImagePath As String
        ImagePath = ThisWorkbook.Path & "\Image\"
        If TreeView1.SelectedItem = "500" And IsExists(ImagePath & "028.bmp") Then
                Image1.Picture = LoadPicture(ImagePath & "028.bmp")
                Call TextValue(500, 300, 360, 0)
                 End If
         If TreeView1.SelectedItem = "600" And IsExists(ImagePath & "028.bmp") Then
                Image1.Picture = LoadPicture(ImagePath & "028.bmp")
                Call TextValue(600, 300, 360, 0)
                 End If
и т. д. - работает.
Посмотрю на какую длину хватит. Может весь код поместится. Спасибо.




________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 16.09.2013 в 22:37.
Вадим12091965 вне форума Ответить с цитированием
Старый 17.09.2013, 18:47   #6
Вадим12091965
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 143
По умолчанию

Ну вот я и приплыл. 2/3 кода написал и снова ошибка что код длинный. Посмотрите что еще можно сделать. Файл вложил. спасибо.
Вложения
Тип файла: rar 0111.rar (83.4 Кб, 11 просмотров)
Вадим12091965 вне форума Ответить с цитированием
Старый 17.09.2013, 19:17   #7
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Да уж, "букафф" много! Жалко такой труд.
Я в таких случаях выношу всевозможные процедуры в отдельный модуль.
В модуле формы оставляю только инициализацию.
Посмотрите пробу в файле, сделал для двух if, там все понятно.
Но может подправить надо будет, проверить не получается, нет компонента, а заморачиваться с установкой/подключением некогда.
Вложения
Тип файла: zip 0111_2.zip (88.6 Кб, 13 просмотров)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 17.09.2013, 19:36   #8
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Думаю, еще можно несколько сократить код, назначив повторяющимся фразам строковые переменные.
Навскидку, у Вас повторяются многие фразы, например "Кухонные модули-Шкафы-Н=720-1 распашная плоская дверь".
Назначьте переменную этой фразе
Код:
Dim фраза1 As String
фраза1 = "Кухонные модули-Шкафы-Н=720-1 распашная плоская дверь"
и т.д. и используйте в коде уже эту переменную
глядишь код и уменьшится
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 17.09.2013, 21:46   #9
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Вот если вы из этой процедуры
Код:
Private Sub UserForm_Initialize()
все данные вынесите на отдельный лист в эксель и будите добавлять в ваше дерево через цикл, то съэкономите 700 строк кода
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 18.09.2013, 16:06   #10
Вадим12091965
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 143
По умолчанию

Дерево у меня заполнено полностью. А вот выбор ветки для получения текстов и картинки, здесь проблема. Может вернуться в начало, как предлагал Watcher_1:
Код:
Sub m()
    If TreeView1.SelectedItem = "Для вытяжки-600" Then Call TextValue(600, 300, 720, 1)
    If TreeView1.SelectedItem = "1 откидная дверь R1000-300" Then Call TextValue(300, 300, 720, 1)
End Sub

Sub TextValue(ByVal t19 As Variant, ByVal t2 As Variant, ByVal t3 As Variant, ByVal t4 As Variant)
    TextBox19.Tag = t19
    TextBox19.Text = t19
    TextBox2.Tag = t2
    TextBox2.Text = t2
    TextBox3.Tag = t3
    TextBox3.Text = t3
    TextBox4.Tag = t4
    TextBox4.Text = t4
End Sub
только добавить переменную или константу для Image1, если это возможно. То есть сократить коды
Код:
If TreeView1.SelectedItem = "500" And IsExists(ImagePath & "028.bmp") Then
                Image1.Picture = LoadPicture(ImagePath & "028.bmp")
Может я несу ерунду, просто опыта почти нет.
Вадим12091965 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сократить код kostan3 Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2013 17:24
Как сократить код Вадим12091965 Microsoft Office Excel 6 28.10.2012 11:04
как можно сократить код sergio280888 БД в Delphi 0 17.04.2011 17:09
Как сократить код DLL ProgDel Общие вопросы Delphi 3 16.02.2010 21:12
Как можно сократить код jocry Общие вопросы Delphi 2 20.01.2009 08:35