Excel宏在使用快捷键打开的.csv文件上停止

Excel宏在使用快捷键打开的.csv文件上停止,excel,vba,shortcut,Excel,Vba,Shortcut,我想打开两个.CSV文件,并使用宏快捷方式将它们另存为.XLSX文件。当我运行下面保存在PERSONAL.XLSB中的宏时,使用“查看>宏>运行所有工作正常”。选择两个.csv文件并将其另存为.xlsx文件。 但是,如果我使用宏shortucut键运行它,第一个文件将打开,所有内容都将停止。当第一个文件打开时,如何使用快捷键使宏的其余部分继续执行而不停止 .csv文件每天都会被替换,因此无法在其中嵌入任何内容 Sub SaveAsXLSX() ' SaveAsXLSX Shortcut: C

我想打开两个.CSV文件,并使用宏快捷方式将它们另存为.XLSX文件。当我运行下面保存在PERSONAL.XLSB中的宏时,使用“查看>宏>运行所有工作正常”。选择两个.csv文件并将其另存为.xlsx文件。 但是,如果我使用宏shortucut键运行它,第一个文件将打开,所有内容都将停止。当第一个文件打开时,如何使用快捷键使宏的其余部分继续执行而不停止

.csv文件每天都会被替换,因此无法在其中嵌入任何内容

Sub SaveAsXLSX()

' SaveAsXLSX  Shortcut: Ctrl+Shift+W

    ChDir "T:\Temp"

    Workbooks.Open Filename:= _

        "T:\Temp\File1.csv"

    ActiveWorkbook.SaveAs Filename:= _

        "T:\Temp\File1.xlsx" _

        , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    ActiveWorkbook.Close

    Workbooks.Open Filename:= _

        "T:\Temp\File2.csv"

    ActiveWorkbook.SaveAs Filename:= _

        "T:\Temp\File2.xlsx" _

        , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    ActiveWorkbook.Close

End Sub

问题是您使用的是
ActiveWorkbook
,这是一个有焦点且位于顶部的工作簿。这可以通过任何交互(例如用户单击)轻松更改。不惜一切代价避免任何包含
Active
的陈述(除非您知道自己在做什么以及为什么需要它)。只有极少数情况下你需要它们

而是为工作簿定义一个变量,并将open语句设置为该变量,以便以后使用,并避免使用
ActiveWorkbook

Sub SaveAsXLSX()
    ' SaveAsXLSX  Shortcut: Ctrl+Shift+W

    ChDir "T:\Temp"  '<-- this is not needed
    Dim Wb As Workbook

    Set Wb = Workbooks.Open(Filename:="T:\Temp\File1.csv")
    Wb.SaveAs Filename:="T:\Temp\File1.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Wb.Close

    Set Wb = Workbooks.Open(Filename:="T:\Temp\File2.csv")
    Wb.SaveAs Filename:="T:\Temp\File2.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Wb.Close
End Sub
Sub-SaveAsXLSX()
'保存ASXLSX快捷方式:Ctrl+Shift+W

ChDir“T:\Temp”'使用快捷方式与使用运行选项没有区别。你试过两次按“运行”按钮吗?可能由于文件已创建且无法保存而停止。您不希望使用
此工作簿
。最好使用
显式选项
,并使用工作簿的名称来避免此问题。选中@DavidGarcíaBodego“Active工作簿总是调用拥有宏的工作簿”这实际上是错误的<代码>活动工作簿
始终是具有焦点(位于顶部)的工作簿,可以是用户单击的任何工作簿。但是
ThisWorkbook
是拥有代码的工作簿(在其中编写和运行代码)。我认为这两个工作簿的处理方式不同。Run命令似乎在启动它的文件中继续运行。快捷方式似乎将控制权转移到第一个新打开的文件,从而停止宏的执行。至少这是我的猜测。当我使用“从菜单运行”方法且文件存在时,进程会暂停,并显示“文件存在,是否要覆盖”消息。我点击“是”,过程继续。因此,现有文件不会阻止该进程。@Ishkatan运行代码的两种方法的处理方式相同!您只是使用了
ActiveWorkbook
错误。问题是,活动工作簿是另一个工作簿,因此其行为不同。它没有使用您希望它使用的工作簿。调用工作簿时要更加精确(
ActiveWorkbook
是一个非常不精确的调用),两种方法的作用都是一样的。请看下面我的答案。@Ishkatan是的,我错过了
Open
方法my bad的括号。是否确实通过快捷方式运行此代码(而不是任何旧版本)?这肯定行得通。我试过在工作簿中使用一个变量。还是一样的行为。1) 打开Personal.xlsm 2)Ctrl+Shift+W 3)文件1.csv打开和停止1)打开Personal.xlsm 2)单击视图>宏>选择SaveAsXLSX>运行3)在这两种情况下,每张工作表都会打开、保存和关闭Personal.xslm保持打开状态顺便说一句,我必须替换。打开文件名:=“with…”打开(“…我将花一些时间阅读您提供的链接,但我不是VBA编程人员。我刚开始录制一个宏。您确定
Ctrl+Shift+W
连接了正确的宏吗?请放入
MsgBox“这是正确的宏”
作为第一行。然后使用快捷方式再次运行。如果您没有看到消息框,您的快捷方式将运行错误的宏。只需清理PERSONAL.xlsb以删除重复的名称,并且宏的唯一副本位于PERSONAL.xlsm中。如果.xlsm处于打开状态,则宏具有相同的行为。如果.xlsm处于关闭状态,则Ctrl+Shift+W不执行任何操作。如果您希望使用t作为个人挑战,我们应该将其从网上删除,但我非常感谢您迄今为止的努力。我很困惑您现在似乎在谈论一些不同的事情。您是否尝试过消息框?如果您使用快捷方式运行代码,消息框是否会出现?