我创建了一个启用宏的Excel工作簿(我称之为NewData。xlsm),它有一个刷新按钮,当您单击它时,它会连接到网络文件夹中的源文件(Source.xlsm).我分享了NewData.xlsm与我的同事,他们都有一个副本,它存储在他们的电脑。我更新了来源。xlsm文件每月一次,我的同事通过打开他们的NewData获得新数据。xlsm文件并连接到源。xlsm当他们点击NewData上的刷新按钮时。xlsm.
源文件位于所有用户都可以通过VPN访问的网络文件夹中。
当每个人在不同的时间单独尝试时,它工作得很好。以下情况会出现问题:
- 人员#1打开他们的NewData副本。并更新它,没有问题,也不需要输入凭据。
- 第二个人打开了NewData的副本。xlsm并尝试在Person #1仍在使用它时更新它。然后要求人员#2提供一个用户名和密码,但文件不要求。如果他们提供了他们的Windows凭据,什么也不会发生,他们没有办法更新文件,直到Person #1关闭他们的NewData。xlsm文件。
我希望允许多个用户同时连接到源而不会出现问题。我知道这是可能的,因为我使用的是另一个Excel(ExcelThatWorks。xlsm),由其他人创建,这允许,但我没有找到的方法,使我的NewData。xlsm做同样的事情。如果我没有做到这一点,那么用户将不得不按计划访问文件,这是不可接受的。
我在ExcelThatWorks上看到了。xlsm文件,有一个代码说OLEDBConnection(我在下面添加了代码),并认为这可能是我需要的,但我不确定,因为我使用VBA。
我正在Windows 10企业版上使用Office LTSC Professional Plus 2021。
这些是我在新数据上的所有代码。xlsm文件,当一个人一次使用它时,它可以完美地工作,但当多个人同时打开它时,它就不能工作了。
______________________________________
Option Explicit
Public Sub Stop_ScreenUpdateOpen()
Application.ScreenUpdating = False
'Open a workbook
'Open method requires full file path to be referenced.
Workbooks.Open "\\Full\Shared\Folder\Path\Source.xlsm"
Application.ScreenUpdating = True
End Sub
______________________________________
Public Sub Stop_ScreenUpdateCopyPasteRaw()
Dim s As Workbook
Dim d As Workbook
Dim vals As Variant
'## Open both workbooks first:
Set s = Workbooks.Open("\\Full\Shared\Folder\Path\Source.xlsm ")
Set d = ThisWorkbook
With s.Sheets("RAW").UsedRange
'Now, paste to d worksheet:
d.Sheets("RAW").Range("A1").Resize( _
.Rows.Count, .Columns.Count) = .Value
End With
End Sub
______________________________________
Public Sub Stop_ScreenUpdateCopyPasteData()
Dim s As Workbook
Dim d As Workbook
Dim vals As Variant
'## Open both workbooks first:
Set s = Workbooks.Open("\\Full\Shared\Folder\Path\Source.xlsm ")
Set d = ThisWorkbook
With s.Sheets("Data").Range("A2:j200")
'Now, paste to d worksheet:
d.Sheets("Data").Range("A2").Resize( _
.Rows.Count, .Columns.Count) = .Value
End With
End Sub
______________________________________
Public Sub Stop_ScreenUpdateClose()
Application.ScreenUpdating = False
'Close a workbook
Workbooks("Source.xlsm").Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub
______________________________________
Public Sub RefreshConnections()
ActiveSheet.PivotTables("PivotTable1").RefreshTable
MsgBox "Data has been refreshed!"
End Sub
______________________________________
CALL Method
Public Sub Stop_ScreenUpdateUpdate()
Application.ScreenUpdating = False
Call Stop_ScreenUpdateOpen
Call Stop_ScreenUpdateCopyPasteRaw
Call Stop_ScreenUpdateCopyPasteData
Call Stop_ScreenUpdateClose
Call RefreshConnections
Application.ScreenUpdating = True
End Sub
______________________________________
ExcelThatWorks。我上面提到的xlsm文件有这样的代码:
______________________________________
Public Sub UpdatePowerQueries()
' Macro to update my Power Query script(s)
Dim lTest As Long, cn As WorkbookConnection
On Error Resume Next
For Each cn In ThisWorkbook.Connections
lTest = InStr(1, cn.OLEDBConnection.Connection, "Provider=Microsoft.Mashup.OleDb.1", vbTextCompare)
If Err.Number <> 0 Then
Err.Clear
Exit For
End If
If lTest > 0 Then cn.Refresh
Next cn
End Sub
______________________________________
它没有其他代码,只有它,工作起来就像一个魅力。但我不知道如何达到同样的效果。
在提交这个问题之前,我检查了Update an excel file by multiple users at same time without opening the file和其他呈现给我的线程,但所有线程都引用了编辑源文件的用户。
我的用户没有从源文件中添加/删除任何信息,他们只是从源文件中提取新数据,不需要编辑任何内容。
再加上这个,当我有了NewData。xlsm文件打开并尝试打开源代码。xlsm文件显示一个弹出窗口,说明它被锁定以进行编辑,并要求打开只读或单击通知。locked for editing by 'another user'
是否要连接到源001单击“是”,要求提供凭据002[More cred][4]
不让我添加更多的照片,但它然后说没有找到源文件,并询问我是否想连接到另一个源。当我说“否”时,它表示Excel无法打开连接,无法刷新。
1条答案
按热度按时间ppcbkaq51#
我要感谢@克里斯尼尔森的回答。我没有选择将他的答案标记为解决方案,但这是现在正在工作的代码: