不打开文件,使用VBA Excel代码检索数据

3
我正在尝试从一个每月更新且文件名称根据日期变化的Excel工作簿中获取数据 - 我有一个使用今天函数得到月份的说明页(这些是我在“月份”中引用的单元格)。问题是,我要打开的文件非常大,因此需要花费超过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

编辑:我已经添加了一张错误截图,当我按下调试按钮时,它会突出显示这一行:

  Rs.Open strSQL, strConn

enter image description here


9
如果你的Excel文件有固定的表格结构,那么你可以通过ADODB连接来访问它。例如,请查看这个问题:https://dev59.com/m3XYa4cB1Zd3GeqP6nz6 - Alexey
你不能在没有打开文件的情况下复制或粘贴,因为这两个操作都是“Workbook”对象的子方法。你需要使用另一种方法,比如ADODB :) - David Zemens
1个回答

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

在 Rs.Open 行中出现了一个错误,提示“找不到可安装的 ISAM”。 - eenz
我收到了一个对话框,上面说找不到工作表。我认为问题在wsName这一行:文件名应该是月份和摘要,A61:R66是要从该工作表复制的范围 - 它不应该出现在文件名中。我该如何将其更改为仅范围? - eenz
fn是路径和文件名。wsName是[Sheetname$a61:R66]。因此,wsName = "[" & "您的工作表名称" & "$" & "A61:R66]"。 - Dy.Lee
我已经编辑了我的帖子以显示我遇到的错误 - 我不确定如何修复它。 - eenz
@Leena,你的意思是 Month = "C" & Model.Sheets("Instructions").Range("$C$23") 是关于工作表名称的吗?因为没有给出正确的工作表名称,所以出现了错误。 - Dy.Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接