| 
    
     |  | こんにちは。かみちゃん です。 
 最近競馬ネタが多いような気もするのですが・・・
 
 >と言う質問を投稿しましたが
 >おかげ様でできるようになりました。
 
 以下のご質問ですね。
 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=49695;id=excel
 (先頭4文字は、全角になっていますので、半角にしてください)
 
 >自動作成の際に競馬の出走馬が18頭フルのときは
 >For i = 1 To 18
 >で18頭分シートが作成されます
 
 出走馬ではなく、URLが馬指定になっていませんか?
 特定のレースに出走する全ての競走馬(「競争馬」ではなく)について取得したい
 というのならば、出走頭数を把握する必要があると思いますが・・・
 
 > 出走馬が12頭のときに12頭分のシート作成後に処理を終了させる方法
 
 「競争馬リスト」のA列B列に取得したい馬名とURLを羅列して、その値がなくな
 れば処理終了という繰り返し処理にすればいいかと思います。
 
 たとえば、
 uma01 = Cells(I, 1).Value
 の直後に
 If uma01 = "" Then Exit For
 とすればFor 〜 Nextの繰り返し処理は終了し(抜け)ます
 
 > ひとつのシートの自動生成後に別の処理をしてその後に次のシートを作成する方法
 
 Next
 の直前に
 Call Macro1
 としておくと、
 Macro1 というマクロを処理して、次のシート作成にいきます。
 
 >上記でやってみましたら1頭分は出来ましたが次のシート作成の際
 >
 >.Refresh BackgroundQuery:=False
 >
 >のところで止まってしまいました。
 
 エラーメッセージも書きましょうね。
 追加したセルの I 行目の1列目に値がない場合に
 「予期せぬエラーが発生しました」
 というエラーになります。
 
 これは、
 ActiveWorkbook.Worksheets.Add.Name = st.Range("A" & I)
 ctiveCell.FormulaR1C1 = "=競争馬リスト!R[0]C[1]"
 ma01 = Cells(I, 1).Value
 
 Dim strURL As String
 Dim FR As Range
 
 strURL = uma01
 というコードになっていて、
 シート追加した後のアクティブセルに、
 =競争馬リスト!R[0]C[1]
 という数式を設定して、I行目の1列目の値を取得していますが、
 このI行目の1列目の値は、アクティブシートから取得しています。
 アクティブシートがどこになっているかをよく確認してください。
 シートを追加していますので、「競争馬リスト」シートではなく、追加したシート
 がアクティブシートになっています。
 
 そのため、
 ma01 = Cells(I, 1).Value
 を
 ma01 = Sheets("競争馬リスト").Cells(I, 2).Value
 とすれば、この問題は回避できると思います。
 なお、馬ごとのURLは、A列ではなく、B列のようですので、
 〜.Cells(I, 2).〜
 とする必要があると思います。
 
 |  |