【问题标题】:VBA Excel code to retrieve data without opening a file无需打开文件即可检索数据的 VBA Excel 代码
【发布时间】:2018-12-11 14:24:27
【问题描述】:

我正在尝试从每月更新的 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

【问题讨论】:

  • 如果您的 Excel 文件具有固定的类似表的结构,那么您可以通过 ADODB 连接访问它。例如,检查这个问题:stackoverflow.com/questions/18144838/…
  • 您不能在不打开文件的情况下复制或粘贴,因为这两个操作都是Workbook 对象的子方法。您需要使用另一种方法,例如 ADODB :)

标签: excel vba


【解决方案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”
  • 我得到一个对话框,提示找不到工作表。我认为问题出在 wsName 行:文件的名称应该是 Month 和 Summary,而 A61:R66 是要从此工作表复制的范围 - 它不应该在文件名中。如何将其更改为仅范围?
  • fn 是路径和文件名。 wsName 是 [ Sheetname$a61:R66 ] 。所以 wsName = "[" & "你的工作表名称" & "$" & "A61:R66 ]"
  • 我已经编辑了我的帖子以显示我遇到的错误 - 我不知道如何解决这个问题
  • @Leena,你是什么意思 Month = "C" & Model.Sheets("Instructions").Range("$C$23")?这与工作表名称有关,由于没有给出正确的工作表名称而发生错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2020-03-12
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
相关资源
最近更新 更多