2015-02-24 74 views
0

我对原始问题进行了一些调整。首先,需要提醒的一点是,我不是任何一个想象中的VBA精英,所以这正是我试图一起解析以简化工作流程。基于相邻单元格值返回响应

考虑到给出的评论,我决定在隐藏的单元格中包含公式,这将有助于简化该过程,但我仍然收到错误并且不确定导致它们的确切原因。我有一列(第3-1500行,第col.U)返回星期几的名称(它正在读取输入到列C(行3-1500)的日期值的“dddd”)和那么我想让列M根据列U中存储的值返回“是”,“否”或“星期天”......我不断收到“应用程序定义或用户定义的错误”消息,并且我真的不知道错误来自哪里。

注意:这个子文件位于特定工作表的工作表模块中,我尝试将它作为公共模块移动到外部,但仍然会引发错误。

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 

谢谢!

回答

1

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


= IF(WEEKDAY(A1,2)< 6, “否”,”是“)


但是,你得到一个应用程序错误,而不是一个‘下标越界’的事实错误会建议我,你也许有错地方了此代码 - 也许在工作表模块而不是代码模块?另外,如果此代码被更改事件调用,那么您确实应该使用手动事件处理来停止无限循环发生。

+0

如果我决定去实施一个工作表公式的路线,如果有一种方法来指定三个不同的可能性?即如果我想根据日期是vbSunday(“SUNDAY”),vbSaturday(“Saturday”)还是任何其他vbweekdays(“否”),想要三种不同的可能答案? – user3794203 2015-02-25 16:36:55

+0

WORKDAY()返回表示星期几的数字,在我的示例中1 =星期一,2 =星期二等。因此,您只需测试该数字的值 – 2015-02-25 16:43:51

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 
+0

谢谢您的帮助。在“Set X = Worksheets(”Sheet1“)一行中,我得到一个错误”Object required“。任何猜测我可能会丢失什么? – user3794203 2015-02-25 16:11:47

+0

我编辑了答案,忘记从Set of那条线。 – guitarthrower 2015-02-25 20:38:40

相关问题