为什么我得到这个错误:对象variables或块variables没有设置?

我已经find了导致这个错误的原因,但是我不能确定它是从哪里来的。 我甚至在Excel中的一个单独的工作表中testing这个macros,它工作,但在这个工作表中,它不工作。 任何人都可以猜测为什么或提供任何解决方法? 我对这个错误发表了评论。 假设数据正确input。

Private Sub CommandButton1_Click() Dim startDate As Date, endDate As Date, reason As String, name As String name = InputBox("Please enter the name of the SLG as appears in column 1 on the worksheet:") startDate = InputBox("Please enter the start date in MM/DD/YYYY format:") endDate = InputBox("Please enter the end date in MM/DD/YYYY format:") reason = InputBox("Please short description for the absence:") Dim rng1 As Range, columnNumberStart As Integer, rowNumber As Integer, columnNumberEnd As Integer, test1 As String, test2 As String Worksheets("FY-15 Schedule").Activate Set rng1 = ActiveSheet.UsedRange.Find(name) rowNumber = rng1.Row Set rng1 = ActiveSheet.UsedRange.Find(startDate) columnNumberStart = rng1.Column 'Says Error is on this line Set rng1 = ActiveSheet.UsedRange.Find(endDate) columnNumberEnd = ActiveSheet.UsedRange.Find(endDate).Column test1 = Cells(rowNumber, columnNumberStart).Address test2 = Cells(rowNumber, columnNumberEnd).Address Dim rng2 As Range Set rng2 = Range(test1, test2) rng2.Value = reason End Sub 

首先,明确地强制input框input的date:

 startDate = CDate(InputBox("Please enter the start date in MM/DD/YYYY format:")) 

并为其他date字段做同样的事情。

然后,仍然有可能出现这种错误:当.Find方法向范围对象返回Nothing (例如,没有finddate/在表中不存在),那么你基本上是做Nothing.Column ,这是一个错误。

如果date不存在于工作表中,则会始终引发一个错误,您可以像这样捕获错误,或使用GoTo语句返回到input框等。

 Set rng3 = ActiveSheet.UsedRange.Find(startDate) If rng3 Is Nothing Then MsgBox "Start date" & Cstr(startDate) & " not found!", vbInformation Exit Sub End If columnNumberStart = rng1.Column 

我想到了! 问题是这样的:它没有finddate,因为date是由一个公式产生的! 我的第一个date是手动input的,但是其余的是第二个单元格的填充序列,它是A2=A1+1并一直沿着这条线。 我想这样,所以开始date可以改变,但由于某种原因Excel不认可这些date!?! 多么奇怪?!?!

问题解决了。 你说的是正确的,它没有finddate,但看起来明智的时候,看电子表格是在那里明显,但在看他们的价值观是公式的单元格。