在声明变量时,未设置块变量。

20 浏览
0 Comments

在声明变量时,未设置块变量。

我对VBA不是很了解(目前正在自学),希望有人能帮我解决一个错误。我正在编写一个宏,用于定位位于作为每周时间表的工作表中的今天的日期。每个时间表都是基于相同的模板。我希望循环遍历每个工作表,在B列中搜索今天的日期,如果找到,选择其左边的单元格,并停止搜索其他工作表。

该列中的日期是基于公式的,所以不能使用find函数。我觉得我差不多快成功了,但是出现了“运行时错误91:对象变量或With块变量未设置。”以下是我的代码。我在targetcell = ws.Cells(Counter, 2)这一行出现错误。

Sub test()
    Dim ws As Worksheet
    Dim FindString As Date               ' 今天的日期                  
    Dim DateRange As Range               ' 特定时间表上的日期范围
    Dim target As Long                   ' 当前正在检查的日期
    Dim targetcell As Range              ' 正在检查日期的位置
    Dim found As Boolean                 ' 检查是否找到日期
    Dim LR As Double                     ' 存储日期的列的最后一行
    '将今天的日期转换为可以在日期范围中搜索的字符串
    FindString = CLng(Date)              
    found = False                        '找到的起始点
    For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Dashboard" And ws.Name <> "Template" Then           '只检查时间表
         ws.Activate       ' 选择时间表         
         LR = ws.Range("B:B").SpecialCells(xlCellTypeLastCell).Row
          For Counter = 1 To LR
                targetcell = ws.Cells(Counter, 2)
                target = CLng(targetcell)
                If target = FindString Then
                  ws.Cells(Counter, 1).Select
                  found = True
                  Exit For
               End If
          Next Counter
          If found = True Then
            Exit For
          End If
    End If
    Next ws
End Sub

我尝试通过将targetcell = ws.Cells(Counter, 2)完全删除来解决问题,将target = CLng(targetcell)更改为target = CLng(ws.Cells(Counter, 2)),但是这样在那一行上出现了运行时错误13:类型不匹配。

非常感谢任何帮助!

0
0 Comments

问题出现的原因是在将对象分配给对象变量时,需要使用Set关键字。解决方法是将代码修改为Set targetcell = ws.Cells(Counter, 2)。这是一个常见的错误,当连续填充多个变量时经常会犯的错误。另外,还建议将变量名"target"改为其他名称,因为"target"是VBE用于触发特定对象上的事件时使用的保留关键字,比如Worksheet_Changed事件。此外,要确保循环遍历的值不是文本,因为只有可以转换为长整型的值才能正常工作。

0