【问题标题】:How to clear contents of a range in a row, when a specific cell of that row is selected?How to clear contents of a range in a row, when a specific cell of that row is selected?
【发布时间】:2019-11-10 02:28:11
【问题描述】:

我有一个表格,范围从 ("C22:Q26"),其中单元格 ("R22")、("R23")、("R24") 到 ("R26") 是要选择的单元格一行,清除内容。

当单元格 ("R22") 被选中时,我想清除范围 ("C22:Q22") 的内容。

Similarly clear contents of a range("C23:Q23"), when cell ("R23") is selected, and so on up to range("C26:Q26") when cell ("R26") is selected.

我写了这个,放在工作表代码中。

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

【问题讨论】:

  • 是否要自动清除单元格?如果是这样,请查看Worksheet.SelectionChange 事件。
  • yes 将此代码放在 worksheet.selectionchange 事件中,但仍然有效

标签: excel vba


【解决方案1】:

尝试使用Worksheet.SelectionChange 事件。将以下代码添加到 sheet 代码模块中。

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

【讨论】:

  • @jonty 你应该Accept 回答然后! ?
【解决方案2】:

如果您的代码在“Worksheet_SelectionChange”宏中并且没有触发,我会再次检查您是否启用了事件。

否则这段代码应该做你想做的事,一些检查还需要选择一个单元格:

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

【讨论】:

  • 我把这段代码放在工作表模块中,它工作正常,谢谢。
  • 乐于助人。如果它解决了您的问题,则标记为已回答;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 2022-12-26
  • 2022-12-02
  • 1970-01-01
  • 2022-12-02
相关资源
最近更新 更多