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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2011, 12:09   #1
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
Вопрос Возможно ли упростить макрос?

Привет всем!
Прошу помощи, возможно ли упростить следующий макрос?
Код:
If ActiveCell.Row = 3 Then
        With Worksheets(2)
            .Range("N8").Value = ComboBox14.Value
            .Range("O8").Value = ComboBox15.Value
            .Range("N9").Value = ComboBox16.Value
            .Range("O9").Value = ComboBox17.Value
            .Range("N10").Value = ComboBox18.Value
            .Range("O10").Value = ComboBox19.Value
            .Range("N11").Value = ComboBox20.Value
            .Range("O11").Value = ComboBox21.Value
        End With
        With Worksheets(3)
            .Range("N8").Value = ComboBox14.Value
            .Range("O8").Value = ComboBox15.Value
            .Range("N9").Value = ComboBox16.Value
            .Range("O9").Value = ComboBox17.Value
            .Range("N10").Value = ComboBox18.Value
            .Range("O10").Value = ComboBox19.Value
            .Range("N11").Value = ComboBox20.Value
            .Range("O11").Value = ComboBox21.Value
        End With
    End If
    
    If ActiveCell.Row = 4 Then
        With Worksheets(2)
            .Range("N18").Value = ComboBox14.Value
            .Range("O18").Value = ComboBox15.Value
            .Range("N19").Value = ComboBox16.Value
            .Range("O19").Value = ComboBox17.Value
            .Range("N20").Value = ComboBox18.Value
            .Range("O20").Value = ComboBox19.Value
            .Range("N21").Value = ComboBox20.Value
            .Range("O21").Value = ComboBox21.Value
        End With
        With Worksheets(3)
            .Range("N18").Value = ComboBox14.Value
            .Range("O18").Value = ComboBox15.Value
            .Range("N19").Value = ComboBox16.Value
            .Range("O19").Value = ComboBox17.Value
            .Range("N20").Value = ComboBox18.Value
            .Range("O20").Value = ComboBox19.Value
            .Range("N21").Value = ComboBox20.Value
            .Range("O21").Value = ComboBox21.Value
        End With
    End If
    
    If ActiveCell.Row = 5 Then
        With Worksheets(2)
            .Range("N28").Value = ComboBox14.Value
            .Range("O28").Value = ComboBox15.Value
            .Range("N29").Value = ComboBox16.Value
            .Range("O29").Value = ComboBox17.Value
            .Range("N30").Value = ComboBox18.Value
            .Range("O30").Value = ComboBox19.Value
            .Range("N31").Value = ComboBox20.Value
            .Range("O31").Value = ComboBox21.Value
        End With
        With Worksheets(3)
            .Range("N28").Value = ComboBox14.Value
            .Range("O28").Value = ComboBox15.Value
            .Range("N29").Value = ComboBox16.Value
            .Range("O29").Value = ComboBox17.Value
            .Range("N30").Value = ComboBox18.Value
            .Range("O30").Value = ComboBox19.Value
            .Range("N31").Value = ComboBox20.Value
            .Range("O31").Value = ComboBox21.Value
        End With
    End If
Заранее спасибо!
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 31.08.2011, 13:15   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Так пойдет?
Код:
Sub m()
    If ActiveCell.Row = 3 Then
        Call myCombo(2)
        Call myCombo(3)
    End If
    If ActiveCell.Row = 4 Then
        Call myCombo(2)
        Call myCombo(3)
    End If
    If ActiveCell.Row = 5 Then
        Call myCombo(2)
        Call myCombo(3)
    End If
End Sub

Sub myCombo(ByVal myN As Integer)
    With Worksheets(myN)
            .Range("N28").Value = ComboBox14.Value
            .Range("O28").Value = ComboBox15.Value
            .Range("N29").Value = ComboBox16.Value
            .Range("O29").Value = ComboBox17.Value
            .Range("N30").Value = ComboBox18.Value
            .Range("O30").Value = ComboBox19.Value
            .Range("N31").Value = ComboBox20.Value
            .Range("O31").Value = ComboBox21.Value
    End With
End Sub
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 31.08.2011, 13:29   #3
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Спасибо за ответ!
Проблема что меняются и ячейки куда вставляется результат. Это зависит от того какая строка была выбрана.

Код:
.Range("N28").Value = ComboBox14.Value
            .Range("O28").Value = ComboBox15.Value
            .Range("N29").Value = ComboBox16.Value
            .Range("O29").Value = ComboBox17.Value
            .Range("N30").Value = ComboBox18.Value
            .Range("O30").Value = ComboBox19.Value
            .Range("N31").Value = ComboBox20.Value
            .Range("O31").Value = ComboBox21.Value
