Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 保存、关闭并重新打开“此工作簿”_Vba_Excel - Fatal编程技术网

Vba 保存、关闭并重新打开“此工作簿”

Vba 保存、关闭并重新打开“此工作簿”,vba,excel,Vba,Excel,我需要保存、关闭并重新打开此工作簿。 代码应该是这样的: Sub reopen() Dim wb As Excel.Workbook Set wb = ThisWorkbook wb.Save wb.Close wb.Open End Sub 不幸的是,没有这样的命令wb.Open,一旦我使用了wb.Close,代码就会停止: 另外,它应该是更大的工作簿的一部分,如果工作簿未保存、关闭并重新打开,则会出现错误91…根据您的目标,我马上知道有两种可能的选项 Sub reopen() Di

我需要保存、关闭并重新打开此工作簿。 代码应该是这样的:

Sub reopen()

Dim wb As Excel.Workbook
Set wb = ThisWorkbook

wb.Save
wb.Close
wb.Open

End Sub
不幸的是,没有这样的命令wb.Open,一旦我使用了wb.Close,代码就会停止:


另外,它应该是更大的工作簿的一部分,如果工作簿未保存、关闭并重新打开,则会出现错误91…

根据您的目标,我马上知道有两种可能的选项

Sub reopen()

Dim wb As Excel.Workbook
Set wb = ThisWorkbook

Dim pth As String
pth = wb.FullName

Application.OnTime Now + TimeValue("00:00:01"), Application.Workbooks.Open(pth)
wb.Close (True)

End Sub
第一:从同一例程保存、关闭和重新打开:

Sub SaveCloseReOpen()
Dim strCMD As String

strCMD = "CMD /C PING 10.0.0.0 -n 1 -w 5000 >NUL & Excel.exe " & Chr(34) & ThisWorkbook.FullName & Chr(34)

ThisWorkbook.Save
Shell strCMD, vbNormalFocus
If Application.Workbooks.Count = 1 Then
    Application.Quit
Else
    ThisWorkbook.Close SaveChanges:=False
End If

End Sub
基本上,工作簿将保存自身,然后运行Shell CMD Ping一个不可路由的IP,等待5秒钟。如果愿意,您可以使用Timeout或其他方法,然后它将执行Excel.exe并重新打开工作簿。根据打开的工作簿数量,它将关闭Excel应用程序或仅关闭工作簿。。。尽管此方法将在单独的实例中打开Excel应用程序。如果您想要相同的实例,那么我将使用Application.OnTime方法

第二:保存,从一个例程关闭,但通过工作簿停用事件重新打开:

在工作簿模块中:

Option Explicit

Private Sub Workbook_Deactivate()
    If bClose_ReOpen Then
        Shell "CMD /C PING 10.0.0.0 -n 1 -w 5000 >NUL & Excel " & Chr(34) & ThisWorkbook.FullName & Chr(34), vbNormalFocus
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        End If
    End If
End Sub
然后在常规模块中:

Option Explicit
Public bClose_ReOpen As Boolean

Sub SaveCloseReOpen()
    bClose_ReOpen = True
    ThisWorkbook.Close SaveChanges:=True
End Sub
与第一个程序相似;但是,在工作簿基本关闭后,此例程将通过公共布尔变量执行Shell Run命令。。。如果您有任何“保存前”或“关闭前”事件,它们将首先运行,因为工作簿“停用”例程是工作簿实际关闭之前处理的最后一个例程


如果愿意,您可以随时将Shell CMD的vbNormalFocus更改为vbHide。

根据您的目标,我马上就知道有两种可能的选项

第一:从同一例程保存、关闭和重新打开:

Sub SaveCloseReOpen()
Dim strCMD As String

strCMD = "CMD /C PING 10.0.0.0 -n 1 -w 5000 >NUL & Excel.exe " & Chr(34) & ThisWorkbook.FullName & Chr(34)

ThisWorkbook.Save
Shell strCMD, vbNormalFocus
If Application.Workbooks.Count = 1 Then
    Application.Quit
