选择具有最大日期的工作表

时间:2012-09-25 19:59:06

标签: excel-vba vba excel

我正在尝试从具有最新日期的工作簿中选择一个工作表。每个工作表的日期都在相同的空间中,否则它是空白或文本,因此我认为永远不应该评估为大于整数或日期格式化的值。一旦我找到该表,我想获取特定数据并使用它。我的问题是选择正确的表格。这是代码:

Dim wksht As Worksheet
Dim maxsheet As Worksheet
Dim currentdate as Integer
Dim maxdate as Integer

'go through each worksheet. compare the value of current date extracted from each sheet
'to maxdate. If currentdate > maxdate maxdate = currentdate.
'remember the worksheet for maxdate as maxsheet.

maxdate = 0
For Each wksht In ActiveWorkbook.Worksheets
    With wksht
        currentdate = wksht.Range("B1").Value
        If currentdate > maxdate Then
            maxsheet = wksht
            maxdate = currentdate
        End If
    End With
Next wksht

发生了什么事?我得到的错误是“'91':对象变量或未设置块变量。”我真的不了解帮助部分或我如何解决它。

再次查看代码我预见到另一个问题,一旦我将纸张存储起来处理工作表。我可以直接使用maxsheet.select吗?

4 个答案:

答案 0 :(得分:1)

两件事:

  1. 您正在初始化currentdatemaxdate integer;使用date数据类型。

  2. 您有maxsheet = wksht,应该是set maxsheet = wksht

  3. 至于您的其他问题,是的,您可以使用maxsheet.select,指定范围(例如maxsheet.range("B4")),具体取决于您需要检索的数据。

答案 1 :(得分:1)

循环逻辑对我来说很好看。你没有使用With wksht / End With,这是正确的。要使用,它将是:

For Each wksht In ActiveWorkbook.Worksheets
    With wksht
        currentdate = .Range("B1").Value ` <~~~~ This guy right here
        If currentdate > maxdate Then
            maxsheet = wksht
            maxdate = currentdate
        End If
    End With
Next wksht

现在,在不了解您的工作表的情况下,我不确定我是否可以专门回答您的问题,但是,我会将逻辑重做为:

[未测试]

Dim currentdate as Date
Dim maxdate as Date
For Each wksht In ActiveWorkbook.Worksheets
    if IsDate(wksht.Range("B1").Value) then    
        currentdate = CDate(wksht.Range("B1").Value)
        If currentdate > maxdate Then
            set maxsheet = wksht
            maxdate = currentdate
        End If
    end if
Next wksht

http://p2p.wrox.com/access-vba/11341-convert-text-date-time-access.html

答案 2 :(得分:1)

如果您将currentdatemaxdate变量更改为date类型并将maxsheet更改为string类型,请将行更改为{{1你将捕获页面的名称。然后,您可以使用maxsheet = wksht.name引用该页面。

答案 3 :(得分:0)

Dim maxdate as Date
Dim wksht as Worksheet
Dim currentdate as Date
dim maxsheet as string

maxdate = 0
For Each wksht In ActiveWorkbook.Worksheets
    If IsDate(wksht.Range("B1").Value) Then
        currentdate = CDate(wksht.Range("B1").Value)
        If currentdate > maxdate Then
            maxsheet = wksht.Name

            maxdate = currentdate
        End If
    End If
Next wksht

感谢您的帮助。这是工作代码