Сравните
Код:
With Worksheets(2)
            .Range("N8").Value = ComboBox14.Value
            .Range("O8").Value = ComboBox15.Value
            .Range("N9").Value = ComboBox16.Value
            .Range("O9").Value = ComboBox17.Value
            .Range("N10").Value = ComboBox18.Value
            .Range("O10").Value = ComboBox19.Value
            .Range("N11").Value = ComboBox20.Value
            .Range("O11").Value = ComboBox21.Value
        End With
        With Worksheets(3)
            .Range("N8").Value = ComboBox14.Value
            .Range("O8").Value = ComboBox15.Value
            .Range("N9").Value = ComboBox16.Value
            .Range("O9").Value = ComboBox17.Value
            .Range("N10").Value = ComboBox18.Value
            .Range("O10").Value = ComboBox19.Value
            .Range("N11").Value = ComboBox20.Value
            .Range("O11").Value = ComboBox21.Value
        End With
С Уважением, Костик
KOSTIK1 вне форума Ответить с цитированием
Старый 31.08.2011, 13:37   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно и m упростить:
Код:
Sub m()
Select Case ActiveCell.Row
Case 3 To 5
        Call myCombo(2)
        Call myCombo(3)
End Select
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.08.2011, 13:46   #5
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Тогда так
Код:
Sub m()
    If ActiveCell.Row = 3 Then
        Call myCombo(2, 0)
        Call myCombo(3, 0)
    End If
    If ActiveCell.Row = 4 Then
        Call myCombo(2, 10)
        Call myCombo(3, 10)
    End If
    If ActiveCell.Row = 5 Then
        Call myCombo(2, 20)
        Call myCombo(3, 20)
    End If
End Sub

Sub myCombo(ByVal myN As Integer, myDec As Integer)
    With Worksheets(myN)
            .Range("N" & 8 + myDec).Value = ComboBox14.Value
            .Range("O" & 8 + myDec).Value = ComboBox15.Value
            .Range("N" & 9 + myDec).Value = ComboBox16.Value
            .Range("O" & 9 + myDec).Value = ComboBox17.Value
            .Range("N" & 10 + myDec).Value = ComboBox18.Value
            .Range("O" & 10 + myDec).Value = ComboBox19.Value
            .Range("N" & 11 + myDec).Value = ComboBox20.Value
            .Range("O" & 11 + myDec).Value = ComboBox21.Value
    End With
End Sub
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 31.08.2011, 13:50   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а так?
Код:
        Dim NumRow As Integer
     .....
        NumRow = ActiveCell.Row 
If NumRow >= 3 Then
       With Worksheets(2)
            .Range("N" & Trim(Str(NumRow - 3)) & "8").Value = ComboBox14.Value
            .Range("O" & Trim(Str(NumRow - 3)) & "8").Value = ComboBox15.Value
            .Range("N" & Trim(Str(NumRow - 3)) & "9").Value = ComboBox16.Value
            .Range("O" & Trim(Str(NumRow - 3)) & "9").Value = ComboBox17.Value
            .Range("N" & Trim(Str(NumRow + 1 - 3)) & "0").Value = ComboBox18.Value
            .Range("O" & Trim(Str(NumRow + 1 - 3)) & "0").Value = ComboBox19.Value
            .Range("N" & Trim(Str(NumRow + 1 - 3)) & "1").Value = ComboBox20.Value
            .Range("O" & Trim(Str(NumRow + 1 - 3)) & "1").Value = ComboBox21.Value
        End With
        With Worksheets(3)
            .Range("N" & Trim(Str(NumRow - 3)) & "8").Value = ComboBox14.Value
            .Range("O" & Trim(Str(NumRow - 3)) & "8").Value = ComboBox15.Value
            .Range("N" & Trim(Str(NumRow - 3)) & "9").Value = ComboBox16.Value
            .Range("O" & Trim(Str(NumRow - 3)) & "9").Value = ComboBox17.Value
            .Range("N" & Trim(Str(NumRow + 1 - 3)) & "0").Value = ComboBox18.Value
            .Range("O" & Trim(Str(NumRow + 1 - 3)) & "0").Value = ComboBox19.Value
            .Range("N" & Trim(Str(NumRow + 1 - 3)) & "1").Value = ComboBox20.Value
            .Range("O" & Trim(Str(NumRow + 1 - 3)) & "1").Value = ComboBox21.Value
        End With
    End If
End If

упс... Watcher_1 опередил меня...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.08.2011, 14:01   #7
KOSTIK1
Форумчанин
 
Аватар для KOSTIK1
 
Регистрация: 06.10.2009
Сообщений: 193
По умолчанию

Гениально Watcher_1!
Большое спасибо.
И вам спасибо Serge_Bliznykov за труд!
С Уважением, Костик

Последний раз редактировалось KOSTIK1; 31.08.2011 в 14:03.
KOSTIK1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно упростить этот макрос? valerij Microsoft Office Excel 84 14.09.2014 16:17
как возможно упростить? monogramm Общие вопросы по Java, Java SE, Kotlin 3 01.06.2011 01:40
Упростить макрос valerij Microsoft Office Excel 8 20.01.2011 12:10
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55
Макрос с диалоговым окном. Возможно такое? Zhiltsov Microsoft Office Excel 9 09.06.2009 14:24