Else
    ThisWorkbook.Close SaveChanges:=False
End If

End Sub
基本上,工作簿将保存自身,然后运行Shell CMD Ping一个不可路由的IP,等待5秒钟。如果愿意,您可以使用Timeout或其他方法,然后它将执行Excel.exe并重新打开工作簿。根据打开的工作簿数量,它将关闭Excel应用程序或仅关闭工作簿。。。尽管此方法将在单独的实例中打开Excel应用程序。如果您想要相同的实例,那么我将使用Application.OnTime方法

第二:保存,从一个例程关闭,但通过工作簿停用事件重新打开:

在工作簿模块中:

Option Explicit

Private Sub Workbook_Deactivate()
    If bClose_ReOpen Then
        Shell "CMD /C PING 10.0.0.0 -n 1 -w 5000 >NUL & Excel " & Chr(34) & ThisWorkbook.FullName & Chr(34), vbNormalFocus
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        End If
    End If
End Sub
然后在常规模块中:

Option Explicit
Public bClose_ReOpen As Boolean

Sub SaveCloseReOpen()
    bClose_ReOpen = True
    ThisWorkbook.Close SaveChanges:=True
End Sub
与第一个程序相似;但是,在工作簿基本关闭后,此例程将通过公共布尔变量执行Shell Run命令。。。如果您有任何“保存前”或“关闭前”事件,它们将首先运行,因为工作簿“停用”例程是工作簿实际关闭之前处理的最后一个例程


如果愿意,您可以随时将Shell CMD的vbNormalFocus更改为vbHide。

实际上存在一个问题,因为wb=ThisWorkbook,当您关闭它时,代码执行总是中断,因为您关闭了运行代码的工作簿。我需要这样一个代码,因为它应该是一个更大的代码的一部分,如果工作簿没有保存关闭并重新打开,则会出现错误91…-我建议您修改代码逻辑。如果你展示你的代码,也许我可以帮你我会这么做,如果我知道当前逻辑出了什么问题的话。当wb关闭然后重新打开时,会发生一些事情,如果只保存wb,则不会发生这些事情。。。这是某种更新或重新启动,但我不知道如何用代码来模拟它。好的,请显示您的完整代码和出现错误的代码行。我将尝试修改它。这里有989行代码,大约20个子代码,以不同的组合工作。即使我共享代码,没有excel文件本身也没有意义。我很高兴在您的电子邮件或smth上与您共享…您可以使用Application.Ontime计划运行一个子系统,该子系统将在关闭后重新打开Excel。然而,它看起来确实像一个“肮脏”的黑客!实际上有一个问题,因为wb=ThisWorkbook,当您关闭它时,代码执行总是中断,因为您关闭了运行代码的工作簿。我需要这样一个代码,因为它应该是一个更大的代码的一部分,如果工作簿没有保存关闭并重新打开,则会出现错误91…-我建议您修改代码逻辑。如果你展示你的代码,也许我可以帮你我会这么做,如果我知道当前逻辑出了什么问题的话。当wb关闭然后重新打开时,会发生一些事情,如果只保存wb,则不会发生这些事情。。。这是某种更新或重新启动,但我不知道如何用代码来模拟它。好的,请显示您的完整代码和出现错误的代码行。我将尝试修改它。这里有989行代码,大约20个子代码,以不同的组合工作。即使我共享代码,没有excel文件本身也没有意义。我很高兴在您的电子邮件或smth上与您共享…您可以使用Application.Ontime计划运行一个子系统,该子系统将在关闭后重新打开Excel。然而,它看起来确实像一个“肮脏”的黑客!此代码执行sav的工作
正在关闭或重新打开,但另一个代码仍然给出错误。FML如果一个excel文件在两台计算机中打开(例如,在网络中的共享文件夹中),此代码是否仍然有效?此代码执行保存、关闭和重新打开的任务,但另一代码仍给出错误。FML如果一个excel文件在两台计算机中打开(例如,在网络中的共享文件夹中),此功能是否仍然有效?