Код VBA для очистки содержимого ячеек A и B, если ячейки C пустые, когда макрос запускается с другого листа - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь очистить дополнительные ячейки столбцов A и B, если в столбце C листа с именем Sold обнаружены пустые ячейки, а макрос запускается из листа с именем Invoice.

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

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

Desired Result

Ответы [ 3 ]

1 голос
/ 12 февраля 2020

Non VBA Way

вы можете поместить формулу =IF(LEN(TRIM(C2))=0,"",POPULATETHISCELL) в ячейки A и B, где вы можете заменить POPULATETHISCELL на то, что вы есть пытаюсь туда добраться. Например, заполнение сегодняшней даты.

VBA Way

  1. Работа с Objects. Избегайте использования ActiveWorkbook/Activesheet/Selection et c, как показано ЗДЕСЬ
  2. Избегайте использования UsedRange. Найдите последний ряд, как показано ЗДЕСЬ , а затем l oop через него.
  3. Вместо очистки диапазонов дважды, вы можете очистить его в одном go, как показано ниже

Это то, что вы пытаетесь?

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
0 голосов
/ 12 февраля 2020

Попробуйте что-то вроде:

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 

End Sub

Хорошего дня!

0 голосов
/ 12 февраля 2020

Вам необходимо указать название листа.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...