求教,VBA代码按F8可逐行运行到代码结束,但F5自动运行会报错
vba吧
全部回复
仅看楼主
level 2
gdjhfhΩ 楼主
运行到Wb.Close False 这行代码关闭Wb工作簿时会把代码工作簿一起关了。第二次循环到该句前一句时就报错,请问各位是哪里的问题。
Option Explicit
Sub test()
Dim n%, m%, Folder$, File$, Wb As Workbook, Time!, Time1!, Time2!
With Application.FileDialog(msoFileDialogFolderPicker)
.Show '打开文件夹
Folder = .SelectedItems(1) & "\" '文件夹路径赋值
End With
Time1 = Timer '提取当前时间
'Application.ScreenUpdating = False '冻结屏幕
File = Dir(Folder & "*.xlsx") '遍历XLSX文件
Do While File <> ""
Set Wb = GetObject(Folder & File) '文件完整路径赋值给Wb
n = n + 1
ThisWorkbook.Sheets(1).Cells(n, 1) = Mid(File, 2, 4) '提取文件名的第2到5位填入代码工作簿的第一个工作表的第n行第1列的单元格
ThisWorkbook.Sheets(1).Cells(n, 2).Resize(, 7) = Wb.Worksheets(1).Range("A1:G1").Value '将Wb工作簿的第一个工作表的A1:G1区域的值赋值给代码工作簿第一个工作表的第n行第2列开始的单元格
Wb.Close False '关闭Wb工作簿且不保存
Set Wb = Nothing '释放Wb工作簿
File = Dir
Loop
'Application.ScreenUpdating = True
Time2 = Timer
Time = Time2 - Time1
MsgBox "总用时" & Round(Time, 1) & "秒" & Chr(10) & "平均用时" & Round(Time / n, 1) & "秒"
End Sub
2025年01月09日 03点01分 1
level 7
直接问AI就好
2025年01月09日 04点01分 2
level 7
看着像个倒计时?
我用VBA想着做过,但是AI告诉我,VBA因为某些“限制”性的原因。
做这个很难,而且运行起来回错误百出。。。
2025年01月09日 04点01分 3
level 12
你不要把这个代码工作簿放到你要操作的那个文件夹里面,这样把代码工作簿也操作了,混乱。要么你发这个文件夹你也可以,那你就加一个判断哇file<>This workbook点name
2025年01月09日 05点01分 4
没有和要处理的表格放在一个文件夹
2025年01月09日 05点01分
@gdjhfhΩ 那就奇怪了
2025年01月09日 05点01分
@烟雨江南ooo 我也是觉得很奇怪
2025年01月09日 05点01分
level 2
第一个DIM那插入这行
dim WbA as workbook, WbB as workbook
time1下面插入这行
set wba = thisworkbook
Set Wb = GetObject(Folder & File)这个改为
set wbb = wrokbooks.open(FileName:=Folder & File,UpdateLinks:=0)
最好把application.DisplayAlerts = false这个也设置上,不然工作簿打开有提示就卡住了
2025年01月10日 01点01分 5
@ming1259 不是没声明,而是他用这种方式打开的表在CLOSE的时候可能会令当时工作簿一起关闭的,所以需要分别声明为不同的对象来操作
2025年01月21日 10点01分
的确,估计是没有声明变量导致的报错!
2025年01月21日 08点01分
@ISD_狮子座 对,分开声明就对了!
2025年01月22日 05点01分
level 5
这个没有问题啊,我试了一下,估计是你的文件有问题
2025年01月21日 08点01分 6
吧务
level 11
赞一个
2025年01月23日 04点01分 7
1