- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的VBScript
打开文件夹中的所有“xlsm”文件,运行VBA
代码“Slim”,然后关闭工作簿(一个一个)。它工作正常,但我在错误处理方面遇到了麻烦。如果该脚本试图打开当前由其他人打开的工作簿,则我将收到错误 pop 对话框Someone else is working in /path + wb-name/ right now. Please try again later.
,并且循环将暂停,直到在警告消息上单击OK
为止。看来它将打开工作簿没有问题,但是由于VBA代码保存了一个新文件并尝试删除旧文件,因此最终导致错误。因此,我将得到一个新文件,并在错误消息之上添加一个未删除的旧文件。
尽管显然不是理想的解决方案,但是在这种情况下退出整个循环也比等待单击确定更好,因为VBScript是自动启动的。
在这种情况下,我需要构建一个错误处理程序,这样就可以跳过已经打开的文件,并且循环不会中断。不幸的是,DisplayAlerts = False
很好,而On Error Resume Next
在这里无法做到。
如果可能的话,我想通过VBScript解决此问题,而不是调整VBA代码。
Set fso = CreateObject("Scripting.FileSystemObject")
Set xl = CreateObject("Excel.Application")
On Error Resume Next
xl.DisplayAlerts = False
For Each f In fso.GetFolder("G:\Archive").Files
If LCase(fso.GetExtensionName(f.Name)) = "xlsm" Then
Set wb = xl.Workbooks.Open(f.Path)
xl.Run "Slim"
wb.Close
End If
Next
xl.Quit
Set fso = Nothing
Set xl = Nothing
尝试了不同的场景,到目前为止还没有破解。这是最新的选择,但是没有帮助(检查工作簿当前是否为只读的方式是否不同)?
For Each f In fso.GetFolder("G:\Archive").Files
If LCase(fso.GetExtensionName(f.Name)) = "xlsm" Then
Set wb = xl.Workbooks.Open(f.Path)
If NOT wb.ReadOnly Then
xl.Run "Slim"
wb.Close
Else
wb.Close
End If
End If
Next
最佳答案
如果打开了excel文件,则再次打开该文件将被阻止。重命名文件也被阻止,但是重命名失败不会显示带有resume next
的消息框
试试这个代码。它尝试首先重命名文件。如果重命名成功,它将重命名,然后运行宏。如果重命名失败,它将跳过文件。
Set fso = CreateObject("Scripting.FileSystemObject")
Set xl = CreateObject("Excel.Application")
On Error Resume Next
xl.DisplayAlerts = False
For Each f In fso.GetFolder("D:\MikeStuff\StackOverflow\ExcelCheckOpen").Files
If LCase(fso.GetExtensionName(f.Name)) = "xlsm" Then
xpath = f.Path ' file path lost after rename
fso.MoveFile xpath, xpath & ".txt" ' will fail if file locked by excel
if fso.FileExists(xpath & ".txt") Then ' rename worked, file not locked
fso.MoveFile xpath & ".txt", xpath ' rename back
Set wb = xl.Workbooks.Open(xpath)
xl.Run "Slim"
wb.Close
End If
End If
Next
xl.Quit
Set fso = Nothing
Set xl = Nothing
关于error-handling - VBScript “open all workbooks”错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63677033/
如何引用我的主要工作簿和通过此子过程打开的第二个工作簿?我尝试做workbooks.("client_path").activate因为我使用此宏的目标是打开一个单独的工作簿,该工作簿分配给变量 cl
看到这篇文章Detail AttributeError: 'module' object has no attribute 'workbook'对于同样的错误,有一个拼写错误。“W”对于工作簿来说是大
我创建了一个文件并将其引用为 GlobalFile . 然后我将它保存为“Glo”,然后保存为“Ume”。然后我重新打开保存的文件,以在两个不同的 Workbook 对象中以两个不同的名称打开两个不同
我无法将数据从一个工作簿复制到另一个工作簿。但在同一工作簿中它的工作原理。运行宏程序后,目标工作表为空。我有2个代码。两者都不工作。我的源文件是.xlsx格式,目标文件是.xlsm格式。有没有错误?
我在一个文件夹中有许多相同结构的 excel 文件(Test01、Test02、Test03)。 我在同一个文件夹中创建了另一个 excel 文件,需要从其他 excel 文件(结果)中提取信息。 每
我正在尝试将整个工作表从一个 Excel 文件复制到另一个 Excel 文件中的工作表。以下是我编写的代码,但不起作用。请提出更改建议。 Sub copyallwos() Dim wkbSource
各位,我正在尝试设置 WorkbookSaveAsArgs 的 TextCodepage 属性,用作 Workbook 方法 SaveAs 的参数。它用于将 .xls 文件转换为 .csv 文件。但是
我目前正在使用 Workbooks.Open 来处理目录中包含的大量文件。但是打开和关闭这些文件会使文件出现在任务栏中,我想避免不断闪烁。 我收到一条建议,我可以使用 CreateObject 创建一
我在 Oracle Linux 6.6 中运行我的 Python 程序时遇到以下异常。我使用的是 Python 2.6 版。 Exception('Exception caught in workbo
我正在尝试将一堆 CSV 文件放入一个工作簿中,这是我的代码: import csv import glob import openpyxl import os, sys import pandas
我有一个大型 Microsoft Excel 文件,在办公室的用户之间共享。该文件有一个宏和一组数据验证。该文件每三个月的最后两周使用一次。该文件在圣诞节之前工作得很好,但是,我们在三月份遇到了错误。
我感觉我错误地使用了“onLoad”回调。基本上我要做的是在我的自定义功能区加载后立即在 VBA 中运行一些代码(位于我创建的加载项上)。 这是 XML 代码: 这是 VBA 代码: 这是一个全局声
当我在 VBA 中调用 Thisworkbook.Protect 时,工作簿的保护实际上会切换当前工作簿的保护状态,而不仅仅是保护工作簿。 Thisworkbook.Unprotect 但不会执行此操
我得到了一个由前同事创建的 Excel 文件。 Excel文件有数据连接链接到一些提取数据的位置,如何知道源的实际路径?我只看到它链接到 Data Source=Workbook; 工作簿的实际路径是
我正在尝试在 Microsoft Excel VBA 2010 中使用 Workbooks.Open 方法,但我收到一个编译错误,指出它需要“=”。我打错代码了吗? Workbooks.Open (
我有这段代码,它使用 workbook.open 打开 Excel 文件的下载链接。 Set wkbWebWorkbook = Workbooks.Open("sample") 在我的机器上,这总是有
我正在尝试复制打开一个工作簿,复制一个范围并将其粘贴到另一个工作簿中。打开工作簿并选择宏停止的范围后。 如果我稍后在代码中使用 Workbook.close,宏会在同一点停止,但工作簿甚至没有打开。
我正在编写一些将在按下按钮时运行的代码,打开一个 .csv 文件(从另一个程序导出),复制一些信息,然后将其粘贴到第一个文件中。有时(并且只有某些时候)它实际上会粘贴来自不同文件的信息。它似乎在打开另
我正在尝试将 .xls 文件转换为 .xlxs 我尝试了此代码的许多变体,但每次我遇到此错误消息时: Exception lors de l'appel de « SaveAs » avec « 2
我在尝试使用 VBA 读取两个 .CSV 文件的内容时遇到问题。这两个文件的结构如下: 当我使用 Workbooks.Open(
我是一名优秀的程序员,十分优秀!