誰かがこのスクリプトを私のために調整できますか?私は元の質問(26486871)の助けを求めましたが、私の要求は削除されました。VBAをダウンロード、エクストラクトしてExcel 2007にインポートする
このスクリプトでは、公開Webサイトからzipファイルをダウンロードし、ファイルを抽出し、データをワークシートにインポートする必要があります。ジップにはcsvファイルがありません
- :
はしかし、私は2つの例外があります。テキストファイル(20MB)のみが含まれています。
- 私は新しいワークシートを望んでいません。ワークシート内の既存のデータを以前のインポートから上書きしたい。
私は2日間、このスクリプトを使って手を加えてきましたが、それは次のように立ち往生:
「実行時エラー 『3001』:引数が間違った型、許容範囲外です、または互いに葛藤している」と述べた。これは違いを作る場合は、そのエラーの
、Stream.SaveToFileこのtargetFileにスクリプトエディタポイント、1 '1 =なし、上書きが、2 =を上書きし、zip形式のテキストファイルが整列するデータを分離タブスペースを持っていますテキストから列へ
このスクリプトの開発については、Miguel Febresに感謝します。
私は助けていただきありがとうございます。
'Main Procedure
Sub DownloadAndLoad()
Dim url As String
Dim targetFolder As String, targetFileZip As String, targetFileCSV 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"
targetFileCSV = targetFolder & "data.csv"
targetFileTXT = targetFolder & "data.txt"
'1 download file
DownloadFile url, targetFileZip
'2 extract contents
Call UnZip(targetFileZip, targetFolder)
'3 rename file
Name targetFileCSV As targetFileTXT
'4 Load data
Call LoadFile(targetFileTXT)
End Sub
Private Sub DownloadFile(myURL As String, target As String)
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
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 targetFile, 2 ' 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)
' Unzips a file
' Note that the default OverWriteExisting is true unless otherwise specified as False.
Dim objOApp As Object
Dim varFileNameFolder As Variant
varFileNameFolder = PathToUnzipFileTo
Set objOApp = CreateObject("Shell.Application")
' the "24" argument below will supress any dialogs if the file already exist. The file will
' be replaced. See http://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx
objOApp.Namespace(FileNameToUnzip).CopyHere objOApp.Namespace(varFileNameFolder).items, 24
End Function
Private Sub LoadFile(file As String)
Set wkbTemp = Workbooks.Open(Filename:=file, Format:=xlCSV, Delimiter:=";", ReadOnly:=True)
wkbTemp.Sheets(1).Cells.Copy
'here you just want to create a new sheet and paste it to that sheet
Set newSheet = ThisWorkbook.Sheets.Add
With newSheet
.Name = wkbTemp.Name
.PasteSpecial
End With
Application.CutCopyMode = False
wkbTemp.Close
End Sub
"テキストファイル(20MB)のみが含まれています。"何も教えてくれません。ファイルからいくつかのサンプル行を入力するか、タブ区切りか固定幅かなどを指定できます。 – Slai
テキストファイルはタブで区切られています。 – Bruce
あなたは 'wkbTemp = Workbooks.Open(ファイル名:=ファイル、フォーマット:= xlTextWindows、デリミタ:= vbTab、ReadOnly:= True)を設定するか、フォーマットに合わせて調整することができます – Slai