【问题标题】:Run a macro on a sheet, while working on a other [duplicate]在工作表上运行宏,同时处理另一个 [重复]
【发布时间】:2022-01-25 17:23:00
【问题描述】:

我有一本带有多张纸的工作簿。

在我的第二张工作表上,我有一个运行良好的小宏,但如果我想运行它,而我在另一张工作表上,excel vba 会向我显示一个错误并且它不起作用。

这是我的代码:

Dim myDate As Variant, rng As Range 
Dim lastRow As Integer, penultimateRow As Integer
    
Set rng = Range("A1:A207") 
Set myDate = rng.Find(What:=Int(Date), LookIn:=xlFormulas)  

Worksheets("Lernzeit-Tracking").Cells(myDate.Row, myDate.Column + 1).Value = _
   Worksheets("Übersicht").Range("L20").Value 
    
With Worksheets("Lernzeit-Tracking") 
    penultimateRow = .Cells(.Cells(Rows.Count, 2).End(xlUp).Row, 2).End(xlUp).Row
    lastRow = .Cells(Rows.Count, 2).End(xlUp).Row
End With
    
If IsEmpty(Sheets("Lernzeit-Tracking").Cells(lastRow - 1, 2)) = True Then
    Sheets("Lernzeit-Tracking").Range(Cells(penultimateRow + 1, 2), Cells(lastRow - 1, 2)).Value = 0 
End If

错误消息说:

“未设置对象变量”

和线

Worksheets("Lernzeit-Tracking").Cells(myDate.Row, myDate.Column + 1).Value == Worksheets("Übersicht").Range("L20").Value 

被标记

如何在另一张纸上运行我的宏?

【问题讨论】:

  • 该行包含不合格的范围引用。通过扩展 With 块来限定它们
  • 另外,当您使用.Find 时,您需要检查它之后的结果,以确保它不会返回Nothing,然后才能使用它。如果myDate 什么都不是,你就不能像使用它一样使用它。

标签: excel vba


【解决方案1】:

您在下一行缺少对象限定符

Set rng = Range("A1:A207") 

使用不带对象限定符的Range 将在活动表上返回范围“A1:A207”。而是尝试以下行或相应地调整工作表名称。

Set rng = Thisworkbook.Worksheets("Lernzeit-Tracking").Range("A1:A207") 

【讨论】:

  • 感谢您的回答。现在可以了!但是当我想在处理另一张工作表时运行宏时,我遇到了一个新错误。新错误标记了倒数第二行 Sheets("Lernzeit-Tracking").Range(Cells(penultimateRow + 1, 2), Cells(lastRow - 1, 2)).Value = 0 。该行的唯一作用是用零填充所有空单元格,它在我处理主工作表时工作,但如果我在其他工作表上,它会显示错误。您可能对此有解决方案吗?
  • 对不起,我应该听懂了。与第一个错误类似,该行中的 Cells 引用也需要限定,否则是对 Activesheet.Cells 的引用。您可以像以前一样将该行放在另一个 With 块中并附加一个 .在细胞之前。或者,它会非常不可读,但您可以将 Cells 引用替换为 Sheets("Lernzeit-Tracking").Cells 。希望对您有所帮助。
猜你喜欢
  • 2012-12-24
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2017-01-09
  • 1970-01-01
相关资源
最近更新 更多