Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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 如何调用具有参数的子例程?_Excel_Vba_Ms Word - Fatal编程技术网

Excel 如何调用具有参数的子例程?

Excel 如何调用具有参数的子例程?,excel,vba,ms-word,Excel,Vba,Ms Word,我正在使用Excel用户表单为给定日期输入的批次生成报告 报告存储在Word文档中,其中包含1到8个质量样本的结果(样本数量因批次而异) Userform用于加载Excel,从用户处接收批号和日期,从Excel工作簿的不同工作表中检索当天的样本和批次,然后根据自定义模板将数据复制到新的Word文档中 Userform的输入部分和Word模板都已设置。我在“OK”按钮的事件处理过程中遇到了一个障碍 表单的OK按钮事件处理程序提供 编译错误 在 编辑器没有在我的makeReport方法中指出问题;事

我正在使用Excel用户表单为给定日期输入的批次生成报告

报告存储在Word文档中,其中包含1到8个质量样本的结果(样本数量因批次而异)

Userform用于加载Excel,从用户处接收批号和日期,从Excel工作簿的不同工作表中检索当天的样本和批次,然后根据自定义模板将数据复制到新的Word文档中

Userform的输入部分和Word模板都已设置。我在“OK”按钮的事件处理过程中遇到了一个障碍

表单的OK按钮事件处理程序提供

编译错误

编辑器没有在我的
makeReport
方法中指出问题;事件处理程序中对
makeReport
的调用以红色突出显示

我使用的是Excel 2013 VBA编辑器,Excel中的内置调试工具、Microsoft online VBA文档以及通过Google找到的各种论坛帖子都无法为我提供问题的完整答案以及如何解决问题的方法

确定按钮事件处理程序

Private Sub-OK按钮\u单击()'确定按钮
'声明变量
作为整数的Dim lNum
Dim pDay作为日期
将名称设置为字符串
作为字符串的Dim nStr
将dStr设置为字符串
'批号或包装日期输入错误的错误处理程序
关于错误转到错误处理程序
'将输入值转换为正确的类型
nStr=TextBox1.Value
dStr=TextBox2.Value
'设置变量值
lNum=CInt(nStr)
MsgBox(“步骤1完成”+vbCrLf+“批号:+nStr”)
pDay=格式(dStr,“mm/dd/yyyy”)
MsgBox(“第2步完成”+vbCrLf+”包装日期:+dStr)
name=nameDoc(pDay,lNum)
MsgBox(“步骤3完成”+vbCrLf+”报告名称:“+Name”)
'检查现有报告
如果Dir(\\核心\杂项\质量\样本报告\“+名称),则
MsgBox(“文件“+name+”已存在。请检查报告的\\CORE\Miscellaneous\Quality\Sample Reports。”)
卸载UserForm1
出口接头
其他的
生成报告(lNum,pDay)
如果结束
'卸载用户表单并清理
卸载UserForm1
出口接头
错误处理程序:
MsgBox(“错误。请重试。”)
'卸载UserForm1
端接头
makeReport子组件

子生成报告(lNum为整数,pDay为日期)
'模板路径:\\CORE\Miscellaneous\Quality\Sample Reports\Template\Defect Report.dotm
'完成报告的保存路径:\\CORE\Miscellaneous\Quality\Sample Reports
'生成文档名称
将名称设置为字符串
name=nameDoc(pDay,lNum)
'初始化word对象并打开word
dimwapp作为Word.Application
将wDoc设置为Word.Document
设置wApp=CreateObject(“Word.Application”)
wApp.Visible=True
设置wDoc=wApp.Documents.Add(模板:=(“\\CORE\missional\Quality\Sample Reports\Template\Defect Report.dotm”),NewTemplate:=False,DocumentType:=0)
'初始化excel对象
将工作簿作为工作簿
将工作表设置为工作表
设置wbBook=ThisWorkbook
设置wsSheet=wbBook.Worksheets(“缺陷表”)
'在报告顶部填写批号和日期
与wDoc
.Application.Selection.Find.Text=“”
.Application.Selection.Find.Execute
.Application.Selection=pDay
.Application.Selection.EndOf
.Application.Selection.Find.Text=“”
.Application.Selection.Find.Execute
.Application.Selection=lNum
以
'初始化循环变量
将行1设置为整数
将行2设置为整数
Dim diff作为整数
模糊更像布尔值
Dim num为整数,num1为整数,col为整数
将计数设置为整数
计数=0
差异=0
更多=错误
'Do while循环允许每天可变数量的样本
当计数小于8时进行
'检查每天的起始行是否正确
行1=工作表函数.Match(lNum,wsSheet.Range(),0)
row2=工作表函数.Match(pDay,wsSheet.Range(),0)
如果IsError(第1行)或IsError(第2行),则
'复制完所有样本后中断循环
退出Do
ElseIf row1=row2然后
num=4
num1=num
当num<31时执行此操作
'列变量
col=计数+1
'将数据复制到word文档,以说明word表中的空行
选择案例编号
案例6、10、16、22、30
num1=num1+1
其他情况
num1=num1
结束选择
ActiveDocument.Tables(1).Cell(num1,col)=ActiveSheet.Range().Cells(row1,num)
num=num+1
下一个
其他的
'调整计数以调整第1行和第2行之间的差异
计数=计数-1
如果结束
'将碰撞移动到第1行下方,以允许匹配找到下一个可行的结果
差异=行1+1
wsSheet=wsSheet.Range().Offset(差异,0)
'迭代计数
计数=计数+1
环
'将单词对象归零
设置wdDoc=Nothing
设置wdApp=Nothing
'使用常规名称格式保存文档,以便于访问
wDoc.SaveAs2文件名:=“\\CORE\Miscellaneous\Quality\Sample Reports\”+名称,文件格式:=wdFormatDocumentDefault,AddtoRecentFiles:=False
端接头
这里的括号表示您希望返回的内容不会发生,因为
makeReport
Sub
而不是
函数。这导致了编译错误。要纠正错误,只需拆下支架

另外还有一个问题,因为与
pDay
不匹配。当你
Sub makeReport(lNum As Integer, pDay As Date)
makeReport(lNum, pDay)
pDay = Format(dStr, "mm/dd/yyyy")
pDay = CDate(dStr)
.Application.Selection = pDay
.Application.Selection = Format(pDay, "mm/dd/yyyy")