如何在另一个 sheet 的范围内找到最大和最小日期?
How to find max and min date in a range of another sheet?
我正在编写 VBA 代码来查找范围内的最小和最大日期。当我执行它时,出现错误:
Run-time error '1004': Application-defined or object-oriented error.
下面是我的代码:
Sub GenerateSheet()
Dim i, r, numAssignments As Integer
Dim ssrRng, DestRange As Range
Dim StartDate, EndDate, d As Date
numAssignments = Sheets("Data").Range("A1048576").End(xlUp).Row - 1
Sheets("Schedule").Select
EndDate = WorksheetFunction.Max(Sheets("Data").Range(Cells(2, 8), Cells(numAssignments, 8)))
StartDate = WorksheetFunction.Min(Sheets("Data").Range(Cells(2, 5), Cells(numAssignments, 5)))
End Sub
这里,数据Sheet有8列,第5列和第8列是日期
您告诉范围它的父级是 Sheets("Data") 而不是单元格。出于所有意图和目的,您想要一个范围从 Data!E2:Schedule!E99.
Sub GenerateSheet()
Dim i, r, numAssignments As Integer
Dim ssrRng, DestRange As Range
Dim StartDate, EndDate, d As Date
numAssignments = Sheets("Data").Range("A1048576").End(xlUp).Row - 1
Sheets("Schedule").Select
with Sheets("Data")
EndDate = WorksheetFunction.Max(.Range(.Cells(2, 8), .Cells(numAssignments, 8)))
StartDate = WorksheetFunction.Min(.Range(.Cells(2, 5), .Cells(numAssignments, 5)))
end with
End Sub
使用 With Sheets("Data")
告诉该块内以句点(又名 .
或 句号 )开头的所有内容其父级是 张数("Data").
您最好更改代码的几个方面,尽管并非所有方面都对您遇到的错误负责。通常,它们会使您的代码更容易出错(例如,在更改代码或将其应用于其他情况时)。
Dim
的使用:
Dim ssrRng, DestRange As Range
将 ssrRng
声明为 Variant
,将 DestRange
声明为 Range
。
您应该使用 Dim ssrRng As Range, DestRange As Range
,假设您希望两者都作为范围。
使用变量而不是显式引用,尤其是在那些重复的情况下。
采用
Dim ws as Worksheet
Set ws = Workbooks(<your workbook name>).Sheets("Data")
numAssignments = ws...
代替
numAssignments = Sheets("Data")...
完全限定您使用的范围,除非您明确不想这样做。
- 替换
numAssignments = Sheets("Data")...
与,例如,
numAssignments = Workbooks(<your workbook name>).Sheets("Data")...
(或者,更好的是,遵循已经考虑到这一点的第 2 点)。
- 替换
EndDate = WorksheetFunction.Max(Sheets("Data").Range(Cells(2, 8), Cells(numAssignments, 8)))
和
EndDate = WorksheetFunction.Max(ws.Range(ws.Cells(2, 8), ws.Cells(numAssignments, 8)))
同样 StartDate
。在这种情况下,这些行是错误的来源,因为没有限定符的 Cells
在 ActiveSheet
. 中有效
避免使用 Select
,除非您明确需要它。声明和设置变量,并使用它们来引用您要使用的 Range
s 或 Object
s。
我正在编写 VBA 代码来查找范围内的最小和最大日期。当我执行它时,出现错误:
Run-time error '1004': Application-defined or object-oriented error.
下面是我的代码:
Sub GenerateSheet()
Dim i, r, numAssignments As Integer
Dim ssrRng, DestRange As Range
Dim StartDate, EndDate, d As Date
numAssignments = Sheets("Data").Range("A1048576").End(xlUp).Row - 1
Sheets("Schedule").Select
EndDate = WorksheetFunction.Max(Sheets("Data").Range(Cells(2, 8), Cells(numAssignments, 8)))
StartDate = WorksheetFunction.Min(Sheets("Data").Range(Cells(2, 5), Cells(numAssignments, 5)))
End Sub
这里,数据Sheet有8列,第5列和第8列是日期
您告诉范围它的父级是 Sheets("Data") 而不是单元格。出于所有意图和目的,您想要一个范围从 Data!E2:Schedule!E99.
Sub GenerateSheet()
Dim i, r, numAssignments As Integer
Dim ssrRng, DestRange As Range
Dim StartDate, EndDate, d As Date
numAssignments = Sheets("Data").Range("A1048576").End(xlUp).Row - 1
Sheets("Schedule").Select
with Sheets("Data")
EndDate = WorksheetFunction.Max(.Range(.Cells(2, 8), .Cells(numAssignments, 8)))
StartDate = WorksheetFunction.Min(.Range(.Cells(2, 5), .Cells(numAssignments, 5)))
end with
End Sub
使用 With Sheets("Data")
告诉该块内以句点(又名 .
或 句号 )开头的所有内容其父级是 张数("Data").
您最好更改代码的几个方面,尽管并非所有方面都对您遇到的错误负责。通常,它们会使您的代码更容易出错(例如,在更改代码或将其应用于其他情况时)。
Dim
的使用:Dim ssrRng, DestRange As Range
将ssrRng
声明为Variant
,将DestRange
声明为Range
。 您应该使用Dim ssrRng As Range, DestRange As Range
,假设您希望两者都作为范围。使用变量而不是显式引用,尤其是在那些重复的情况下。 采用
Dim ws as Worksheet
Set ws = Workbooks(<your workbook name>).Sheets("Data")
numAssignments = ws...
代替numAssignments = Sheets("Data")...
完全限定您使用的范围,除非您明确不想这样做。
- 替换
numAssignments = Sheets("Data")...
与,例如,
numAssignments = Workbooks(<your workbook name>).Sheets("Data")...
(或者,更好的是,遵循已经考虑到这一点的第 2 点)。 - 替换
EndDate = WorksheetFunction.Max(Sheets("Data").Range(Cells(2, 8), Cells(numAssignments, 8)))
和
EndDate = WorksheetFunction.Max(ws.Range(ws.Cells(2, 8), ws.Cells(numAssignments, 8)))
同样StartDate
。在这种情况下,这些行是错误的来源,因为没有限定符的Cells
在ActiveSheet
. 中有效
- 替换
避免使用
Select
,除非您明确需要它。声明和设置变量,并使用它们来引用您要使用的Range
s 或Object
s。