【发布时间】:2017-08-09 10:55:26
【问题描述】:
以下是我正在尝试做的事情的摘要: 我有两个文件,“yyy”是从跟踪疾病和假期的系统中提取的,“xxx”文件是我们手动记下这些东西的地方,所以我正在尝试制作一个可以交叉检查两者的宏和突出显示摘录中的一致性/不一致。
问题: 当我运行宏时,当它到达以下内容时,我得到一个错误“对象变量或未设置块变量”
设置 y = Range(Workbooks("xxx.xlsm").Sheets("xxx").Range("J2:NZ2").Find(dates.Value).Address) 我试图在 dates.value 和 dateStr 之间交换作为查找内容的参考,但得到相同的错误。
PS。我一遍又一遍地检查所有范围,一切似乎都是正确的。 聚苯乙烯。我可能有一些额外定义的位,否则代码中不存在这些位,为不整洁的代码道歉。我正在尝试克服此错误以完成其余部分...
提前非常感谢!
Option Explicit
Sub sickhol_check()
Dim names, dates, schedDates, n, schedName, x, y As Range
Dim wb, WBschedule As Workbook
Dim ws, WSschedule As Worksheet
Dim nameStr As String
Dim dateStr As Long
Set wb = Workbooks("yyy.xlsm")
Set ws = Sheets("Sheet1")
Set WBschedule = Workbooks("xxx.xlsm")
Set WSschedule = WBschedule.Sheets("xxx")
Set names = ThisWorkbook.Sheets("Sheet1").Range("D2:D1882") ‘yyy workbook
Set schedName = Workbooks("xxx.xlsm").Sheets("xxx ").Range("F4:F300")
Set schedDates = Workbooks("xxx.xlsm").Sheets("xxx ").Range("J2:NZ2")
For Each n In names ‘working in yyy workbook
If n.Value <> "" Then
Set dates = ThisWorkbook.Sheets("Sheet1").Range(n.Offset(0, -3).Address)
nameStr = n.Value
dateStr = dates.Value
If n.Value = schedName.Find(n.Value) Then
Set x = Range(Workbooks("xxx.xlsm").Sheets("xxx ").Range("F4:F300").Find(nameStr).Address)
Set y = Range(Workbooks("xxx.xlsm").Sheets("xxx ").Range("J2:NZ2").Find(dates.Value).Address)
If n.Offset(0, 11).Value = "Sick Leave" Then
If Workbooks("xxx.xlsm").Sheets("xxx ").Cells(x.Row, y.Column).Value = "Sick" Or Workbooks("xxx.xlsm").Sheets("xxx ").Cells(x.Row, y.Column).Value = "Sick - pending" Or Workbooks("xxx.xlsm").Sheets("xxx").Cells(x.Row, y.Column).Value = "Half-day Sick" Then
With n
.Interior.Color = RGB(0, 255, 0)
End With
Else:
With n
.Interior.Color = RGB(255, 0, 0)
End With
GoTo a:
End If
ElseIf n.Offset(0, 11).Value = "Holiday Annual Leave" Then
If Workbooks("xxx.xlsm").Sheets("xxx").Cells(x.Row, y.Column).Value = "Hol. Approved" Or Workbooks("xxx.xlsm").Sheets("xxx").Cells(x.Row, y.Column).Value = "Half-day Hol." Then
With n
.Interior.Color = RGB(0, 255, 0)
End With
Else:
With n
.Interior.Color = RGB(255, 0, 0)
End With
GoTo a:
End If
ElseIf n.Offset(0, 11).Value = "Leave - Unpaid" Then
If Workbooks("xxx.xlsm").Sheets("xxx").Cells(x.Row, y.Column).Value = "TimeOff Approv." Or Workbooks("xxx.xlsm").Sheets("xxx").Cells(x.Row, y.Column).Value = "Unavailable" Then
With n
.Interior.Color = RGB(0, 255, 0)
End With
Else:
With n
.Interior.Color = RGB(255, 0, 0)
End With
GoTo a:
End If
End If
MsgBox x.Address & " " & y.Address
Else: GoTo a:
End If
Else: GoTo a:
End If
a: Next
【问题讨论】:
-
Workbooks("xxx.xlsm")不正确....工作簿名称与文件名不同。 -
如果我删除 .xlsm 格式,我会收到“主题超出范围”错误。我也打开了这两个文件...
-
当您已经有合格的对象时,不确定为什么要使用
Workbooks("xxx.xlsm").Sheets...:WBschedule。我只会使用WBschedule.Sheets...。另外,Workbooks("xxx.xlsm") 已经打开了吗? -
代码有相当多的错误:您需要声明每个变量的数据类型 -
y是一个范围,但该行中的其他变量是变体。与wb和ws相同。Set ws=Sheets("Sheet1")- 是指当前活动的工作簿,因为您没有说它在哪本书中。Set dates- 您将其设置为 n - 3 列的地址值,为什么不将其设置为参考n-3 列,因为两个参考都在同一张纸上:Set dates = n.Offset(, -3)。Set x = Range...- 表xxx后面真的有空格吗? -
是的,我开始使用 wbschedule,但后来遇到了问题,然后切换到使用整个东西,因为它是一组非常具体的文件,我首先想获得基本功能工作,以后再优化。是的,这两个文件总是打开的