for i 循环中的运行时错误 13,它曾经有效

Runtime error 13 in a for i loop, which used to work

背景:

我想根据第 7 行是否有 x 隐藏 sheet 中的列。x 不是输入的,而是通过公式填写的.

我在另一个作品中使用了以下代码sheet,是否有效。我唯一改变的是子名称、作品sheet 和行(7 而不是 5)。

然而,每当我尝试从 vba 编辑器中手动 运行 这个子程序作为测试时,它都会产生 运行 时间错误 13(类型不匹配)。

Sub hidCol2()

 Dim i As Long

 Application.ScreenUpdating = False
 Set ws = ThisWorkbook.Worksheets("Zeitplan")
 ws.Cells.EntireColumn.Hidden = False

 For i = Cells(7, Columns.Count).End(xlToLeft).Column To 1 Step -1

  If Cells(7, i) = "x" Then Cells(7, i).EntireColumn.Hidden = True

 Next i

 Application.ScreenUpdating = True

End Sub

我的问题:

为什么上面的代码会产生运行时间错误13,我需要更正什么?

这里是:

请注意,它可以在没有 Dim ws 的情况下工作,但我认为在使用前对变量进行标注是一个很好的做法。

如果有人能告诉我为什么 Dim ws 这里没有必要,那将消除我脑海中的一些疑虑。

Sub hidCol2()

 Dim i As Long
 Dim ws As Worksheet                  'As Suggested by @eirikdaude but I don't know why it worked without it as well (Tested on a workbook with a single worksheet)
 Application.ScreenUpdating = False
 Set ws = ThisWorkbook.Worksheets("Zeitplan")
 ws.Activate
 ws.Cells.EntireColumn.Hidden = False

 For i = ws.Cells(7, Columns.Count).End(xlToLeft).Column To 1 Step -1

  If Trim(ws.Cells(7, i).Text) = "x" Then ws.Cells(7, i).EntireColumn.Hidden = True

 Next i

 Application.ScreenUpdating = True

End Sub