繁体   English   中英

当宏从另一张工作表运行时,如果单元格 C 为空白,则用于清除单元格 A 和 B 内容的 VBA 代码

[英]VBA code to clear contents of cell A and B if cells C blank when macro runs from another sheet

如果在名为Sold的工作表的 C 列中找到空白单元格,并且宏从名为Invoice表运行,我正在尝试清除 A 列和 B 列的额外单元格。

我从帮助站点获得了以下代码,但无法获得我想要的结果。下面附上所需输出的屏幕截图

Sum Clear()

Dim g As Long
For g = 2 To ActiveSheet.UsedRange.Rows.Count
If Cells(g, "C").Value = "" Then
Cells(g, "A").ClearContents
Cells(g, "B").ClearContents 

End If
Next
End Sum

想要的结果

非 VBA 方式

您可以将公式=IF(LEN(TRIM(C2))=0,"",POPULATETHISCELL)放在单元格AB ,您可以在其中用您想要到达的任何内容替换POPULATETHISCELL 例如,填充今天的日期。

VBA方式

  1. 使用Objects 避免使用ActiveWorkbook/Activesheet/Selection等作为展示HERE
  2. 避免使用UsedRange 查找如图最后一排的位置,然后通过它循环。
  3. 您可以一次清除范围而不是两次清除范围,如下所示

这是你正在尝试的吗?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lastrow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("Sold")

    With ws
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lastrow = .Cells.Find(What:="*", _
                          After:=.Range("A1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row

            For i = 2 To lastrow
                If Len(Trim(.Range("C" & i).Value)) = 0 Then _
                .Range("A" & i & ":B" & i).ClearContents
            Next i
        End If
    End With
End Sub

您需要包含工作表的名称。

Sub Clear()
Dim g As Long
With ActiveWorkbook.Sheets("Sold")
    For g = 2 To .UsedRange.Rows.Count
        If .Cells(g, "C").Value = "" Then
            .Cells(g, "A").ClearContents
            .Cells(g, "B").ClearContents
        End If
    Next
End With
End Sub

尝试类似:

Sub Sample()
 '============ Init ================
 Dim Ws_Sold As Worksheet
 Set Ws_Sold = Sheets("Sold")
 Dim count As Integer
 count = 1
 Dim lastrow As Long
 lastrow = Ws_Sold.Cells.SpecialCells(xlCellTypeLastCell).Row 
 'give number of the last cell not empty

 '============ loop================
 While (count < lastrow + 1)
    If Ws_Sold.Cells(count, 3).Value = "" Then
        Ws_Sold.Cells(count, 1).ClearContents
        Ws_Sold.Cells(count, 2).ClearContents    
    End If
    count = count + 1
 Wend 

结束子

祝你今天过得愉快 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM