Как скопировать книгу (файл .aspx) из ссылки html на текущую книгу - PullRequest
1 голос
/ 28 февраля 2020

У меня проблемы со следующими задачами в Excel VBA:

В своей работе мы используем платформу управления документами под названием TeamShare: [https://www.lector.dk/en/products/]

Я хочу создать код в VBA, который перебирает ссылки на эту платформу управления документами в моей книге ie. перебирает другие книги, открывает их и затем копирует указанный лист в мою текущую книгу.

Я попытался собрать биты кодов с других сайтов, и код работает просто отлично, когда я запускаю его в режиме прерывания. Тем не менее, когда я запускаю код сразу, программа Excel снова открывается, так что текущая рабочая книга не может «связываться» с открытой рабочей книгой, и я оказываюсь в бесконечности l oop (поэтому нет прямого сообщения об ошибке).

Этот код работает только в режиме перерыва:


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. Это работает, как и планировалось в breakmode, однако программа 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.

Надеюсь, вы поможете мне решить эту проблему. Пожалуйста, спросите, если вам нужна дополнительная информация, которую я не предоставил.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...