Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 19.07.2011
Сообщений: 285

Помогите сократить код

12.02.2012, 16:34. Показов 1756. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли этот код сократить сделав его по короче, но с теми же функциями.
Форма выполняет следующую операцию вписывая данные в TextBox-ах, данные заполняются по строчно т.е. если в ComboBox-е например товар «А», то от А6 до FZ6 заполняются данные
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Private Sub CommandButton1_Click()
If ComboBox1.Text = Worksheets("Mutq").Range("A6") Then
With Worksheets("Mutq").Cells(6, 256).End(xlToLeft)
     .Item(1, 2) = TextBox1.Text
     .Item(1, 3) = TextBox2.Text
     .Item(1, 4) = TextBox3.Text
          .Item(1, 5) = TextBox2.Text * TextBox3.Text
End With
 
ElseIf ComboBox1.Text = Worksheets("Mutq").Range("A7") Then
With Worksheets("Mutq").Cells(7, 256).End(xlToLeft)
     .Item(1, 2) = TextBox1.Text
     .Item(1, 3) = TextBox2.Text
     .Item(1, 4) = TextBox3.Text
     .Item(1, 5) = TextBox2.Text * TextBox3.Text
End With
 
ElseIf ComboBox1.Text = Worksheets("Mutq").Range("A8") Then
With Worksheets("Mutq").Cells(8, 256).End(xlToLeft)
     .Item(1, 2) = TextBox1.Text
     .Item(1, 3) = TextBox2.Text
     .Item(1, 4) = TextBox3.Text
     .Item(1, 5) = TextBox2.Text * TextBox3.Text
End With
ElseIf ComboBox1.Text = Worksheets("Mutq").Range("A9") Then
With Worksheets("Mutq").Cells(9, 256).End(xlToLeft)
     .Item(1, 2) = TextBox1.Text
     .Item(1, 3) = TextBox2.Text
     .Item(1, 4) = TextBox3.Text
     .Item(1, 5) = TextBox2.Text * TextBox3.Text
End With
ElseIf ComboBox1.Text = Worksheets("Mutq").Range("A10") Then
With Worksheets("Mutq").Cells(10, 256).End(xlToLeft)
     .Item(1, 2) = TextBox1.Text
     .Item(1, 3) = TextBox2.Text
     .Item(1, 4) = TextBox3.Text
     .Item(1, 5) = TextBox2.Text * TextBox3.Text
End With
ElseIf ComboBox1.Text = Worksheets("Mutq").Range("A11") Then
With Worksheets("Mutq").Cells(11, 256).End(xlToLeft)
     .Item(1, 2) = TextBox1.Text
     .Item(1, 3) = TextBox2.Text
     .Item(1, 4) = TextBox3.Text
     .Item(1, 5) = TextBox2.Text * TextBox3.Text
End With
‘…………………и т.д. до Range("A300")
End If
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2012, 16:34
Ответы с готовыми решениями:

Помогите как сократить код
В пользовательской форме 60 комбобоксов. В процедуре UserForm_Activate()написал: ComboBox1.RowSource =...

Слишком длинный типовой код в UserForm VBA. Как сократить код?
Программа выдает ошибку о слишком длинном коде. 1. Есть форма, в форме Multipage с 30 вкладками, на каждой вкладке 20 кнопок. 2. Тексты...

Сократить код
Hello World, помогите придумать обработку замены + 1 +2 +3 итд в цикл, тем самым сократить код For n = 1 To 41 Step 10 If...

12
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
12.02.2012, 17:26
покороче
построчно
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub GetMyProduct(ByVal plngRow As Long)
 
    If ComboBox1.Text = Worksheets("Mutq").Range("A" & CStr(plngRow)) Then
 
        With Worksheets("Mutq").Cells(plngRow, 256).End(xlToLeft)
            .Item(1, 2) = TextBox1.Text
            .Item(1, 3) = TextBox2.Text
            .Item(1, 4) = TextBox3.Text
            
            If IsNumeric(TextBox2.Text) And IsNumeric(TextBox3.Text) Then
                    .Item(1, 5) = Val(TextBox2.Text) * Val(TextBox3.Text)
            End If
 
        End With
    End If
 
End Sub
0
1 / 1 / 0
Регистрация: 19.07.2011
Сообщений: 285
12.02.2012, 18:05  [ТС]
Код даёт ошибку, нужно код прикрепить к кнопке
А что касается Private Sub GetMyProduct(ByVal plngRow As Long) я не понял для чего это надо
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
12.02.2012, 18:57
Kakuyu oshibku?
Kod prikrepit'? Posmotrite kak rabotayut events. V vashem sluchae:

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub CommandButton1_Click()
 
Worksheets("Mutq").Activate
 
for lngRow = 6 to 300
    GetMyProduct plngRow
next lngRow
 
end sub
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
12.02.2012, 19:08
Esli ne nado vse 294 sluchaya, to:
Visual Basic
1
2
3
4
Private Sub CommandButton1_Click()
  Worksheets("Mutq").Activate
  GetMyProduct 124 'primer dlya "A124"
