2016-05-10 99 views
2

我需要一些帮助。我有一个工作簿(A),我想要打开另一个工作簿(B)并运行B中的宏。 工作簿(B)有一个宏,它与另一个工作簿(C)建立sql连接来提取数据,在工作簿(B)中运行这个宏很好,但是如果我从工作簿(A)打开工作簿(B)并运行宏,我会从Windows获取一条消息“该文件已打开”(WorkBooK(C))。 如何跳过此消息。vba Excel数据连接

enter image description here

我得到的错误时打开连接数据。

打开工作簿(B)的代码是:

Sub OpenWorkBookandRun() 
    tarPath = "..............\" 
    strfilename = "..........xlsm" 

    Application.Workbooks.Open tarPath & strfilename 
    'Run Macro 
    Workbooks(strfilename).Activate 
    Application.Run "'................'!Module1.Macro" 
    ActiveWorkbook.Save 
    ActiveWorkbook.Close 
End Sub 

而在工作簿(B)的代码来打开数据来源是:

' Establezco los parametros de la conexion ADO, el RecordSet y la Cadena de conexion 
Set oCONN = New ADODB.Connection 
Set oRS = New ADODB.Recordset 
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & OrigDatos & ";Extended Properties=""Excel 12.0;HDR=Yes;"";" 
' Abro la conexion y ejecuto la sentencia SQL 
If Not (oCONN Is Nothing) Then 
    If (oCONN.State And adStateOpen) = adStateOpen Then oCONN.Close 
End If 
oCONN.Open strConn <--- Line where i get the error 
oRS.Open strSQL, oCONN, 1, 3 

注。有时候在fisrt工作簿中,我会得到相同的消息,但只是有时会发生,并且我不知道为什么,因为任何人都有打开数据的起源

回答

0

当您从工作簿运行宏时,工作簿(C) )? 其他问题是,你需要在Workbook(C)中写些什么吗?如果你不能使用连接字符串中的参数来连接只读,如下所示:

strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Data Source=" & OrigDatos & ";Extended Properties=""Excel 12.0;HDR=Yes;"" 
+0

嗨,谢谢。 Worbook(C)是开放的,但我只需要读取一张包含数据的表格。当我运行工作簿B并建立到C的连接时,不会收到消息或错误,连接将以读取模式打开工作簿C.我会尝试只读的参数。 –

0

尝试设置Notify = false。

Application.Workbooks.Open tarPath & strfilename, , , , , , , , , ,false 

根据MSDN,该通知提示具有以下功能, “如果文件不能在读/写模式打开,这种说法是真实的文件添加到文件通知列表。微软Excel将打开文件为只读,轮询文件通知列表,然后在文件变得可用时通知用户,如果该参数为False或省略,则不会请求通知,并且任何尝试打开不可用文件都将失败。

+0

谢谢,我会尝试你的解决方案,并评论你,如果工作正常。 –