Sql 在每张纸上循环不起作用

Sql 在每张纸上循环不起作用,sql,excel,ms-access,vba,Sql,Excel,Ms Access,Vba,我编写这个宏是为了循环遍历文件夹中的所有文件,并循环遍历每个文件中的每个工作表。然后在每个工作表的基础上对Access DB运行SQL,并将结果返回到工作表。问题是它并没有在每个工作表中循环,并且始终只返回debug.print中的最后一个Select Case选项。知道为什么吗?我需要静态设置起始页吗?此结构在其他场景中也能完美工作。SQL的引入是问题所在吗 代码: Private子attemptomindeids() Dim数据库作为DAO.Database 将rst设置为DAO.Recor

我编写这个宏是为了循环遍历文件夹中的所有文件,并循环遍历每个文件中的每个工作表。然后在每个工作表的基础上对Access DB运行SQL,并将结果返回到工作表。问题是它并没有在每个工作表中循环,并且始终只返回debug.print中的最后一个Select Case选项。知道为什么吗?我需要静态设置起始页吗?此结构在其他场景中也能完美工作。SQL的引入是问题所在吗

代码:

Private子attemptomindeids()
Dim数据库作为DAO.Database
将rst设置为DAO.Recordset
作为字符串的Dim strConnection
Dim i作为整数,fld作为对象
变暗变长
将工作表设置为工作表
将wsO设置为工作表
将wbk设置为工作簿
将文件名设置为字符串
将路径设置为字符串
变暗rCell As范围
暗rRng As范围
暗淡的开始时间是双倍的
模糊的二次选择为双色
Application.ScreenUpdating=False
Application.DisplayAlerts=False
Application.Calculation=xlCalculationManual
'MS OFfice 15.0 Access数据库引擎对象
开始时间=计时器
Set db=DBEngine.OpenDatabase(“pathtoDB”&“\”&“Microsoft1.accdb”)
path=“pathtofolder”和“\”
Filename=Dir(路径&“*.xl??”)
设置wsO=thiswoolk.Sheets(“Sheet1”)
当Len(文件名)>0时执行
多芬特
设置wbk=Workbooks.Open(路径和文件名,True,True)
对于ActiveWorkbook.工作表中的每张工作表
如果表索引>1,则
设置rRng=板材范围(“b2:b308”)
对于rRng.单元格中的每个rCell
如果是“”,那么
变量=rCell
调试。打印“名称”;ActiveSheet.Name
选择Case-ActiveSheet.Name
Case Is=“Thing”
vAr2=“[Thing]”
Case Is=“那里”
vAr2=“[There]”
Case Is=“That”
vAr2=“[That]”
Case Is=“This”
vAr2=“[This]”
结束选择
Set rst=db.OpenRecordset(“从“&vAr2&”中选择[ID],[Column],其中[ID]=”&vAriable)
wsO.Cells(Sheet1.Rows.Count,1)。End(xlUp)。Offset(1,0)。CopyFromRecordset rst
wsO.Columns(7).Cells(Sheet1.Rows.Count,1).End(xlUp).Offset(1,0)=Right(ActiveWorkbook.Name,Len(ActiveWorkbook.Name)-InStr(ActiveWorkbook.Name,“/”)
wsO.Columns(9).Cells(Sheet1.Rows.Count,1).End(xlUp).Offset(1,0)=ActiveSheet.Name
如果结束
下一个rCell
如果结束
下一个
wbk.关闭错误
Filename=Dir
环
rst.关闭
设置rst=无
db.关闭
Set db=Nothing
Application.ScreenUpdating=True
Application.DisplayAlerts=True
Application.Calculation=xlCalculationAutomatic
SecondsElapsed=圆形(计时器-开始时间,2)
MsgBox“此代码在”&SecondsElapsed&“秒”内成功运行”,vbInformation
您使用

选择Case-ActiveSheet.Name
但你的循环是

ActiveWorkbook.Worksheets中每个工作表的

因此,它总是使用第一张工作表(打开工作簿后默认处于活动状态)。
应该是:

选择案例表。名称
你的案例陈述会更简单,就像这样:

案例“东西”
您使用

选择Case-ActiveSheet.Name
但你的循环是

ActiveWorkbook.Worksheets中每个工作表的

因此,它总是使用第一张工作表(打开工作簿后默认处于活动状态)。
应该是:

选择案例表。名称
你的案例陈述会更简单,就像这样:

案例“东西”

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。非常感谢much@DougCoats-当您进行此操作时,我会将ActiveWorkbook.Worksheets中每个工作表的
替换为wbk.Worksheets
中每个工作表的
。捕获引用然后不使用它是没有任何意义的。循环中的每个其他位置也是如此。@DougCoats=您可以删除
Select Case
,只需写
vAr2=“[”&sheet.Name&“]”
。如果您只需要测试某些工作表,那么
Case“Thing”、“This”、“That”、“There”:vAr2=“[”&sheet.Name&“]”
@ScottHoltzman no shit?那真是个漂亮的芭蕾舞者。这是我想学习的方式,因为它涉及模块化/灵活性。我希望它能想到它myself@DougCoats-记住,没有原创的想法。我们的意识都在增长。:)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。非常感谢much@DougCoats-当您进行此操作时,我会将ActiveWorkbook.Worksheets
中每个工作表的
替换为wbk.Worksheets
中每个工作表的
。捕获引用然后不使用它是没有任何意义的。循环中的每个其他位置也是如此。@DougCoats=您可以删除
Select Case
,只需写
vAr2=“[”&sheet.Name&“]”
。如果您只需要测试某些工作表,那么
Case“Thing”、“This”、“That”、“There”:vAr2=“[”&sheet.Name&“]”
@ScottHoltzman no shit?那真是个漂亮的芭蕾舞者。这是我想学习的方式,因为它涉及模块化/灵活性。我希望它能想到它myself@DougCoats-记住,没有原创的想法。我们的意识都在增长。:)