【问题标题】:Copy Pasting Opened Sheet File to Current Workbook将打开的工作表文件复制粘贴到当前工作簿
【发布时间】:2019-07-24 14:48:19
【问题描述】:

我刚刚完成了报告的自动化(打开 ie、导航 ie、提取数据和打开下载的数据)。我现在正在将提取的文件复制粘贴到当前工作簿。问题是

  • 下载的工作簿名称末尾有不同的数字
    每一个
  • 下载的第一个选项卡或工作表未命名为“工作表 1”

在最后一个 sendKey 命令之后,下载的文件将打开。

每个文件都有一个名称标识符,即“RealTime”用于文件名和选项卡。

注释的脚本不起作用

Sub Get_RawFile()
'
'
'
    Dim IE As New InternetExplorer
    Dim HTMLDoc As HTMLDocument
    Dim HTMLselect As HTMLSelectElement

    With IE
        .Visible = True
        .Navigate ("-------------------------")

    While IE.Busy Or IE.readyState <> 4: DoEvents: Wend

    Set HTMLDoc = IE.document
    HTMLDoc.all.UserName.Value = Sheets("Data Dump").Range("A1").Value
    HTMLDoc.all.Password.Value = Sheets("Data Dump").Range("B1").Value
    HTMLDoc.getElementById("login-btn").Click

    While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
    Application.Wait (Now + TimeValue("0:00:05"))

    Set objButton = HTMLDoc.getElementById("s2id_ddlReportType")
    Set HTMLselect = HTMLDoc.getElementById("ddlReportType")
    objButton.Focus
    HTMLselect.Value = "2"

    Set HTMLselectZone = HTMLDoc.getElementById("ddlTimezone")
    HTMLselectZone.Value = "PST8PDT"

    Set subgroups = HTMLDoc.getElementById("s2id_ddlSubgroups")
    subgroups.Click
    Set subgroups2 = HTMLDoc.getElementById("ddlSubgroups")
    subgroups2.Value = "1456_17"

    HTMLDoc.getElementById("dtStartDate").Value = Format(Sheets("Attendance").Range("B6").Value, "yyyy-mm-dd")
    HTMLDoc.getElementById("dtEndDate").Value = Format(Sheets("Attendance").Range("X6").Value, "yyyy-mm-dd")

    HTMLDoc.getElementById("btnGetReport").Focus
    HTMLDoc.getElementById("btnGetReport").Click
    Application.Wait (Now + TimeValue("0:00:10"))

    HTMLDoc.getElementById("btnDowloadReport").Click
    Application.Wait (Now + TimeValue("0:00:05"))
    Application.SendKeys "{LEFT}"
    Application.SendKeys "{ENTER}"
    Application.Wait (Now + TimeValue("0:00:02"))
    Application.SendKeys "{ENTER}"
    Application.Wait (Now + TimeValue("0:00:02"))
    Application.SendKeys "{DOWN}"
    Application.Wait (Now + TimeValue("0:00:02"))
    Application.SendKeys "{ENTER}"

    Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook
    Dim rngToCopy As Range

    For Each wB In Application.Workbooks
        If Left(wB.Name, 14) = "RealTime" Then
           Set Wb1 = ThisWorkbook
           Exit For
       End If
    Next

    'If Not Wb1 Is Nothing Then
    '    Set wb2 = ThisWorkbook

    '   With Wb1.Sheets(1)
    '        Set rngToCopy = .Range("A:U", .Cells(.Rows.Count, "A").End(xlUp))
    '    End With
    '   wb2.Sheets(2).Range("A5").Resize(rngToCopy.Rows.Count).Value = rngToCopy.Value
    'End If

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    问题:

    您每次都在使用此工作簿。应该是不同的书。一个找到的,另一个是您要将数据复制到的工作簿。

    在 SendKeys 之后更改部分:

    Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook
    Dim rngToCopy As Range
    
    Set Wb1 = ThisWorkbook
    
    For Each wB In Application.Workbooks
        If Left(wB.Name, 14) = "RealTime" Then
           Set wb2 = wB
           Exit For
       End If
    Next
    
    If Not wb2 Is Nothing Then
    
        With wb2.Sheets(1)
            Set rngToCopy = .Range("A1:U", .Cells(.Rows.Count, "A").End(xlUp).row)
        End With
    
        Wb1.Sheets(2).Range("A5").Resize(rngToCopy.Rows.Count).Value = rngToCopy.Value
    
    End If
    

    【讨论】:

    • 你好 Mikku。这行代码With wb2.Sheets(1) Set rngToCopy = .Range("A:U", .Cells(.Rows.Count, "A").End(xlUp)) End With Wb1.Sheets(2).Range("A5").Resize(rngToCopy.Rows.Count).Value = rngToCopy.Value 根本不起作用。它甚至没有突出显示我要复制的范围。根据代码If Not wb2 Is Nothing Then,它似乎被忽略了
    • 是的,我忘了改行Set wb2 = wB,现在我改了。再试一次
    • 我更改了代码,现在在Wb1.Sheets(2).Range("A5").Resize(rngToCopy.Rows.Count).Value = rngToCopy.Value 处进行调试运行时错误“1004”:应用程序定义或对象定义错误。它还表明.Range("A:U", .Cells(.Rows.Count, "A").End(xlUp)) 没有被突出显示以进行复制。
    • 是的,您的代码中还有其他问题,而不是问题中提到的问题。无论如何,我也试图解决这个问题。再次运行答案
    • 嗨 Mikku。我现在能够运行复制粘贴代码。使用此代码With wb2.Sheets(1) Set rngToCopy = .Range("A1:U50", .Cells(.Rows.Count, "A").End(xlUp)) rngToCopy.Copy End With For Each wb2 In Application.Workbooks wb2.Activate Next Wb1.Sheets("Data Dump").Range("A6").PasteSpecial Paste:=xlPasteValues 但是它仅在调试模式下运行。在发送键(最后发送键功能打开下载的文件)之后,我似乎缺少一些代码,以便它会跟进该操作。你能帮帮我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多