此工作簿在Excel 2018中不工作?
我最近遇到一个问题,以前版本的Excel中使用的宏已停止正常工作。宏在运行时,会打开特定文件夹中的每个文件,复制其中的一些数据,并将其粘贴到打开的另一个文件中 由于此宏是从文件夹中的文件中运行的,因此之前已编程为不尝试重新打开该文件,代码如下:此工作簿在Excel 2018中不工作?,excel,vba,Excel,Vba,我最近遇到一个问题,以前版本的Excel中使用的宏已停止正常工作。宏在运行时,会打开特定文件夹中的每个文件,复制其中的一些数据,并将其粘贴到打开的另一个文件中 由于此宏是从文件夹中的文件中运行的,因此之前已编程为不尝试重新打开该文件,代码如下: ' Create a new workbook and set a variable to the first sheet. ' Set SummarySheet = Workbooks.Open ("[Redacted]") '
' Create a new workbook and set a variable to the first sheet.
' Set SummarySheet =
Workbooks.Open ("[Redacted]")
' agg_wkb_name = ActiveWorkbook
lrowcount = ActiveWorkbook.Worksheets("scheduled hours").UsedRange.Rows.Count
ActiveWorkbook.Worksheets("scheduled hours").Range("A2:bz" & lrowcount).Delete
' Modify this folder path to point to the files you want to use.
FolderPath = "[Redacted]"
' NRow keeps track of where to insert new rows in the destination workbook.
NRow = 2
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
' Loop until Dir returns an empty string.
Do While FileName <> ""
' Open a workbook in the folder
If FolderPath & FileName = ThisWorkbook.FullName Then
Set WorkBk = ThisWorkbook
Else
Set WorkBk = Workbooks.Open(FolderPath & FileName, , True)
End If
”创建新工作簿并将变量设置为第一个工作表。
'设置汇总表=
工作簿。打开(“[编辑]”)
'agg_wkb_name=ActiveWorkbook
lrowcount=ActiveWorkbook.Worksheets(“计划小时”).UsedRange.Rows.Count
ActiveWorkbook.Worksheets(“计划小时”).Range(“A2:bz”和lrowcount)。删除
'修改此文件夹路径以指向要使用的文件。
FolderPath=“[Redacted]”
'NRow跟踪在目标工作簿中插入新行的位置。
NRow=2
'第一次调用Dir,将其指向文件夹路径中的所有Excel文件。
FileName=Dir(FolderPath&“*.xl*”)
'循环,直到Dir返回空字符串。
文件名“”时执行此操作
'在文件夹中打开工作簿
如果FolderPath&FileName=thiswoolk.FullName,则
设置WorkBk=此工作簿
其他的
设置WorkBk=Workbooks.Open(FolderPath&FileName,True)
如果结束
但是,在我们的计算机和程序更新到Win10和Excel 2016后,此宏开始尝试打开运行该文件的工作簿(“ThisWorkbook”)。当您试图说“不,我不想重新打开文件”时,它会停止宏,当您说“是”时,Excel崩溃
我试图分离代码,从“ThisWorkbook”中提取数据的方式与从文件夹中的各种其他工作簿中提取数据的方式不同。新的代码部分如下:
Do While FileName <> ""
If Not (FolderPath & FileName = ThisWorkbook.Path & ThisWorkbook.Name) Then
Set WorkBk = Workbooks.Open(FolderPath & FileName, , True)
End If
Do While FileName“”
如果不是(FolderPath&FileName=ThisWorkbook.Path&ThisWorkbook.Name),则
设置WorkBk=Workbooks.Open(FolderPath&FileName,True)
如果结束
不幸的是,同样的错误仍然存在。我不知所措-我最好的猜测是“ThisWorkbook”在Excel的最新版本和当前版本之间的运行方式发生了变化 因此,原来系统管理员已将文件夹重新映射到我计算机上的驱动器。我修复了这个问题,没有让代码查看文件位置进行比较,只查看名称,因为这就是进入文件夹后的所有更改
如果有人遇到这种情况,或者有类似的情况,他们正在打开一个文件夹中的所有文件,但当前打开的文件除外,那么不用担心文件路径。就用这个名字吧 您是否尝试过单步遍历代码并查看
FolderPath
、FileName
和thiswoolk.FullName
的值?在试图打开工作簿的循环迭代中,它们的值是什么?是的,我有。他们是你所期望的;在断裂点,它们都是相同的。“NOT”的工作/编码不正确,或者ThisWorkbook函数运行异常。@如果您将[Redacted]
替换为更好的示例,例如C:\Users\MyUser\Myfolder\
,我们将更容易提供帮助。通常情况下,问题是因为缺少反斜杠,当您只需要文件名时会列出完整路径等等。@Graceclaw如果您在观看时得到了预期的值,那么听起来像是ThisWorkbook
正在做它应该做的事情。我开始怀疑它们中的一个是否在非打印字符或其他方面有细微差别。我这里没有Excel 2016的副本可供测试,但今晚我可能会尝试一下。你试过执行直到FileName=“”
如果FileName是此工作簿。则Name
设置WorkBk=Workbooks。打开(FolderPath&FileName,True)
如果