所以我问这个问题的原因是因为我不确定为什么这段代码不能正常工作,所以我很困惑。我不知道如何做特定的事情,这不是问题。
因此,某些日期正在“保存”在AK23:AL72范围内。该代码应该将保存的日期与K23:L72范围内的日期进行比较,如果行中的任何日期:23,35,36,45,46,47不同,它将在MsgBox中以可见提示提示用户。如果这些特定行中没有其他日期,则应通过InputBox提示用户输入注释。它所做的只是通过MsgBox提示输入任何不同的日期。它也做其他一些事情,但是都正常工作。我不知道为什么这些提示全都是搞砸了,在这里呆了大约一两个小时。
我知道代码有点像蛮力的,但是在这方面我还是很新的。
Dim i As Integer
Dim j As Integer
For i = 0 To 49
cRow = i + 23
For j = 0 To 1
If Sheets("Monthly Status").Cells(cRow, j + 11) <> Sheets("Monthly Status").Cells(cRow, j + 37) Then
If cRow = 23 Or 35 Or 36 Or 45 Or 46 Or 47 Then
ans = MsgBox("You made a change to a critical deliverable date, do you want to continue?", vbYesNo + vbQuestion)
If ans = vbNo Then
MsgBox "You are not authorized to make this change!", vbCritical
Application.ScreenUpdating = False
Sheets("Monthly Status").Cells(cRow, j + 37).Copy
Sheets("Monthly Status").Cells(cRow, j + 11).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
If ans = vbYes Then
ans = MsgBox("Do you have Scope Change Aproval?", vbYesNo + vbQuestion)
If ans = vbNo Then
MsgBox "You are not authorized to make this change! Changes to critical dates will be rolled back.", vbCritical
Application.ScreenUpdating = False
Sheets("Monthly Status").Cells(cRow, j + 37).Copy
Sheets("Monthly Status").Cells(cRow, j + 11).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
End If
Application.ScreenUpdating = False
Sheets("Monthly Status").Range("K23:L72").Copy
Sheets("Monthly Status").Range("AK23:AL72").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True
Else
End If
End If
If Sheets("Monthly Status").Cells(cRow, j + 11) <> Sheets("Monthly Status").Cells(cRow, j + 37) Then
Worksheets("Monthly Status Footnotes").Unprotect Password:="SCPV3"
Worksheets("Monthly Status Footnotes").Cells(MSFFreeRow, "D").value = InputBox("You changed a date, you must enter revison notes!", "Notes")
Application.ScreenUpdating = False
Worksheets("Monthly Status Footnotes").Protect Password:="SCPV3"
Sheets("Monthly Status").Range("K23:L72").Copy
Sheets("Monthly Status").Range("AK23:AL72").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True
End
End If
Next j
Next i
进一步澄清:
用文字解释非常令人困惑。因此,我正在检查K23:L72范围内的所有单元格,并将它们与AK23:AL72中各自保存的日期进行比较。然后,如果K23:L72中的日期与其AK23:AL72中的相应日期不同,则我需要检查以下几行之一中是否发生了更改的日期:如果是,则为23,35,36,45,46,47需要向用户提示一系列问题,如果对两个问题的回答均为“是”,那么我将保存工作表并将新日期保存在AK23:AL72中。如果对两个问题的回答均为“否”,则需要用AK23:AL72范围内的旧的对应日期替换更改的日期,然后保存工作表。如果更改的日期不是这些行之一,但是仍然不同,则需要提示用户输入注释,然后保存工作表,然后将新日期保存在AK23:AL72中。如果没有什么不同,则应保存该表。
答案 0 :(得分:2)
我认为SJR已经指出了需要做的事情,但是也许您没有注意到它:
此if语句If cRow = 23 Or 35 Or 36 Or 45 Or 46 Or 47 Then
将始终产生true
,因为or
不能这样工作。
在伪代码中,这基本上转换为If cRow = 23 or If 35 or If 36 or If 45
等。
If 35
,所有其他数字将始终生成true
。正如SJR所说,您需要将其更改为
If cRow = 23 Or cRow = 35 Or cRow = 36 Or cRow = 45 Or cRow = 46 Or cRow = 47 Then
答案 1 :(得分:1)
在这种情况下,我建议使用Select Case结构,因为您要将变量与多个值进行比较:
Select Case cRow
Case 23, 35, 36, 45, 46, 47
' MsgBox
Case Else
' No MsgBox
End Select