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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 19:46   #1
KinderX
Пользователь
 
Регистрация: 27.06.2009
Сообщений: 36
По умолчанию Упростить вырожение

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = [O10].Address Or Target.Address = [O3].Address Then If [O10] = [O3] Then Macros2
If Target.Address = [O11].Address Or Target.Address = [O3].Address Then If [O11] = [O3] Then Macros3
If Target.Address = [O12].Address Or Target.Address = [O3].Address Then If [O12] = [O3] Then Macros4
If Target.Address = [O13].Address Or Target.Address = [O3].Address Then If [O13] = [O3] Then Macros5
If Target.Address = [O14].Address Or Target.Address = [O3].Address Then If [O14] = [O3] Then Macros6
If Target.Address = [O15].Address Or Target.Address = [O3].Address Then If [O15] = [O3] Then Macros7
If Target.Address = [O16].Address Or Target.Address = [O3].Address Then If [O16] = [O3] Then Macros8
If Target.Address = [O17].Address Or Target.Address = [O3].Address Then If [O17] = [O3] Then Macros9

End Sub

А макрос:
Range("I10:N10").Select
Range("N10").Activate
Selection.Borders(xlDiagonalDown).L ineStyle = xlNone
Selection.Borders(xlDiagonalUp).Lin eStyle = xlNone
Каждый макрос на строку ниже, т.е. следующий Range("I11:N11").Select

Последний раз редактировалось KinderX; 29.06.2009 в 19:59.
KinderX вне форума Ответить с цитированием
Старый 29.06.2009, 19:52   #2
KinderX
Пользователь
 
Регистрация: 27.06.2009
Сообщений: 36
По умолчанию

А то больше 3 макросов не выполняет. Нашел причину

Последний раз редактировалось KinderX; 29.06.2009 в 20:00.
KinderX вне форума Ответить с цитированием
Старый 29.06.2009, 20:22   #3
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
Хорошо

УПРОСТИТЬ НЕОБХОДИМО:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)

if target.address=[O3].address then

dim i as integer
for i = [O10].row to [O17].row
with range("I" & i & ":N" & i)
.Borders(xlDiagonalDown).L ineStyle = xlNone
.Borders(xlDiagonalUp).Lin eStyle = xlNone
end with
next i

elseif target.row>=[O10].row and target.row<=[O17].row and target.column=[O10].column and target.cells.count=1 then

with range("I" & target.row & ":N" & target.row) 
.Borders(xlDiagonalDown).L ineStyle = xlNone
.Borders(xlDiagonalUp).Lin eStyle = xlNone
end with

end if

End Sub
И ВСЕ!
tolikman вне форума Ответить с цитированием
Старый 29.06.2009, 20:27   #4
KinderX
Пользователь
 
Регистрация: 27.06.2009
Сообщений: 36
По умолчанию

Я в програмирование не понимаю, так только на образцах.
Опиши немного
KinderX вне форума Ответить с цитированием
Старый 30.06.2009, 18:18   #5
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

в твоем первом коде было много "одинакового"
Программирование основывается на логике, в твоем примере если ты изменил ячейку О3, то выполнялись все строки кода:
Код:
If Target.Address = [O10].Address Or Target.Address = [O3].Address Then If [O10] = [O3] Then Macros2
If Target.Address = [O11].Address Or Target.Address = [O3].Address Then If [O11] = [O3] Then Macros3
If Target.Address = [O12].Address Or Target.Address = [O3].Address Then If [O12] = [O3] Then Macros4
If Target.Address = [O13].Address Or Target.Address = [O3].Address Then If [O13] = [O3] Then Macros5
If Target.Address = [O14].Address Or Target.Address = [O3].Address Then If [O14] = [O3] Then Macros6
If Target.Address = [O15].Address Or Target.Address = [O3].Address Then If [O15] = [O3] Then Macros7
If Target.Address = [O16].Address Or Target.Address = [O3].Address Then If [O16] = [O3] Then Macros8
If Target.Address = [O17].Address Or Target.Address = [O3].Address Then If [O17] = [O3] Then Macros9
обрати внимание на то, что я выделил красным- оно повторяется везде: зачем писать мно раз одно и тоже, я и выделил из твоего кода это условие отдельно и полчилось, что если:
Код:
if target.address=[O3].address then
то выполняем деяствия при изменении клетки О3, а иначе, если изменена одна клетка между строкой ячейки О10 и строкой ячейки О17 и в столбце ячейки О10:
Код:
elseif target.row>=[O10].row and target.row<=[O17].row and target.column=[O10].column and target.cells.count=1 then
то, выполняем если изменена ячейка из нужного диапазона. Далее код в первом блоке:
Код:
dim i as integer
for i = [O10].row to [O17].row
with range("I" & i & ":N" & i)
.Borders(xlDiagonalDown).L ineStyle = xlNone
.Borders(xlDiagonalUp).Lin eStyle = xlNone
end with
next i
здесь, dim i as integer - создание числовой переменной.
for i = [O10].row to [O17].row - запускаем цикл переменной i(которую только что создали), первоначальное значение переменной равно номеру строки ячейки О10 а конечное номеру строки О17, шаг изменения переменной = 1(по умолчанию)
with range("I" & i & ":N" & i) - этот кусок кода выбирает диапазон ячеек аналогично твоему примеру: Range("I10:N10").Select, т.е. твой код можно преобразовать в Range("I" & 10 ":N" & 10).Select(где 10 - аналог переменной i), знак & - объединяет строки.
вот и получается что мы циклом перебираем все нужные нам диапазоны.
А во втором блоке мы просто подставляем номер строки вместо i.
вроде все.
tolikman вне форума Ответить с цитированием
Старый 30.06.2009, 18:30   #6
KinderX
Пользователь
 
Регистрация: 27.06.2009
Сообщений: 36
По умолчанию Помагите пожалйста

Помогите упростить вырожение в VBA.
В листе7
If Target.Address = [P10].Address Or Target.Address = [O3].Address Then If [P10] = [O3] Then Macros110
Должно быть до Р45.
P.S. Четвертый день в глаза вижу VBA. Не получается создать цикл.
А макросы тоже сдвигаются от 10 до 45 строки.
Макрос Menu1, открывает окно... там есть очистить, а надо вторую чтобы обвести границы, тоже пытался не чего не выходит.

И как можно сделать чтобы вместо того чтобы в О2 вносить число число вводить в окне Menu1.

И я наверное уже много прошу, как создать кнопку предварительный просмотр.

А так же я так и не могу найти уже третий день как можно сделать чтобы нижний текст под листом на печать вставить под таблицу, можно ли через VBA налажить его сверху,при выводи на печать.
Вложения
Тип файла: rar Копия. 30.06.09_00.10.21.rar (140.7 Кб, 11 просмотров)
KinderX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55
Помогите упростить код Ralf_ru Помощь студентам 7 01.04.2009 17:17
Упростить формулу Stif-rva Microsoft Office Excel 7 09.03.2009 11:03
Помогите упростить с помощью VBA Dubineanschi Microsoft Office Excel 3 22.10.2008 14:21