Я пытаюсь изменить сценарий VBA из другого сообщения (26486871).Ошибка VBA в пространстве имен(). CopyHere ... и ... Namespace(). Items
Сценарий загрузит Zip-файл, извлечет текстовый файл и импортирует данные в Excel.
Я не знаю VBA, поэтому я буду решать каждую из функций один раз.
- Создайте временную папку с именем рандомизированного ................................ Полное
- Загрузите Zip-файл с общедоступного сервера .......................................... ..... Завершить
- Извлечь текстовый файл (20 МБ, с табуляцией) .............................. ................ Ошибка
- Импорт данных в открытом листе (затирание) ... Еще не
на Extract части, я перев. ceiving ошибки во время выполнения на следующей строке:
objOApp.Namespace(FileNameToUnzip).CopyHere objOApp.Namespace(varFileNameFolder).items, 256
«Ошибка выполнения '91: переменная объекта или переменная блока не установлен.»
Когда я наводил курсор на переменные, находясь в режиме отладки, каталог и имена файлов верны. Я не уверен, что не задано. Я ценю любую помощь.
Option Explicit
'Main Procedure
Sub DownloadExtractAndImport()
Dim url As String
Dim targetFolder As String, targetFileZip As String, targetFileTXT As String
Dim wkbAll As Workbook
Dim wkbTemp As Workbook
Dim sDelimiter As String
Dim newSheet As Worksheet
url = "http://www.example.com/data.zip"
targetFolder = Environ("TEMP") & "\" & RandomString(6) & "\"
MkDir targetFolder
targetFileZip = targetFolder & "data.zip"
targetFileTXT = targetFolder & "data.txt"
'1 download file
DownloadFile url, targetFileZip
'2 extract contents
Call UnZip(targetFileZip, targetFolder)
End Sub
Private Sub DownloadFile(myURL As String, target As String)
Dim WinHttpReq As Object
Dim oStream As Object
Set WinHttpReq = CreateObject("Msxml2.ServerXMLHTTP")
WinHttpReq.Open "GET", myURL, False
WinHttpReq.send
myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile target, 1 ' 1 = no overwrite, 2 = overwrite
oStream.Close
End If
End Sub
Private Function RandomString(cb As Integer) As String
Randomize
Dim rgch As String
rgch = "abcdefghijklmnopqrstuvwxyz"
rgch = rgch & UCase(rgch) & ""
Dim i As Long
For i = 1 To cb
RandomString = RandomString & Mid$(rgch, Int(Rnd() * Len(rgch) + 1), 1)
Next
End Function
Private Function UnZip(PathToUnzipFileTo As Variant, FileNameToUnzip As Variant)
Dim objOApp As Object
Dim varFileNameFolder As Variant
varFileNameFolder = PathToUnzipFileTo
Set objOApp = CreateObject("Shell.Application")
objOApp.Namespace(FileNameToUnzip).CopyHere objOApp.Namespace(varFileNameFolder).items, 256
End Function
Возможный дубликат [VBA для загрузки, Извлечение и импорта Zip файлов в Excel] (http://stackoverflow.com/questions/38571937/vba-to-download-extract-and-import-zip-file -to-excel) – Comintern
Что такое дубликат [Как импортировать zipped csv, размещенный в Интернете в Excel] (http://stackoverflow.com/questions/26486871/how-to-import-a-zipped-csv-hosted- онлайн-в-Excel). Пожалуйста, отредактируйте свой старый вопрос (http://stackoverflow.com/posts/38571937/edit) с новой информацией, вместо того чтобы публиковать новый вопрос. – Comintern
Я задал вопрос в сообщении вашего второго комментария, но администратор удалил его, потому что он не внес вклад. В другом посте кто-то сказал написать код сам. Я не знаю VBA, поэтому изучаю и изучаю. – Bruce