基于相邻细胞值返回响应

时间:2015-02-24 21:36:56

标签: excel vba date text

我对原来的问题做了一些调整。首先,需要注意的是,在任何想象中,我都不是VBA精英,所以这就是我想要解析的工作流程。

考虑到给出的评论,我决定在隐藏单元格中包含公式,这将有助于使过程更容易,但我仍然遇到错误,并且不确定是什么导致它们。我有一个列(行3-1500,col.U)返回星期几的名称(它正在读取输入C列(行3-1500)的日期值的“dddd”)和然后我试图让列M返回“是”,“否”或“星期日”,具体取决于列U中存储的值...我不断收到“应用程序定义或用户定义的错误”消息,并且我不确定错误来自哪里。

注意:这个sub在特定工作表的工作表模块中,我尝试将其作为公共模块移到外面,但它仍然会抛出错误。

Sub IsWeekend()
For i = 3 To 1500
If Cells(i, 3) <> 0 And Cells(i, 20) <> "" Then
If Range("U3:1500") = "Sunday" Then
Range("M3:1500") = "Sunday"
ElseIf Range("U3:1500").Text = "Saturday" Then
Range("M3:1500") = "Yes"
Else
Range("M3:1500") = "No"
End If
End If
Next i
End Sub

谢谢!

2 个答案:

答案 0 :(得分:1)

在任何情况下,您都不应该使用VBA - 工作表公式就足够了:


<强> = IF(WEEKDAY(A1,2)&10 6&#34;否&#34;&#34;是&#34)


但是您收到应用程序错误而不是超出范围的“下标”这一事实。错误会告诉我你可能在错误的地方有这个代码 - 也许在工作表模块而不是代码模块?

此外,如果更改事件正在调用此代码,那么您确实应该使用手动事件处理来阻止无限循环的发生。

答案 1 :(得分:0)

此行显示错误

Set X = Worksheets("Sheet1").Cells(i,3).Value

您不能将单元格的值赋给声明为范围的变量。

根据您的代码,您看起来希望X是文本而不是Range对象。

以下是您的代码应该是什么样的(我认为):

Sub weekcheck()
    Dim X As String

    For i = 3 To 1500
        If Worksheets("Sheet1").Cells(i,3).Value <> 0 Then
            X = Worksheets("Sheet1").Cells(i,3).Value
            If X = True Then
                Worksheets("Sheet1").Cells(i,3).Value = "Yes"
            ElseIf X = False Then
                Worksheets("Sheet1").Cells(i,3).Value = "No"
            End If
        End If
    Next i
End Sub