2017-02-08 23 views
1

こんにちは私はそこに指定されたURLを開き、その横にある列に入力する現在のセルの値を使用するスプレッドシートがあります。 URLには1組の文字しか含まれていません。私はオンにして、次のように得た相対参照で記録しようとした:VBA現在のセルの値からブックを開く

Sub GETASINV2() 
' 
' GETASINV2 Macro 
' 

' 
    Selection.Copy 
    Application.CutCopyMode = False 
    Workbooks.OpenText Filename:="http://upctoasin.com/027616716927", Origin:= _ 
     xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _ 
     , ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _ 
     False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _ 
     TrailingMinusNumbers:=True 
    Selection.Copy 
    ActiveWindow.ActivateNext 
    ActiveCell.Offset(0, 1).Range("A1").Select 
    ActiveSheet.Paste 
    ActiveCell.Offset(1, -1).Range("A1").Select 
End Sub 

あなたが見ることができるように、すべて相対離れて、それは私が入力した値を拾っていたファイル名ではなくそのI "事実からのようです値を貼り付けたコピー "。

これが完了したら、残りのURLリスト(約3000件)について繰り返したいと思います。私は多分URLSが存在しなくなるまで何度か繰り返すことができますが、この部分についても助けを得ることができれば幸いです。

あなたは

+1

セルの値は次のようになりどういう?それはこの部分、 '027616716927'ですか?また、['.Select' /' .Activate'の使用を避ける方法を確認してください(https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)データを直接試してみてください。 – BruceWayne

+0

こんにちは、セルの値はhttp://upctoasin.com/027616716927です(httpを使用)。 – vikgoy

答えて

0

私はあなたが行A1:A10で私たちを与えたのリンクを入れて、各セルをループを取得し、それが正しいだとセル内のリンクから値を配置するために、次のコードを実行しましたありがとうございました。

私は1000リンクでもそれをテストし、279秒で完了しました。つまり、毎秒約4回です。誰かがより速い方法を持っているかどうかを知ることに興味があります。

Sub GETASINV2() 
    Application.ScreenUpdating = False 

    Dim sht As Worksheet 
    Set sht = ThisWorkbook.Worksheets("Sheet1") 'update for your worksheet name 

    Dim inputRange As Range, r As Range 
    Set inputRange = sht.Range("A1:A10") 'update for your range 

    For Each r In inputRange 
     With sht.QueryTables.Add(Connection:= _ 
      "URL;" & r.Value, Destination:=r.Offset(0, 1)) 
      .Refresh BackgroundQuery:=False 
      .Delete 
     End With 
    Next r 

    Application.ScreenUpdating = True 
End Sub 


更新

は、それが隙間なくレコードの数に基づいて、範囲自体のサイズをワークアウトの方法はありますか?

はい、あなたはこれを置き換えることができます。

Set inputRange = sht.Range("A1:A10") 

と次のように:A1はあなたの最初のリンクの場所です

Set inputRange = Range(sht.Range("A1"), sht.Range("A1").End(xlDown)) 

+0

これは完璧に働いています!ギャップのないレコードの数に基づいて、範囲自体のサイズを計算する方法はありますか? – vikgoy

+0

喜んで助けてください:)。あなたのコメント/質問の回答を更新しました。これがあなたの質問に答えていると分かったら、この答えの左側にある緑色のチェックマークをクリックして*受け入れてください* – CallumDA

関連する問題