for i循环中的运行时错误13,曾经工作

时间:2016-02-18 13:23:20

标签: excel vba excel-vba runtime-error

背景

我想根据第7行中是否有 x 来隐藏工作表中的列.x未输入但是通过公式填充。

我在另一个工作表中使用了以下代码,它是否有效。我唯一改变的是sub,工作表和行的名称(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,我需要纠正什么?

1 个答案:

答案 0 :(得分:0)

这是:

注意它没有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