对于VBA中的每个循环,意外跳过行
我写了这段代码,这是一个更大问题的一部分。最初,它应该开始将一些数据从一个工作表传输到另一个工作表。。但它不断跳过行,复制一行,然后复制另一行,跳过,复制,跳过。。。我使用Select方法只是为了测试,而不是复制对于VBA中的每个循环,意外跳过行,vba,excel,Vba,Excel,我写了这段代码,这是一个更大问题的一部分。最初,它应该开始将一些数据从一个工作表传输到另一个工作表。。但它不断跳过行,复制一行,然后复制另一行,跳过,复制,跳过。。。我使用Select方法只是为了测试,而不是复制 Dim sharepointSheet As Worksheet Dim masterSheet As Worksheet Dim sharepointTable As Range 'Auxliary variable Dim row As Range Dim cell As Ran
Dim sharepointSheet As Worksheet
Dim masterSheet As Worksheet
Dim sharepointTable As Range
'Auxliary variable
Dim row As Range
Dim cell As Range
Dim RowLast As Long
Set sharepointSheet = ThisWorkbook.Worksheets("Sharepoint List")
Set masterSheet = ThisWorkbook.Worksheets("Master List")
Set sharepointTable = masterSheet.Range("A2", "F133")
For Each row In sharepointTable.Rows
row.Cells(row.row, 3).Select
' RowLast = masterSheet.Cells(Rows.Count, "A").End(xlUp).row + 1
' masterSheet.Cells(RowLast, "A").PasteSpecial
Next row
出现此问题的原因是您选择的行是相对于您的
行
范围,而不是工作表范围
如果将“选择行”更改为以下内容,则会解决您的问题:
masterSheet.Cells(row.row, 3).Select
也不是说对一个范围使用
row
这样的变量不是一个好主意,因为它会变得非常混乱 循环中的某些内容也在增加行计数器。可能是第+1行,但即使我将注释标记放在这些行的前面,就像在示例中一样,它仍以相同的方式选择。我唯一能想到的是,范围来自一个格式化的表…但它不可能是它..我猜它是有效的。。虽然很奇怪,但它在两方面都有意义,不是吗?当您从中指定单元格时,您可以将行
范围视为工作表上的新参考点。因此,当您从第一行开始时,row.Cells(1,1)
将是同一行,row.Cells(2,1)
将是下一行等。对第2行执行row.Cells(row.row,1)
,实际上是工作表上的第3行。天啊,我希望这是有道理的,太多行了。如果你也能接受这个答案,那就太棒了:)