最終的にHTMLのテキストドキュメントを作成するために使用されているシートがありますが、これはExcelで開始されます。それは1から何百ものアイテムを持つことができ、各アイテムは3つのフィールド(SKU、Description、Category)、2つのオプション(Bullet、Image)を持っていなければなりません。Excel VBAループバグ
このようになります。シート2 A2 シート2 B2 =「説明」 シート1 B2(記述データ)シート2 A3上の新しい行にシート2 C2 シート1 A2の再コピーにコピー シート2 B3 =「カテゴリ」 シート1 C2(カテゴリデータに シート1 A2コピー)コピーをSheet2にコピーC3
これらは必須フィールドです。 そこから。シート1 D2(弾丸データ) シート2 B4 = "弾丸" シート1 D2コピーシート2 C4にシート2 A4に次にシート1 A2コピーを移入された場合
シート1 E2(画像データ)が取り込まれている場合、次いで、シート2 A5にシート1 A2コピーそこからシート1の第1行の世話をシート2 C5
に シート2 B5 =「IMAGE」 シート1 E2コピーは、私は、シート1の列の各行をループにしたいですAで空のセルに到達するまでAを返します。
これは私が書いたものです。最初の部分は動作します。しかし、それは私に悩まされるループ(Commented block部分)です。私はループで恐ろしいです。現在、私はそれを止めるまで無限ループに入ります。
ガイダンスは大変ありがとうございます。ありがとう。
Sub MigrateToTemplate()
Dim NextSKU As Range
Set NextSKU = Worksheets("EAPData").Range("A2").Offset(1, 0)
Sheets("EAPData").Select
Range("A2").Select
ActiveCell.Copy
Sheets("TemplateTest").Select
Range("A2").Select
ActiveCell.PasteSpecial xlPasteValues
ActiveCell.Offset(0, 1).Value = "DESCRIPTION"
ActiveCell.Offset(0, 2).Value = Sheets("EAPData").Range("C2").Value
ActiveCell.Offset(1, 0).Value = Sheets("EAPData").Range("A2").Value
ActiveCell.Offset(1, 1).Value = "CATEGORY"
ActiveCell.Offset(1, 2).Value = Sheets("EAPData").Range("E2").Value
If Sheets("EAPData").Range("A2").Offset(0, 3) <> "" Then
Sheets("EAPData").Range("A2").Offset(0, 3).Copy
Range("A1").End(xlDown).Offset(1, 0).Select
ActiveCell.Value = Range("A2").Value
ActiveCell.Offset(0, 1).Value = "BULLET"
ActiveCell.Offset(0, 2).PasteSpecial xlPasteValues
ActiveCell = WorksheetFunction.Substitute(Selection, Chr(10), " ")
Else
Range("A1").End(xlDown).Select
End If
If Sheets("EAPData").Range("A2").Offset(0, 5) <> "" Then
Sheets("EAPData").Range("A2").Offset(0, 5).Copy
Range("A1").End(xlDown).Offset(1, 0).Select
ActiveCell.Value = Range("A2").Value
ActiveCell.Offset(0, 1).Value = "IMAGE"
ActiveCell.Offset(0, 2).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Else
Sheets("EAPData").Select
End If
Sheets("EAPData").Select
NextSKU.Select
'Do
'ActiveCell.Copy
'Sheets("TemplateTest").Select
'Range("A1").End(xlDown).Offset(1, 0).Select
'ActiveCell.PasteSpecial xlPasteValues
'ActiveCell.Offset(0, 1).Value = "DESCRIPTION"
'ActiveCell.Offset(0, 2).Value = NextSKU.Offset(0, 2).Value
'ActiveCell.Offset(1, 0).Value = NextSKU.Value
'ActiveCell.Offset(1, 1).Value = "CATEGORY"
'ActiveCell.Offset(1, 2).Value = NextSKU.Offset(0, 4).Value
'If NextSKU.Offset(0, 3) <> "" Then
' NextSKU.Offset(0, 3).Copy
' Range("A1").End(xlDown).Offset(1, 0).Select
' ActiveCell.Value = NextSKU.Value
' ActiveCell.Offset(0, 1).Value = "BULLET"
' ActiveCell.Offset(0, 2).PasteSpecial xlPasteValues
' ActiveCell = WorksheetFunction.Substitute(Selection, Chr(10), " ")
' Else
' Range("A1").End(xlDown).Select
' End If
'If NextSKU.Offset(0, 5) <> "" Then
' NextSKU.Offset(0, 5).Copy
' Range("A1").End(xlDown).Offset(1, 0).Select
' ActiveCell.Value = NextSKU.Value
' ActiveCell.Offset(0, 1).Value = "IMAGE"
' ActiveCell.Offset(0, 2).PasteSpecial xlPasteValues
' Application.CutCopyMode = False
' Else
' Sheets("EAPData").Select
' End If
'Sheets("EAPData").Select
'NextSKU.Offset(1, 0).Select
'Loop While NextSKU.Offset(1, 0) <> ""
End Sub
最初に、選択を使用しないでください。https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros 第2に、lastRowsを使用してforループのように:https://stackoverflow.com/questions/29653616/how-to-know-the-last-row-filled-in-vba-excel – danieltakeshi
[あなたのコードをインデントする](http ://rubberduckvba.com/indentation)を使って読むことができます。 –
'サブMigrateToTemplate() 薄暗いEAP、TTESTワーク 暗いように、I列として整数 暗いA2と セットEAP = ThisWorkbook.Worksheets( "EAPData") セットTTEST = ThisWorkbook.Worksheets( "TemplateTest") lastRow =範囲( "A65536")。終了(xlUp)。ロー 'Sheet1からSheet2へのコピー a2 = EAP.Cells(2、1)。バリュー TTest.Cells(2、1).Valueの= A2 「(2 EAP.Cells場合は、LASTROW へのI = 1の場合はタイトル TTest.Cells(2、2).Valueの= "説明" を挿入4)。値 ">" "Then" "何かを作る 終了場合 次はi End Sub'役立つ例 – danieltakeshi