VBA Excel代码无需打开文件即可检索数据

时间:2018-12-11 14:24:28

标签: excel vba excel-vba

我正在尝试从每月更新的excel工作簿中获取数据,并且文件名会根据日期进行更改-我有一个使用Today函数的说明页面,该页面为我提供了月份(这是单元格我在“月份”中引用)

问题是,我要打开的文件非常大,因此仅需5分钟即可启动excel并复制数据。无论如何,无需打开excel文件即可修改我的代码以获取数据?

到目前为止,这是我的代码-

Sub UploadData()

Dim Model As Workbook
Dim Q As Workbook
Dim rngFX As Range
Dim Month As String

Set Model = ActiveWorkbook


Set Q = Workbooks.Open(Filename:=Sheets("Instructions").Range("$C$29").Value)

Month = ("C" & (Model.Sheets("Instructions").Range("$C$23")))

With Q
    With .Sheets(Month & " Summary")
        Set rngFX = .Range("A61:R66")
        rngFX.Copy Destination:=Model.Sheets("FOREX Forecast").Range("A3")
    End With
End With

Q.Close savechanges:=False

With Model.Sheets("FOREX Forecast").UsedRange
.Value = .Value 
End With

End Sub

编辑:我已经添加了我遇到的错误的图片-当我按debug时,它将突出显示以下行:

  Rs.Open strSQL, strConn

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试

Sub UploadData()

    Dim Model As Workbook
    Dim Q As Workbook
    Dim rngFX As Range
    Dim Year As String
    Dim Fn As String, wsName As String
    Dim strConn As String
    Dim strSQL As String
    Dim Ws As Worksheet
    Dim Rs As Object

    Set Model = ActiveWorkbook
    Set Ws = Model.Sheets("FOREX Forecast")

    Fn = Sheets("Instructions").Range("$C$29").Value
    'Set Q = Workbooks.Open(Filename:=Sheets("Instructions").Range("$C$29").Value)

    Month = "C" & Model.Sheets("Instructions").Range("$C$23")
    wsName = "[" & Month & " Summary" & "$" & "A61:R66 ]"


   strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Fn & _
             ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"

    Set Rs = CreateObject("ADODB.Recordset")

    strSQL = "select * from " & wsName

    Rs.Open strSQL, strConn

    Ws.Range("a3").CopyFromRecordset Rs

    Rs.Close
    Set Rs = Nothing

End Sub