Vba for i循环中的运行时错误13,该循环过去正常工作

Vba for i循环中的运行时错误13,该循环过去正常工作,vba,excel,runtime-error,Vba,Excel,Runtime Error,背景: 我想根据第7行中是否有x隐藏工作表中的列。x不是键入的,而是通过公式填写的 我在另一个工作表中使用了下面的代码。我唯一更改的是子对象、工作表和行的名称(7而不是5) 但是,每当我尝试从vba编辑器手动运行此子项作为测试时,它都会产生运行时错误13(类型不匹配) 我的问题: 为什么上面的代码会产生运行时错误13,我需要更正什么?这里是: 请注意,它在没有dimws的情况下工作,但我认为在使用前对变量进行尺寸标注是一个很好的做法 如果有人能让我知道为什么没有必要在这里Dim ws,这将消除我

背景:

我想根据第7行中是否有x隐藏工作表中的列。x不是键入的,而是通过公式填写的

我在另一个工作表中使用了下面的代码。我唯一更改的是子对象、工作表和行的名称(7而不是5)

但是,每当我尝试从vba编辑器手动运行此子项作为测试时,它都会产生运行时错误13(类型不匹配)

我的问题:

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

这里是:

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

如果有人能让我知道为什么没有必要在这里
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

尝试
If trim(str(Cells(7,i))=“x”然后
或者
If Cells(7,i)。Value=“x”然后
您需要告诉我们是哪行代码导致了错误?尝试
If trim(Cells(7,i)。Text)=“x”然后是Cells(7,i).entireclumn.Hidden=True
更改到该行肯定会起作用您没有标注
ws
,并且您没有限定for循环的单元格和列正在处理的工作表,但除此之外,我没有看到任何会在代码中引起错误的内容(在一个名为“Zeitplan”)。我提到的后一个问题可能会导致它。@Santosh你的话行得通,如果你给出答案,我会把它标记为解决方案。如果你把
选项显式
放在(每个)的顶部模块,那么您需要有
Dim
语句。强烈建议您始终将
Option Explicit
放在模块顶部,因为他没有
Option Explicit
。严格地说,如果没有,永远不需要对变量进行调暗,并关闭Option Explicit,编译器只需在遇到变量时创建变量。如果您想对option explicit进行更深入的解释,以及为什么很容易忽略它会导致头痛,这可能会成为一个不错的新问题,尽管已经有一些相当类似的问题:如果您能详细说明为什么比较会失败,因为点击周围的空格,我会觉得很有趣。我确实觉得比较失败有点奇怪。@eirikdaude比较没有失败,不管有没有失败。之前的比较失败是因为有尾随空格或前导空格以及字符
x
,因此trim删除并获取文本o仅从该范围内的每个单元格进行比较。然后比较应返回false,而不是返回运行时错误。
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