这个代码进入两个工作簿
- 它使用
SheetActivate
事件到时间可持续写入日志您的主文件(name.xls的 电流片的在你的榜样以上)至 a log.txt文件
- “控制器”工作簿用于:
- 测试的主要文件是开放的,
- 如果它是那么的只读版本中打开(如果没有实际的文件通常打开),并
- 文件日志(这最后一片存储,Windows登录名&当前时间渐进式 - 也许矫枉过正)被访问以设置最近的工作表。
注:
1.我只能通过我的主文件运行Excel的两个独立的情况下,在测试我的本地机器上此为Excel不会让相同的文件被打开两次相同的实例)
2,而不是一个控制器工作簿我会建议使用vbscript从桌面快捷方式执行
改变这一行来设置文件路径和名称,以测试为开放
StrFileName = "c:\temp\main.xlsm"
Code for document to be opened: ThisWorkbook module
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Open ThisWorkbook.Path & "\log.txt" For Append As #1
Print #1, Sh.Name & ";" & Environ("username") & ":" & Format(Now(), "dd-mmm-yy hh:mm")
Close #1
End Sub
Code for Controller workbook: Normal module
我已经更新了微软网站的代码来测试是否StrFileName
已经打开。如果是开放elsehwere那么只读版本打开到最新页面
Sub TestFileOpened()
Dim Wb As Workbook
Dim StrFileName As String
Dim objFSO As Object
Dim objTF As Object
Dim strLogTxt As String
Dim arrStr
StrFileName = "c:\temp\main.xlsm"
If Dir(StrFileName) = vbNullString Then
MsgBox StrFileName & " does not exist", vbCritical
Exit Sub
End If
If IsFileOpen(StrFileName) Then
Set Wb = Workbooks.Open(StrFileName, , True)
If Dir(Wb.Path & "\log.txt") <> vbNullString Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTF = objFSO.OpenTextFile(Wb.Path & "\log.txt", 1)
Do Until objTF.AtEndOfStream
strLogTxt = objTF.ReadLine
Loop
objTF.Close
arrStr = Split(strLogTxt, ";")
On Error Resume Next
If Not IsEmpty(arrStr) Then
Wb.Sheets(arrStr(0)).Activate
If Err.Number <> 0 Then MsgBox arrStr(0) & " could not be activate"
End If
On Error GoTo 0
End If
Else
Set Wb = Workbooks.Open(StrFileName)
End If
End Sub
' This function checks to see if a file is open or not. If the file is
' already open, it returns True. If the file is not open, it returns
' False. Otherwise, a run-time error occurs because there is
' some other problem accessing the file.
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer
On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.
' Check to see which error occurred.
Select Case errnum
' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function
我搁置下去,因为它是一个大量的工作来实现只是为了获得一个精密这一解决方案。无论我是否决定使用它,我都很感激帮助。 – Wes 2012-04-20 00:21:29
+ 1很好完成 – 2012-04-20 18:18:36