Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA错误运行时13错误类型不匹配可能';找不到它的位置';发生什么事了_Excel_Vba - Fatal编程技术网

Excel VBA错误运行时13错误类型不匹配可能';找不到它的位置';发生什么事了

Excel VBA错误运行时13错误类型不匹配可能';找不到它的位置';发生什么事了,excel,vba,Excel,Vba,我已经搜索了几个小时,试图找到如何修复我的代码,但问题是我不知道错误是从哪里来的!请帮忙 我一直收到“运行时错误13类型不匹配” Sub-Mail\u Every\u工作表() 将sh设置为工作表 将wb设置为工作簿 Dim FileExtStr作为字符串 Dim FileFormatNum尽可能长 Dim TempFilePath作为字符串 将文件名设置为字符串 Dim OutApp作为对象 将邮件变暗为对象 TempFilePath=Environ$(“temp”)和“\” 如果Val(Ap

我已经搜索了几个小时,试图找到如何修复我的代码,但问题是我不知道错误是从哪里来的!请帮忙

我一直收到“运行时错误13类型不匹配”

Sub-Mail\u Every\u工作表()
将sh设置为工作表
将wb设置为工作簿
Dim FileExtStr作为字符串
Dim FileFormatNum尽可能长
Dim TempFilePath作为字符串
将文件名设置为字符串
Dim OutApp作为对象
将邮件变暗为对象
TempFilePath=Environ$(“temp”)和“\”
如果Val(Application.Version)<12,则
FileExtStr=“.xlsm”:FileFormatNum=52
如果结束
应用
.ScreenUpdate=False
.EnableEvents=False
以
Set-OutApp=CreateObject(“Outlook.Application”)
用于此工作簿中的每个sh。工作表
如果sh.Range(“D9”)值类似于“*@*。?*”,则
sh.副本
设置wb=ActiveWorkbook
TempFileName=“Sheet”和sh.Name和“of”_
&此工作簿的名称和格式(现在为“dd-mmm-yy h-mm-ss”)
Set-OutMail=OutApp.CreateItem(0)
与wb
.SaveAs TempFilePath&TempFileName&FileExtStr,FileFormat:=FileFormatNum
出错时继续下一步
发邮件
.至=sh.范围(“D9”).值
.CC=“”
.BCC=“”
.Subject=“每周预订报告”和sh.Range(“K3”)值
.Body=“Hi”&sh.Range(“D8”).Value&vbNewLine&“请查看随附的最新每周预订报告。”&vbNewLine&“如果我能提供进一步帮助,请随时与我联系。”
.Attachments.Add wb.FullName
.Display'或use.Send
以
错误转到0
.Close savechanges:=False
以
发送邮件=无
终止TempFilePath&TempFileName&FileExtStr
如果结束
下一个sh
设置应用程序=无
应用
.ScreenUpdate=True
.EnableEvents=True
以
端接头

我不确定是否会这么简单:我认为.xlsm是在excel版本12(2007)中引入的,但您的代码要求excel版本小于12(不会有xlsm文件类型)。将代码更改为“大于11”是否有帮助


在上一个
Dim
语句之后(或在整个
Dim
块之前),放入如下内容:

On Error Goto ErrHandler
ErrHandler:
    If Err.Number <> 0 Then
        Stop 'DO NOT LEAVE THAT IN PRODUCTION CODE!!!
        Resume 'pressing F8 when "Stop" is highlighted will take you to the error line.
    End If
然后在程序的底部(紧接着
End Sub
)放置如下内容:

On Error Goto ErrHandler
ErrHandler:
    If Err.Number <> 0 Then
        Stop 'DO NOT LEAVE THAT IN PRODUCTION CODE!!!
        Resume 'pressing F8 when "Stop" is highlighted will take you to the error line.
    End If
ErrHandler:
如果错误号为0,则
停止“不要将其留在生产代码中!!!
Resume'当突出显示“Stop”(停止)时,按F8键将进入错误行。
如果结束
请注意,这是一个严格意义上的“调试”错误处理程序-如果您在生产环境中有这样的代码,并且遇到错误,VBA IDE将启动并显示给用户进行调试。如果你把
Resume
放在那里,你会有一个很好的无限循环


此外,错误转到0时的
将使错误处理程序无效,因此请将其替换为错误转到ErrHandler时的

哪一行出现此错误?你试过逐行检查代码吗?这就是问题所在,它没有告诉我是哪一行。如果我进入debug&step-into,它不会做任何事情。
vbNewLine
实际上是
vbCrLf
?您可能希望将带有OutMail的
块移动到带有wb的
块下方的
块?您是否应该附加临时文件
TempFilePath&TempFileName&FileExtStr
,而不是
ActiveWorkbook
?为什么在
.xlsm
中需要它?谢谢,但不需要,这似乎不起作用。我认为这与主题或正文中的单元格引用有关,因为我以前使用过类似的代码,但没有它们?这可能与您的错误无关,但这是一个正确的观点:您的情况是相反的,版本<12表示2010年之前的任何版本(不是2007版本11吗?),这意味着您正在使用版本8(Excel 2003)保存.xlsm,这肯定会[可能]引起另一种问题。我认为条件应该是版本>=11。@retailcoder:根据Ron de Bruin的说法,Excel 2007是版本12,2003是版本11:所以它可能应该是
=12
=11
。@Chantel:我怀疑您运行的Windows 2003带有兼容包,所以它没有注意到文件格式的错误。我在Excel 2010中运行了上述代码,并收到运行时错误“1004”:对象\u工作簿的方法“SaveAs”失败。当我将代码切换到“>12”时,文件保存了下来。如果此代码将在其他计算机或Excel版本上运行,您可能应该更改代码以防止出错,并在较低版本中包含一个具有正确文件格式的
Else
语句。谢谢!它将错误显示为If sh.Range(“D9”).值,如“*@?*。?*”,因此我在单元格中输入了公式&现在可以正常工作了!我真是太感谢你们了!谢谢