Как очистить содержимое диапазона в строке, когда выбрана конкретная ячейка этой строки - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть таблица в диапазоне от ("C22:Q26"), где ячейка ("R22"),("R23"),("R24") до ("(R26") - это конкретные ячейки, которые будут выбраны в строке для очистки содержимого,

Я хочу очистить содержимоедиапазон («C22: Q22»), когда выбрана ячейка («R22»),

Аналогично очищает содержимое диапазона («C23: Q23»), когда выбрана ячейка («R23»)и т. д. вплоть до диапазона («C26: Q26») при выборе («R26»),

Я написал ниже этого кода, где я поместил этот макрос в листовой код, но он не работает. Пожалуйста, помогите мне, я очень новичок, чтобы преуспеть VBA

Sub clearcontents()
If Range("r22").Selected Then
   Range("R22").Offset(, -15).Resize(, 15).Select
   Range("R22").Offset(, -15).Resize(, 15).clearcontents
ElseIf Range("r23").Selected Then
   Range("R23").Offset(, -15).Resize(, 15).Select
   Range("R23").Offset(, -15).Resize(, 15).clearcontents
ElseIf Range("r24").Selected Then
   Range("R24").Offset(, -15).Resize(, 15).Select
   Range("R24").Offset(, -15).Resize(, 15).clearcontents
ElseIf Range("r25").Selected Then
   Range("R25").Offset(, -15).Resize(, 15).Select
   Range("R25").Offset(, -15).Resize(, 15).clearcontents
ElseIf Range("r26").Selected Then
   Range("R26").Offset(, -15).Resize(, 15).Select
   Range("R26").Offset(, -15).Resize(, 15).clearcontents
  End If
End Sub

Ответы [ 2 ]

2 голосов
/ 10 ноября 2019

Попробуйте использовать событие Worksheet.SelectionChange. Добавьте следующий код в модуль кода лист .

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.CountLarge <> 1 Then Exit Sub

    If Not Intersect(Target, Me.Range("R22:R26")) Is Nothing Then
        Me.Range("C" & Target.Row & ":Q" & Target.Row).ClearContents
    End If

End Sub
1 голос
/ 10 ноября 2019

Если ваш код находится в макросе «Worksheet_SelectionChange» и он не срабатывает, я бы дважды проверил, что у вас включены события.

enter image description here

в противном случае этот фрагмент кода должен делать то, что вы хотите, некоторые проверяют также, что выбор должен быть из одной ячейки:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim rColumn As Range
  Dim tTable As Range

  Set rColumn = Me.Range("R22:R26")
  Set tTable = Me.Range("C22:Q26")

  If Not Intersect(Target, rColumn) Is Nothing Then
    If Target.Count = 1 Then
      Intersect(Target.EntireRow, tTable).ClearContents
    End If
  End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...