Excel VBA SpecialCells代码可以在家用电脑上运行,但不能在工作电脑上运行
我编写宏来自动化工作流程。我的当前宏必须选择过滤数据的第一个可见行。我在家里用同一版本的Excel(16)测试了这段代码,效果很好。但是,当我在工作中尝试时,它给出了[运行时错误代码“1004”:无法获取Range类的SpecialCells属性] 我已经检查过,以确保两本书的格式相同。测试手册的数据量大于工作手册的数据量。由于该代码在家中使用的是同一版本的Excel,我不确定是什么原因导致了这种差异。这是我正在使用的代码Excel VBA SpecialCells代码可以在家用电脑上运行,但不能在工作电脑上运行,excel,vba,Excel,Vba,我编写宏来自动化工作流程。我的当前宏必须选择过滤数据的第一个可见行。我在家里用同一版本的Excel(16)测试了这段代码,效果很好。但是,当我在工作中尝试时,它给出了[运行时错误代码“1004”:无法获取Range类的SpecialCells属性] 我已经检查过,以确保两本书的格式相同。测试手册的数据量大于工作手册的数据量。由于该代码在家中使用的是同一版本的Excel,我不确定是什么原因导致了这种差异。这是我正在使用的代码 Sub First_Visible_Cell() With W
Sub First_Visible_Cell()
With Worksheets("Items").AutoFilter.Range
Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Select
End With
End Sub
您的
范围
对象没有使用With
语句,因为它不是以点开头的
那么这个
With Worksheets("Items").AutoFilter.Range
Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Select
End With
实际上和
With Worksheets("Items").AutoFilter.Range
ActiveSheet.Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Select
End With
你可能是有意的
With Worksheets("Items").AutoFilter.Range
Worksheets("Items").Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Select
End With
还请注意,如果未设置自动筛选
,它将抛出一个错误,如果偏移量(1,0)
中没有可见的单元格,它也将抛出一个错误:
Dim wsItems As Worksheet
Set wsItems = Worksheets("Items")
With wsItems.AutoFilter.Range
Dim VisibleCells As Range
On Error Resume Next 'hide errors if they occur
Set VisibleCells = .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1) 'throws error if no visible cells
On Error Goto 0 're-enable error reporting!
If Not VisibleCells Is Nothing Then
wsItems.Range("A" & VisibleCells.Row).Select
Else
MsgBox "No Visible Cells"
End If
End With
两件事1。您确定
工作表(“项目”)
处于活动状态吗?您应该始终完全限定该范围。当前活动工作表可能不是您认为的工作表。尝试工作表(“项目”).范围(“A”和偏移量(1,0).特殊单元格(xlCellTypeVisible)(1).行)。选择2。使用SpecialCells
时,最好进行正确的错误处理。参见示例。@SiddharthRout:谢谢你的第二个链接。我会用处理它,如果错误号为0,那么似乎更差。另一个教训(代号sandwith
)@Siddharth-Rout:我确信工作表(“项目”)
处于活动状态。较大的宏指定工作簿和工作表。此外,视图在相应的图纸上结束。它只是无法选择一行。然而,我确实尝试过建议修改代码,但没有效果。我要问的真正问题是,“为什么这些代码可以在我的家用电脑上运行,而不能在登录到我工作的虚拟桌面的笔记本电脑上运行?如果在你的家用电脑上运行,上述代码应该可以在另一台电脑上运行(在相同的情况下)。你能帮我运行这几个测试吗。在xlCellTypeVisible
行之前添加两行…Msgbox-Activesheet.name
,然后是Msgbox-Activesheet.autofiltermode
。你得到了什么消息?@Siddharth-Rout:我添加了这些行。它给出了一个显示工作表名称的Msgbox框,然后是一个“True”,然后出现了正常错误消息。我尝试了评论中列出的许多建议。所有的代码修改都表明在我的家用电脑上可以正常工作。但是,当在我的工作笔记本电脑上使用时,它们会产生相同的错误信息。我要问的真正问题是,“为什么这些代码可以在我的家用电脑上工作,而不能在登录到我工作的虚拟桌面的笔记本电脑上工作?”我忍不住想,这可能不是实际代码本身的问题,而是代码如何与远程桌面系统或安全功能交互的问题,或者类似的。你测试过我发布的最后一个代码块吗?这一个不能给出与您在问题中发布的相同的错误。你得到的结果是什么?那确实有效。谢谢它只选择了第一个可见的单元格,但我只是添加了行(ActiveCell.Row)。在代码之后选择,以选择整行。现在,我的其余代码都可以正常工作了。我仍然想知道为什么原始代码在一张纸上工作,而不是在另一张纸上工作。这似乎很奇怪,我想了解这种奇怪现象的原因。谢谢大家的帮助!因为使用.Select
和ActiveSheet
不是很可靠(请参阅)<每当用户单击另一张工作表时,代码>活动工作表
都会更改。这意味着您无法可靠地判断这是哪张纸。尽量避免使用它,并对每个范围对象使用完整的工作表引用。