Есть ли более простой способ скомпилировать этот код? - PullRequest
0 голосов
/ 04 июля 2019

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

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

Вот оно:

If ActiveSheet.Range("A2") = "" Then
    MsgBox "Please Fill in More Boxes"
    Exit Sub
End If

If ActiveSheet.Range("B2") = "" Then
    MsgBox "Please Fill in More Boxes"
    Exit Sub
End If

If ActiveSheet.Range("C2") = "" Then
    MsgBox "Please Fill in More Boxes"
    Exit Sub
End If

Затем продолжается на D2 до остановки H2 и продолжается до O2.

Можно ли как-нибудь скомпилировать его, чтобы он был намного короче, чем несколько раз для каждой отдельной ячейки?

Я уже пробовал

If ActiveSheet.Range("A2:D2","H2:O2") = "" Then
    MsgBox "Please Fill in More Boxes"
    Exit Sub
End If

Ответы [ 4 ]

2 голосов
/ 04 июля 2019

Определите диапазон ячеек, которые вы хотите проверить TestRange, а затем выполните цикл по всем ячейкам в этом диапазоне:

Dim TestRange As Range
Set TestRange = ActiveSheet.Range("A2:D2") 'multiple ranges like "A2:D2,H2:O2"

Dim Cell As Range
For Each Cell In TestRange
    If Cell.Value = vbNullString Then
        MsgBox "Please Fill in More Boxes"
        Exit Sub
    End If
Next Cell

Это позволит избежать широкого использования Or, как

.Range("A2") = "" Or .Range("B2") = "" Or .Range("C2") = ""
2 голосов
/ 04 июля 2019

Сначала вы могли бы использовать OR

If ActiveSheet.Range("A2") = "" Or ActiveSheet.Range("B2") = "" ... Then

Но вам действительно нужно перебрать свой диапазон

Dim c as Range
'For each c in ActiveSheet.Range("A2:D2","H2:O2").Cells (range incorrect)
 For each c in ActiveSheet.Range("A2:D2,H2:O2").Cells '(range corrected)
    If c="" Then 
       MsgBox "Please Fill in More Boxes" 
       Exit Sub 
    End If
Next
1 голос
/ 04 июля 2019

Вы можете сделать это:

With ActiveSheet
   If .Range("A2") = "" Or .Range("B2") = "" Or .Range("C2") = "" Then 
       MsgBox "Please Fill in More Boxes" 
     Exit Sub 
   End If
end With

и аналогичный блок для других ячеек дальше

0 голосов
/ 04 июля 2019

Вы можете использовать:

Option Explicit

Sub test()

    Dim rng As Range

    With ThisWorkbook.Worksheets("Sheet1") '<- Create a with statement with the sheet name you want. Avoid Activesheet
        'Set the range you want to check
        Set rng = .Range("A2:C2")
        'Loop rnage
        For Each cell In rng
            'If cell is empty
            If cell = "" Then
                'Message box with the cell which is missing
                MsgBox "Please Fill Box " & cell.Address
                Exit Sub
            End If
        Next cell

    End With

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