簡體   English   中英

Excel VBA對多個工作表使用嵌套的If語句

[英]Excel VBA that uses nested If statements for multiple worksheets

我正在嘗試在U列中獲取工作簿中多個工作表的輸出。 返回字符串將是“是”或“否”,這取決於哪一列不是空白以及兩個日期之間的差值是否大於150。這是我編寫的代碼,但是U列中沒有任何顯示。我弄清楚為什么這不起作用?

Sub Compliance()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
Dim i As Integer
Dim listLength
listLength = ws.Cells(Rows.Count, "M").End(xlUp).Row - 1


For i = 2 To listLength + 2
If IsEmpty(ws.Range("P" & i)) = True And IsEmpty(ws.Range("O" & i)) = True And IsEmpty(ws.Range("N" & i)) = True And DateDiff("d", ws.Range("M" & i), ws.Range("K" & i)) > 150 Then
    ws.Range("U" & i) = "Yes"
ElseIf IsEmpty(ws.Range("P" & i)) = True And IsEmpty(ws.Range("O" & i)) = True And DateDiff("d", ws.Range("N" & i), ws.Range("M" & i)) < 150 Then
    ws.Range("U" & i) = "Yes"
ElseIf IsEmpty(ws.Range("P" & i)) = True And DateDiff("d", ws.Range("O" & i), ws.Range("N" & i)) < 150 Then
    ws.Range("U" & i) = "Yes"
ElseIf DateDiff("d", ws.Range("N" & i), ws.Range("M" & i)) < 150 Then
    ws.Range("U" & i) = "Yes"
Else
    ws.Range("U" & i) = "No"
End If
Next
Next ws


End Sub

當您For Each ws In ThisWorkbook.Worksheets使用For Each ws In ThisWorkbook.Worksheets開始循環時,Excel將從Sheet1開始處理,並且我確定您的列表在另一個工作表中。

因此, U列中沒有任何變化的原因是,因為您正在查看錯誤的Worksheet

只要您想遍歷所有工作表,就開始關注Sheet1中的列表 如果您想以不同的順序循環,則應在代碼中進行定義。

在下面,我編輯了部分代碼,還添加了msgbox ws.name以向您顯示Excel現在在哪個工作表中運行。

為什么使用整數而不是Long?

Option Explicit

Sub Compliance()

Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
    Dim i As Long
    Dim listLength
    MsgBox ws.Name
    listLength = ws.Cells(ws.Rows.Count, "M").End(xlUp).Row - 1

        For i = 2 To listLength + 2
        If IsEmpty(ws.Range("P" & i)) = True And IsEmpty(ws.Range("O" & i)) = True And IsEmpty(ws.Range("N" & i)) = True And DateDiff("d", ws.Range("M" & i), ws.Range("K" & i)) > 150 Then
            ws.Range("U" & i) = "Yes"
        ElseIf IsEmpty(ws.Range("P" & i)) = True And IsEmpty(ws.Range("O" & i)) = True And DateDiff("d", ws.Range("N" & i), ws.Range("M" & i)) < 150 Then
            ws.Range("U" & i) = "Yes"
        ElseIf IsEmpty(ws.Range("P" & i)) = True And DateDiff("d", ws.Range("O" & i), ws.Range("N" & i)) < 150 Then
            ws.Range("U" & i) = "Yes"
        ElseIf DateDiff("d", ws.Range("N" & i), ws.Range("M" & i)) < 150 Then
            ws.Range("U" & i) = "Yes"
        Else
            ws.Range("U" & i) = "No"
        End If
        Next

    Next ws

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM