вот у меня есть исходный файл, в котором я выбираю параметры из раскрывающихся списков.... но при выборе первых данных остаются старые ( в последующих ячейках). можно ли как то организовать обнуление/сброс выбранных данных при смене выбранных параметров. (надеюсь понятно объяснил)
Спасибо за помощь!
Всем привет!
вот у меня есть исходный файл, в котором я выбираю параметры из раскрывающихся списков.... но при выборе первых данных остаются старые ( в последующих ячейках). можно ли как то организовать обнуление/сброс выбранных данных при смене выбранных параметров. (надеюсь понятно объяснил)
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 And Target.Row < 9 Then Range(Cells(Target.Row + 1, 2), Cells(9, 2)).ClearContents End If End Sub
[/vba]
GaLaXoN, здравствуйте. Можно макросом: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 And Target.Row < 9 Then Range(Cells(Target.Row + 1, 2), Cells(9, 2)).ClearContents End If End Sub
GaLaXoN, макрос запускается при изменении первого листа. Если нужно распространить на другие листы, просто скопируйте код в модули нужных листов. Макрос проверяет только диапазон B1:B8, и очищает соответственно с активной ячейки до B9. Если нужно проверять другие диапазоны, можно продублировать строчки[vba]
Код
If Target.Column = 2 And Target.Row < 9 Then Range(Cells(Target.Row + 1, 2), Cells(9, 2)).ClearContents End If
[/vba]с заменой в них номеров столбцов и строк для проверки.
Если будет понятней, то эти 3 строчки можно переписать так:[vba]
Код
If Not Intersect(Target, Range("B1:B8")) Is Nothing Then Range("B" & Target.Row + 1 & ":B9").ClearContents End If
[/vba].
GaLaXoN, макрос запускается при изменении первого листа. Если нужно распространить на другие листы, просто скопируйте код в модули нужных листов. Макрос проверяет только диапазон B1:B8, и очищает соответственно с активной ячейки до B9. Если нужно проверять другие диапазоны, можно продублировать строчки[vba]
Код
If Target.Column = 2 And Target.Row < 9 Then Range(Cells(Target.Row + 1, 2), Cells(9, 2)).ClearContents End If
[/vba]с заменой в них номеров столбцов и строк для проверки.
Если будет понятней, то эти 3 строчки можно переписать так:[vba]
Код
If Not Intersect(Target, Range("B1:B8")) Is Nothing Then Range("B" & Target.Row + 1 & ":B9").ClearContents End If
Manyasha, оказалось наоборот, запутался с буквенно-цифровым и стал понимать с цифровым. просто английским языком не очень владею.....с помощью переводчика понял что и за что отвечает! еще раз большое Вам спасибо!
Manyasha, оказалось наоборот, запутался с буквенно-цифровым и стал понимать с цифровым. просто английским языком не очень владею.....с помощью переводчика понял что и за что отвечает! еще раз большое Вам спасибо!GaLaXoN
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 And Target.Row < 9 Then 'If Target.Count > 1 Then Exit Sub If Target.Value <> arrB(Target.Row) Then Application.EnableEvents = False Range(Cells(Target.Row + 1, 2), Cells(9, 2)).ClearContents Application.EnableEvents = True End If initialize_arrB End If End Sub
[/vba] [vba]
Код
Public arrB() As String Sub initialize_arrB() ReDim arrB(1 To 8) For i = 1 To 8 arrB(i) = Лист1.Cells(i, 2).Value Next i End Sub
[/vba]
Можно так: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 And Target.Row < 9 Then 'If Target.Count > 1 Then Exit Sub If Target.Value <> arrB(Target.Row) Then Application.EnableEvents = False Range(Cells(Target.Row + 1, 2), Cells(9, 2)).ClearContents Application.EnableEvents = True End If initialize_arrB End If End Sub
[/vba] [vba]
Код
Public arrB() As String Sub initialize_arrB() ReDim arrB(1 To 8) For i = 1 To 8 arrB(i) = Лист1.Cells(i, 2).Value Next i End Sub
Неправильно немного сделала (некорректно работает при открытии файла). Файлик перезалила в предыдущее сообщение. Инициализацию массива В вынесла в отдельный модуль.
UPD И строчку откомментить забыла[vba]
Код
'If Target.Count > 1 Then Exit Sub
[/vba]знак комментария нужно убрать. [p.s.]Что-то я сегодня косячу...
Неправильно немного сделала (некорректно работает при открытии файла). Файлик перезалила в предыдущее сообщение. Инициализацию массива В вынесла в отдельный модуль.
UPD И строчку откомментить забыла[vba]
Код
'If Target.Count > 1 Then Exit Sub
[/vba]знак комментария нужно убрать. [p.s.]Что-то я сегодня косячу...Manyasha
ЯД: 410013299366744 WM: R193491431804
Сообщение отредактировал Manyasha - Пятница, 20.03.2015, 12:03
Manyasha, плохо поддаются мне учения макросам.... никак не получается у меня сделать макрос не столбца, а строки!...... помогите, пожалуйста! объясните подробнее!
Manyasha, плохо поддаются мне учения макросам.... никак не получается у меня сделать макрос не столбца, а строки!...... помогите, пожалуйста! объясните подробнее!GaLaXoN
GaLaXoN, комментарии к 1-й части кода (для 1-й строки): 'Если пересечение диапазана a1:g1 и выделенных ячеек НЕ пусто (другими словами среди выделенных ячеек есть что-то из b1:g1) [vba]
Код
If Not Intersect(Target, [a1:g1]) Is Nothing Then 'если выделено более одной ячейки, выходим из макроса If Target.Count > 1 Then Exit Sub 'если новое значение ячейки не равно предыдущему значению этой же ячейки If Target.Value <> arrRow1(Target.Column) Then Application.EnableEvents = False 'очищаем диапазон <следующая ячейка после выделенной>:<h1> (8 - это номер столба h) Range(Cells(1, Target.Column + 1), Cells(1, 8)).ClearContents Application.EnableEvents = True End If 'запоминаем новые значения ячеек 1-й строки (a1:h1) initialize_arrRow1 End If
[/vba]Для второй части комментарии будут аналогичные.
Давайте перепишем инициализацию массива так, чтобы номер элементов массива совпадал с номерами столбцов, которые мы меняем (так будет нагляднее)
[vba]
Код
Sub initialize_arrRow1() ReDim arrRow1(1 To 8) For i = 1 To 8 arrRow1(i) = Лист1.Cells(1, i).Value Next i End Sub
[/vba] [vba]
Код
Sub initialize_arrRow2() ReDim arrRow2(2 To 15) For i = 2 To 15 arrRow2(i) = Лист1.Cells(2, i).Value Next i End Sub
[/vba]
Думаю так должно быть понятнее
GaLaXoN, комментарии к 1-й части кода (для 1-й строки): 'Если пересечение диапазана a1:g1 и выделенных ячеек НЕ пусто (другими словами среди выделенных ячеек есть что-то из b1:g1) [vba]
Код
If Not Intersect(Target, [a1:g1]) Is Nothing Then 'если выделено более одной ячейки, выходим из макроса If Target.Count > 1 Then Exit Sub 'если новое значение ячейки не равно предыдущему значению этой же ячейки If Target.Value <> arrRow1(Target.Column) Then Application.EnableEvents = False 'очищаем диапазон <следующая ячейка после выделенной>:<h1> (8 - это номер столба h) Range(Cells(1, Target.Column + 1), Cells(1, 8)).ClearContents Application.EnableEvents = True End If 'запоминаем новые значения ячеек 1-й строки (a1:h1) initialize_arrRow1 End If
[/vba]Для второй части комментарии будут аналогичные.
Давайте перепишем инициализацию массива так, чтобы номер элементов массива совпадал с номерами столбцов, которые мы меняем (так будет нагляднее)
[vba]
Код
Sub initialize_arrRow1() ReDim arrRow1(1 To 8) For i = 1 To 8 arrRow1(i) = Лист1.Cells(1, i).Value Next i End Sub
[/vba] [vba]
Код
Sub initialize_arrRow2() ReDim arrRow2(2 To 15) For i = 2 To 15 arrRow2(i) = Лист1.Cells(2, i).Value Next i End Sub