end sub
0
1 / 1 / 0
Регистрация: 19.07.2011
Сообщений: 285
13.02.2012, 10:20  [ТС]
Esli ne nado vse 294 sluchaya, to:
Нужно для всех 294
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub GetMyProduct(ByVal plngRow As Long)
If ComboBox1.Text = Worksheets("Mutq").Range("A" & CStr(plngRow)) Then
With Worksheets("Mutq").Cells(plngRow, 256).End(xlToLeft)
.Item(1, 2) = TextBox1.Text
.Item(1, 3) = TextBox2.Text
.Item(1, 4) = TextBox3.Text
If IsNumeric(TextBox2.Text) And IsNumeric(TextBox3.Text) Then
.Item(1, 5) = Val(TextBox2.Text) * Val(TextBox3.Text)
End If
End With
End If
End Sub
Нужно прикрепить её на форму, а когда я прикрепляю на формувыдаёт ошибку 9 или 1004
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
13.02.2012, 14:20
Ну так используйте мой пример для всех 294 (где цикл). Ошибка 9 - часто из-за неверного имени листа или книги.Проверьте их. 1004 - ошибка автоматизации; скорее всего лист не активирован. Вы вставили Worksheets("Mutq").Activate ?

Или вы неточно воспрозводите мой пример или что-то недоговариваете. У меня все работает. Имейте ввиду - это очень примитивный пример. Там нечему ломаться, если использовать в новой книге без другого кода и когда все используемые контроли и листы находятся в зоне "видимости" кода.

В конце концов, если не работает мой пример, то и ваш тоже не должен. Мой то код - и есть в сущности ваш.

У меня ощущение, что вы не совсем знакомы с самыми основами программирования на VBA, раз вас ставят в тупик вещи, которых как правило даже не замечаешь.

Читайте учебник и делайте примеры из него. От простого - к сложному. Не критика - совет. Вы молодец, что настойчиво занимаетесь новым и без сомнения трудным для вас делом.

vladconn

0
1 / 1 / 0
Регистрация: 19.07.2011
Сообщений: 285
13.02.2012, 18:05  [ТС]
Влад джан вот что это
Private Sub GetMyProduct(ByVal plngRow As Long)
Если кнопка на форме то ни как не работает
Если модуль тогда откуда TextBox-ы
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
13.02.2012, 20:08
Subroutine v forme, tam je i text boxi, verno? Uprostite i dajte vash file.
0
1 / 1 / 0
Регистрация: 19.07.2011
Сообщений: 285
14.02.2012, 09:32  [ТС]
Вот пример
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
14.02.2012, 15:02
Ser Artur

1. В модуле UserForm1 вставьте в CommandButton1_Click

Dim lngRow As Long

Worksheets("Mutq").Activate

For lngRow = 6 To 300
GetMyProduct lngRow
Next lngRow

2. Где Option Explicit?
3. Почему все имена контролей не несут смысла? Это что - лень или незнание?
4. Где поддержка ошибок???
5. Почему код не задокументирован?
6. Что это:
If Selection.Column = 1 And (Target.Text <> "" Or Target.Text <> Null) Then
Тогда уж:
If Selection.Column = 1 And (Target.Text <> "" Or Not Target.Text Is Null) Then
Как строка может быть Null? Она может быть vbNullString.
7. Где индентация?
8. Сгрузите MZTools и пользуйтесь им.
9. Если будет ошибка на мой код, дайте сценарий (но только на эту ошибку).

Настоящего сэра давно бы изгнали из Палестины за такой код (шучу, шучу)

vladconn

0
1 / 1 / 0
Регистрация: 19.07.2011
Сообщений: 285
14.02.2012, 16:06  [ТС]
Вот код, а что касается сэра, то он зашишал Иерусалим и никто его не изгонял/ничего личного/.
Тему можно закрыть Спасибо Всем "со мной страдаюшим".
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub CommandButton1_Click()
If IsNumeric(TextBox2.Value) = True And _
   IsNumeric(TextBox3.Value) = True And _
   TextBox1.Value <> "" And ComboBox1.Value <> "" Then
   For iRow% = 6 To 300
       If ComboBox1.Value = Worksheets("Mutq").Cells(iRow, 1).Value Then
          With Worksheets("Mutq").Cells(iRow%, 256).End(xlToLeft)
               .Item(1, 2) = TextBox1.Value
               .Item(1, 3) = TextBox2.Value
               .Item(1, 4) = TextBox3.Value
               .Item(1, 5) = TextBox2.Value * TextBox3.Value
           End With
       Exit For
       End If
    Next
Else
    MsgBox "До свиданья ... " & vbNewLine & _
           "Ибо нефиг баловаться", vbCritical, _
           "Ошибка пользователя !!!": Unload Me
End If
End Sub
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
14.02.2012, 19:10
Ser Artur,

Nado j - kakoe kstati sovpadenie - ya kak raz nedelyu nazad kupil 4-tomnik "Priklyuheniya korolya Artura". Esche ne otkrival - poidet pod elku na Noviy God. Vot tut eti priklyucheniya:

http://www.eastonpress.com/ViewProduct.asp?Sku=0462&Back=1&sMediaCo de=Q2006

Uspehov

vladconn
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2012, 19:10
Помогаю со студенческими работами здесь

Как сократить код
Пример написаного кода 'RAD 1 'A mm ///////////////////////////////// 'B1R1A If TextBoxB1R1A.Value = &quot;&quot; Then ...

Как можно сократить код
Sub Макрос2() ' ' Макрос2 Макрос ' ' Range(&quot;B20:B28&quot;).Select Range(&quot;B28&quot;).Activate Selection.Copy ...

Друзья немного сократить код VBA
Ребят, написал код. Но он слишком большой. очень много If. Как бы мне его сократить. Механика кода проста. Есть сводная таблица, он...

Создать новый макрос в Excel и сократить его код
Имеется задача Создайте новый макрос (назовите его Фамилия_Дата) для ввода вашей фамилии в ячейку А1 и формулу с функцией СЕГОДНЯ() в...

Как сократить код макроса и сделать цикл на 12 итераций?
Доброго времени суток. Поможете с циклом? Это автомакрос, который на указанном листе делает фильтр по критерию - Город, затем копирует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru