我有一张工作表正在用于创建最终为HTML的文本文档,但在Excel中开始。它可以有1到数百个物品,然后每个物品必须有三个字段(SKU,Description,Category),然后是两个可选的(Bullet,Image)。Excel VBA循环错误
它会这样。 Sheet 1中A2拷贝到Sheet A2 Sheet2的B2 = “说明” Sheet 1中B2(描述数据)拷贝到Sheet C2 Sheet 1中A2重新复制到Sheet 2上A3一个新行 Sheet2的B3 = “类别” Sheet 1中C2(第二类数据)复制到Sheet2 C3
这些是必填字段。 从那里。
如果表1 D2(子弹数据)被填充然后Sheet 1中A2拷贝到Sheet A4 Sheet2的B4 = “子弹” Sheet 1中D2拷贝到Sheet C4
如果表1 E2(图像数据)被填充,然后Sheet 1中A2复制到Sheet A5 Sheet2的B5 =“IMAGE” Sheet 1中E2拷贝到Sheet C5
即负责表1的第一行的从那里,我希望它遍历片1列中的每一行A直到它到达A中的空单元格。
这是我写的。第一部分工作。但是这是循环(注释块部分),这使我困惑。我很可怕的循环。目前,它进入了一个永无止境的循环,直到我停止它。
任何指导将非常感激。谢谢。
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
首先,你应该避免使用Select:https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros 第二,你可以使用lastRows来制作一个for循环,如:https://stackoverflow.com/questions/29653616/how-to-know-the-last-row-filled-in-vba-excel – danieltakeshi
你还应该学会[缩进你的代码](http ://rubberduckvba.com/indentation)使它更容易阅读。 –
'子MigrateToTemplate() 昏暗EAP,t检验作为工作表 昏暗我作为整数 昏暗A2作为字符串 集EAP = ThisWorkbook.Worksheets( “EAPData”) 集TTEST = ThisWorkbook.Worksheets( “TemplateTest”) lastRow = Range(“A65536”)。End(xlUp).Row '从Sheet1复制到Sheet2 a2 = EAP.Cells(2,1)。值 TTest.Cells(2,1)。价值= A2 “插入标题 TTest.Cells(2,2)。价值= “描述” 对于i = 1至LASTROW 如果EAP.Cells(2, 4).Value <>“”Then 'Make something End If Next i End Sub'帮助示例 – danieltakeshi