首页 > 解决方案 > 如何将工作簿(.aspx 文件)从 html 链接复制到当前工作簿

问题描述

我在 excel VBA 中执行以下任务时遇到问题:

在我的工作中,我们使用一个名为 TeamShare 的文档管理平台:[ https://www.lector.dk/en/products/]

我想在 VBA 中创建一个代码,它在我的工作簿中循环一系列指向此文档管理平台的链接,即。循环其他工作簿,打开它们,然后将指定的工作表复制到我当前的工作簿。

我尝试将来自其他站点的一些代码放在一起,当我在中断模式下运行它时,代码工作得很好。但是,当我一次运行所有代码时,Excel 程序会重新打开,因此当前工作簿无法与打开的工作簿“通信”,我最终会陷入无限循环(因此没有直接的错误消息)。

这是仅在中断模式下工作的代码:


Dim wbCopyTo As Workbook Dim wsCopyTo As Worksheet Dim i As Long Dim Count As Long Dim WBCount As Long Dim LastRow As Long Dim wb As Workbook Dim ws As Worksheet Dim URL As String Dim IE As Object Dim doc As Object Dim objElement As Object Dim objCollection As Object

Set wbCopyTo = ActiveWorkbook Set wsCopyTo = ActiveSheet

LastRow = wsCopyTo.Range("B" & Rows.Count).End(xlUp).Row

For i = 2 To LastRow

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True

这段代码的目的是获取DocID

A = InStr(wsCopyTo.Range("B" & i), "documentid=") + Len("documentid=")
B = InStrRev(wsCopyTo.Range("B" & i), "&")
DocID = Mid(wsCopyTo.Range("B" & i), A, B - A)

'Get URL
URL = wsCopyTo.Range("B" & i)
'Count number of open workbooks
WBCount = Workbooks.Count
With IE

新的是打开 excel 表的命令。这在中断模式下按计划工作,但是当我一次运行代码时,excel 程序会重新打开。我在这里尝试过其他突击队:“Workbooks.Open”,我无法让这个打开文件,“Application.FollowHyperlink”也只能在中断模式下工作,但是速度要慢得多


.Navigate URL

'This was my solution to how to stop the rest of the code from executing until the new workbook has loaded. 
Do Until Workbooks.Count = WBCount + 1: Loop
End With

'Unload IE
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
'So in order to activate the workbook from the URL, I am looping over all my open workbooks and matching them on their unique Document ID. I found that the workbook from the URL wasn´t the "active workbook" per default.

For Each book In Workbooks If Mid(book.Name, 12, Len(DocID)) = DocID Then

    book.Activate
    Set wb = ActiveWorkbook
    Set ws = ActiveSheet

    End If
Next book

在这里,我将所需的工作表复制到我的初始工作簿

wb.Worksheets("SpecificSheetIWantToCopy").Copy After:=wbCopyTo.Worksheets("Sheet1") wbCopyTo.Sheets(ActiveSheet.Name).Name = DocID

Next i

End Sub

我正在使用excel 2010。

我希望你能帮我解决这个问题。请询问您是否需要更多信息,我没有提供。

提前致谢。

标签: asp.netvba

解决方案


推荐阅读