Vba 为什么我在这个迈塞尔范围错误上得到类型不匹配?

Vba 为什么我在这个迈塞尔范围错误上得到类型不匹配?,vba,excel,Vba,Excel,我在这行中不断遇到运行时错误: ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=MgrPath & "2018 Mid-Year Comp Statement - " & SM.Range("C5").Value & ".pdf", _

我在这行中不断遇到运行时错误:

                        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                Filename:=MgrPath & "2018 Mid-Year Comp Statement - " & SM.Range("C5").Value & ".pdf", _
                                Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                                OpenAfterPublish:=False
子语句_Autoprint()

将MCST设置为工作簿:设置MCST=ActiveWorkbook 以字符串形式显示用户:User=Environ$(“用户名”) 将保存路径设置为字符串:SavePath=“M:\comp\u statements\” 将CS标注为工作表:设置CS=MCST.Sheets(“控制表”) Dim MgrPath作为字符串,MyCell作为范围,打印为整数,i作为整数,SM作为工作表 打印=0 呼叫禁用 对于i=2到CS.Range(“B”和CS.Rows.Count).End(xlUp).Row 如果CS.Range(“A”&i)”,&CS.Range(“B”&i)”,则 设置SM=MCST.Sheets(CStr(CS.Range(“A”&i))) SM.计算 SM.Range(“P1”)=格式(CS.Range(“B”和i),“000000000”) 对于SM.范围内的每个菌丝体(“N2:N70”) 如果MyCell=“隐藏”,则 MyCell.EntireRow.Hidden=True ElseIf MyCell“隐藏”了吗 MyCell.EntireRow.Hidden=False 如果结束 下一个迈塞尔 如果不是Application.CalculationState=xlDone,则 多芬特 如果结束 MgrPath=“M:\Pittsburgh\GRP4\HR\U PCorpComp\2018年中\Reporting\Parsley\comp\U statements\”&SM.Range(“K5”)和“\” 如果Dir(MgrPath,vbDirectory)“,则 MkDir路径 如果结束 ActiveSheet.ExportAsFixedFormat类型:=xlTypePDF_ 文件名:=MgrPath和“2018年中期公司报表-”&SM.Range(“C5”).Value和“.pdf”_ 质量:=xlQualityStandard,IncludeDocProperties:=True,IgnorePrintAreas:=False_ OpenAfterPublish:=False 打印=打印+1 如果结束 接下来我 CS.激活 调用重新启用 端接头 我没有以该名称存在/打开的任何文件,我不知道是什么阻止了该文件的保存。所有其他的代码位都按照它们应该做的去做,它只是不能循环到下一个员工,因为由于该错误,保存被抑制。

试试这个

For Each mycell In SM.Range("N2:N70")
    If IsError(mycell) Then
        Debug.Print mycell.Address
    Else
        mycell.EntireRow.Hidden = (mycell = "HIDE")
    End If
Next mycell
  • 使用iError处理错误,或者
  • 转到上述代码所指向的单元格,检查是否存在任何公式错误

  • 如果单元格有公式错误,通常会出现该错误。

    您是否尝试过使用
    如果MyCell.Value=“HIDE”那么
    ?另外,将i声明为Long,而不是Integer。Integer可以处理工作表中的更多行。在抛出错误的行上放置断点(F9),然后检查正在查看的单元格的值。如果该值是一个单元格错误值,这就是为什么会出现类型不匹配。错误值的类型为
    Error
    ,只能强制转换为
    变量
    。或者按照@SiddharthRout的建议去做,但我强烈建议您熟悉VBE中的调试器工具。Protip:
    foo.Range(“某物”)
    是一个隐藏的默认成员调用,它使您的代码隐式。当你的意思是
    .Range(“某物”)
    时,不要使用
    .Range(“某物”).Value
    …并且没有必要将相同的注释发布3次…将代码中的
    替换为
    =
    。尝试此
    如果Dir(MgrPath,vbDirectory)=“”,则
    
    For Each mycell In SM.Range("N2:N70")
        If IsError(mycell) Then
            Debug.Print mycell.Address
        Else
            mycell.EntireRow.Hidden = (mycell = "HIDE")
        End If
    Next mycell