使用Excel vba在源文件中进行更改后检查工作簿是否已打开

我制作了一个将数据从一本书转移到另一本的macros。 如果源文件未打开,则将其打开,复制数据,然后closures它,以便用户看不到发生了什么。 现在的问题 – 如果源代码已经打开,操作后需要保持打开状态。 所以,我做了一个If语句,使用这个函数,我在这里find:

Function IsWorkBookOpen(FileName As String) Dim ff As Long, ErrNo As Long On Error Resume Next ff = FreeFile() Open FileName For Input Lock Read As #ff Close ff ErrNo = Err On Error GoTo 0 Select Case ErrNo Case 0: IsWorkBookOpen = False Case 70: IsWorkBookOpen = True Case Else: Error ErrNo End Select End Function 

并且它是第一次运行,但是如果我在第一次之后再次启动macros,它就像文件没有打开,并在完成操作时closures它。

 If IsWorkBookOpen(ActiveSheet.Range("AA1").Value) Then Set Invoice = Workbooks(ActiveSheet.Range("AA4").Value) openF = True Else openF = False Set Invoice = Workbooks.Open(ActiveSheet.Range("AA1").Value, True, True) End If For Each sheet In Invoice.Worksheets If sheet.Range("B2").Value = "active" Then newD = vbNull lRow = sheet.Cells(2000, 7).End(xlUp).Row counter = sheet.Cells(2000, 1).End(xlUp).Row totalR = num For k = 7 To counter If sheet.Cells(k, 6).Value = "n" Then sheet.Range("A" & k, "F" & k).Copy rep.Range("A" & num, "F" & num).PasteSpecial Paste:=xlPasteValuesAndNumberFormats rep.Cells(num, 7) = newD If Year(rep.Cells(num, 7).Value) = Year(1) Then rep.Cells(num, 7).Clear newD = DateAdd("d", sheet.Cells(3, 2).Value, newD) num = num + 1 End If Next k rep.Cells(num, 4) = "Total" rep.Cells(num, 5) = Application.Sum(rep.Range("E" & totalR, "E" & (num - 1))) rep.Cells(num, 5).NumberFormat = "$#,###0" num = num + 3 End If Next sheet If openF = False Then Invoice.Close False Set Invoice = Nothing End If Application.ScreenUpdating = True 

问题是:第一轮macros代码以某种方式改变了源代码的状态或名称,以便函数不会将其视为“打开”?

您可以通过在工作簿中循环检查文件是否在Excel中打开,然后检查名称。

 Public Function IsWorkbookOpen(WorkbookName) As Boolean Dim i As Long For i = 1 To Workbooks.Count If Workbooks(i).Name = WorkbookName Then IsWorkbookOpen = True Exit Function End If Next i End Function 

有两个简单的方法:

循环遍历工作簿,或者将其写入一个带有error handling的variables(如果err <> 0,则不会打开)。

如果你有独立的excel应用程序实例,则可以使用其他issu,在这种情况下,你可以使用getobject来循环使用excel应用程序。

我将在明天从我的电脑添加代码。