如何find下一个可用的date,如果它没有find使用VBA comendeddate

我需要帮助。 我有Sheet 1和Sheet 2。 并在Sheet1 / 2我有date列B和两个工作表date不相同,但当我推荐selectdate打印我想VBAselect最近的date,如果它找不到我的date。 例如: – 如果我要求VBA打印date12年8月12日我可以在Sheet1中select,但在Sheet2中没有8月12日,所以它必须select13日或11日打印。 在我的编码中,如果它在相同的date,它将打印两张表。 但是,如果失败了,它会显示错误。

Sub CreatePDF() Dim Sh As Worksheet Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") Dim i, j2, j3, sh2EndCell, sh3EndCell As Integer Dim closest As Date Dim W1Enddate As Date W1Enddate = Application.InputBox("Enter the End Date") sh2EndCell = sh2.Range("b" & Rows.Count).End(xlUp).Row sh3EndCell = sh3.Range("b" & Rows.Count).End(xlUp).Row For i = 2 To sh2EndCell If sh2.Range("b" & i).Value = W1Enddate Then j2 = i Exit For End If Next i For i = 2 To sh3EndCell If sh3.Range("b" & i).Value = W1Enddate Then j3 = i Exit For End If Next i sh2.Range("A1", "K" & j2).PrintPreview sh3.Range("A1", "K" & j3).PrintPreview Application.ScreenUpdating = False sh2.PageSetup.PrintArea = ("A1:K" & j2) sh3.PageSetup.PrintArea = ("A1:K" & j3) Sheets(Array("sheet2", "sheet3")).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="", _ OpenAfterPublish:=True Application.ScreenUpdating = True End Sub 

请参阅上面我的代码。

我认为你的代码有两个问题:

  1. j2j3是变体(不是整数,因为我认为你想要的)
  2. 你的代码没有做任何事情来find“最接近”的date – 你有一个closestdatevariables,不使用任何地方

由于(1),如果没有find完全匹配的date, j2j3将不会被定义,所以像sh3.Range("A1", "K" & j3).PrintPreview这样的行会崩溃。 请注意我的代码j2j3是如何构成整数的。 相比之下,在你的代码中, ij2j3sh2EndCelltypes没有被指定,所以默认是Variant)。

为了解决(2),下面的代码在每种情况下find最近的date。 min以大数开始,并用diff代替,每次finddate之间的较小差异。 请注意,在我的代码中没有更多的Exit For ,因为它循环遍历所有date以确保find最近的date。 希望有所帮助。

 Option Explicit Sub CreatePDF() Dim Sh As Worksheet, sh2 As Worksheet, sh3 As Worksheet Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") Dim i As Integer, j2 As Integer, j3 As Integer, sh2EndCell As Integer, sh3EndCell As Integer Dim closest As Date, diff As Long, min As Long Dim W1Enddate As Date W1Enddate = Application.InputBox("Enter the End Date") sh2EndCell = sh2.Range("b" & Rows.Count).End(xlUp).Row sh3EndCell = sh3.Range("b" & Rows.Count).End(xlUp).Row min = 100000# For i = 2 To sh2EndCell diff = Abs(W1Enddate - sh2.Range("b" & i).Value) If diff < min Then min = diff j2 = i End If Next i min = 100000# For i = 2 To sh3EndCell diff = Abs(W1Enddate - sh3.Range("b" & i).Value) If diff < min Then min = diff j3 = i End If Next i sh2.Range("A1", "K" & j2).PrintPreview sh3.Range("A1", "K" & j3).PrintPreview Application.ScreenUpdating = False sh2.PageSetup.PrintArea = ("A1:K" & j2) sh3.PageSetup.PrintArea = ("A1:K" & j3) Sheets(Array("sheet2", "sheet3")).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="", _ OpenAfterPublish:=True Application.ScreenUpdating = True End Sub