2024年2月26日发(作者:)

拯救局域网龟速打开共享Excel工作簿的问题

最近遇到一个问题,就是用VBA从局域网打开共享的EXCEL工作簿很慢,有时会卡死,网上没有找到合适的解决方案,头秃了一晚上终于测试通过了一段代码总结出来。下面先分析一下造成这种现象可能的原因:

造成打开局域网共享文件缓慢的主要原因

多用户长时间同时占用共享文件造成服务器资源抢夺

局域网传输信号不稳定

本地计算机性能过低或本地EXCEL程序异常

本代码解决程度

不会持续通信,对服务器几乎无影响

程序可提供超时自动中止连接,不会在客户端卡死

本程序无法解决,但程序在后台加载EXCEL文件,以23M文件为例,本地打开需要23秒,程序打开仅用11秒(测试机器是10年前的老本子)

解决思路是:通过XMLHTTP取得服务器上的EXCEL文件,然后在客户端保存为临时EXCEL文件,再从本地文件提取数据,直接奉上代码:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'

' OpenNetExcel 从互联网/局域网读取EXCEL文件

'

'

' 若5秒钟未能取回则退出程序并弹窗提示

'

'

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub OpenNetExcel()

'临时文件预处理

Dim tempFileName As String

If Dir( & "Temp" & Format(Timer(), "00000000") & ".xlsx") = "" Then

tempFileName = & "Temp" & Format(Timer(), "00000000") & ".xlsx"

Else

Kill & "Temp" & Format(Timer(), "00000000") & ".xlsx"

End If

'远程获取EXCEL文件

Dim xHttp As Object

Dim StartTime, UsedTime As Single

StartTime = Timer

Set xHttp = CreateObject("p")

"get", "file:", False '异步请求

Do While tate <> 4 And <> 200

UsedTime = Timer - StartTime

If UsedTime >= 5 Then '超过5秒钟退出程序

Set xHttp = Nothing

MsgBox "获取远程数据超时"

Exit Sub

End If

DoEvents

Loop

UsedTime = Timer - StartTime

"获取远程文件耗时:" & CStr(UsedTime) & "s"

'将获取的数据保存为临时文件

StartTime = Timer

Dim BinaryStream

Set BinaryStream = CreateObject("")

With BinaryStream

.Type = 1 '1 Binary data

.Open

.Write sebody

.Position = 0

.savetofile tempFileName

End With

Set BinaryStream = Nothing

Set xHttp = Nothing

'打开临时存储的EXCEL文件并处理数据

Set NewApp = CreateObject("ation")

Dim wb As ok

e = False '后台打开文件

Set wb = (tempFileName, ReadOnly)

UsedTime = Timer - StartTime

"本地处理文件耗时:" & CStr(UsedTime) & "s"

''''''''''''''''''''''''''''''''''''

'

'此处放入处理数据代码段

'

'

''''''''''''''''''''''''''''''''''''

"Sheets(1)A1= " & CStr((1).Cells(1, 1))

"Sheets(2)A2= " & CStr((2).Cells(2, 1))

'

'

'

'关闭并删除临时文件,释放资源

Set NewApp = Nothing

Kill tempFileName

End Sub

以临时文件的方式处理的好处是无论原始Excel文件的数据结构做出哪些调整,都不必修改这部分代码;缺点是若程序出现异常中止,本地存储器上可能存在没有被删除的临时文件。若在相对固定的数据结构下可以在代码中直接将取得的XML装载到workbook对象变量中来完善这个问题。