【发布时间】:2019-01-26 19:09:21
【问题描述】:
我正在尝试修改以下函数以包含如果变量 PPD_1_Date、PPD_2_Date 和 TSpot_Date 都是空的(空白)然后输出到我的“错误”工作表的逻辑。
我有应该属于这种逻辑的行,但是它们却属于 Else 条件。
Function PPDdate()
Dim PPD_1_Date As Date
Dim PPD_2_Date As Date
Dim TSpot_Date As Variant
Dim i As Long, j As Long, k As Long
j = Worksheets("PPDCI").Range("A" & Rows.Count).End(xlUp).Row + 1
k = Worksheets("Error").Range("A" & Rows.Count).End(xlUp).Row + 1
For i = 2 To lstrow
PPD_1_Date = Worksheets("Data").Range("AW" & i)
PPD_2_Date = Worksheets("Data").Range("BA" & i)
Entity = Worksheets("Data").Range("J" & i)
Dept = Worksheets("Data").Range("M" & i)
TSpot_Date = Worksheets("Data").Range("AS" & i)
If PPD_1_Date > PPD_2_Date Then
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = PPD_1_Date
Worksheets("PPDCI").Range("G" & j).Value = Worksheets("Data").Range("AX" & i).Value
Worksheets("PPDCI").Range("H" & j).Value = Worksheets("Data").Range("AZ" & i).Value
Worksheets("PPDCI").Range("I" & j).Value = Worksheets("Data").Range("AY" & i).Value
j = j + 1
Else
If PPD_1_Date < PPD_2_Date Then
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = PPD_2_Date
'Worksheets("PPDCI").Range("G" & j).Value = "ELSE IF CONDITION"
Worksheets("PPDCI").Range("G" & j).Value = Worksheets("Data").Range("BB" & i).Value
Worksheets("PPDCI").Range("H" & j).Value = Worksheets("Data").Range("BD" & i).Value
Worksheets("PPDCI").Range("I" & j).Value = Worksheets("Data").Range("BC" & i).Value
j = j + 1
Else
'If IsEmpty(Worksheets("Data").Range(PPD_1_Date & i).Value) = True And IsEmpty(Worksheets("Data").Range(PPD_2_Date & i).Value) = True Then
'GoTo EmptyRange
'Else
If (InStr(1, Entity, "CNG Hospital") Or InStr(1, Entity, "Home Health") Or InStr(1, Entity, "Hospice") Or InStr(1, Dept, "Volunteers") Or ((IsEmpty(PPD_1_Date) = True) And (IsEmpty(PPD_2_Date) = True))) And IsEmpty(TSpot_Date) = True Then
Worksheets("Error").Range("A" & k & ":H" & k).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("Error").Range("F" & k).Value = "REVIEW PPD DATA"
k = k + 1
Else
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = TSpot_Date
Worksheets("PPDCI").Range("G" & j).Value = Worksheets("Data").Range("AX" & i).Value
Worksheets("PPDCI").Range("H" & j).Value = Worksheets("Data").Range("AY" & i).Value
Worksheets("PPDCI").Range("I" & j).Value = "NO PPD DATES BUT HAS TSPOT DATE1"
j = j + 1
End If
End If
End If
'EmptyRange:
'k = k + 1
Next i
End Function
这是我添加到其他 OR 逻辑的代码;
Or ((IsEmpty(PPD_1_Date) = True) And (IsEmpty(PPD_2_Date) = True))
示例行在 AW、BA 和 AS 列中有空单元格,因此它应该写入我的错误工作表。是否存在语法或逻辑问题?我最初确实将 TSPOT_Date 定义为 Date 变量,但是我收到了“1004”运行时错误(我认为是因为某些列行是空的)所以我更改为 Variant,但逻辑仍然无法按预期工作。
【问题讨论】:
-
我会说你的括号被放错了那一行。您可以通过将
(IsEmpty(PPD_2_Date) = True))更改为等效的IsEmpty(PPD_2_Date)来清理它 -
但是,请注意,当您说
If InStr(...)时,您需要说If InStr(...) > 0 -
@Marcucciboy2 我删除了括号并将 > 0 添加到 If 语句中,但它仍然不起作用。我什至在函数中的其他语句之前添加了一个完全独立的 If 语句,但它仍然无法正常工作。
-
这是我添加的单独代码,但也不起作用:
If IsEmpty(PPD_1_Date) = True And IsEmpty(PPD_2_Date) = True And IsEmpty(TSpot_Date) = True Then Worksheets("Error").Range("A" & k & ":H" & k).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value Worksheets("Error").Range("F" & k).Value = "REVIEW PPD DATA888" End If -
原来问题是你不能使用
isEmpty()甚至Len()检查Date变量是否为“空”,因为日期的默认值是30-Dec-1899 00:00:00,所以Date变量中总是有一个值。相反,您应该像这样检查If PPD_2_Date = 0 thenstackoverflow.com/a/33421769/2727437