嗨,这是我的第一篇文章,谈到VBA时,我是新手。 所以我尝试了最后6个小时来完成一项任务。
我已经设法获取For Each循环的代码,并且可以正常工作并将其值复制到现有工作簿中。但是我无法找出为什么总是将值复制到A2而不复制到A3 / A4 / A5等等。
我尝试了这段代码“ range = range + 1”,但我不断遇到运行时错误,它仍然将值复制到A2并在从循环中获取新值时将其覆盖。
我认为只需要一点零钱,但我无法弄清楚。 :(
Sub copie1()
Dim ws As Worksheet
Dim cell As Range
Dim targetsheet As Worksheet
Dim target As Range
Dim rngTemp As Range
Set wkba = ActiveWorkbook
Worksheets("cop1").Activate
LR = Cells(Rows.Count, "A").End(xlUp).Row
LT = Cells(Rows.Count, "X").End(xlUp).Row
Set rngTemp = Range("X2:X" & LT)
Workbooks.Open Filename:="C:\Users\path......."
Set targetsheet = Worksheets("Data")
Set target= targetsheet.Range("A1")
For Each cell In rngTemp
If cell > 0 Then
target.Offset(1, 0) = cell.Value
End If
target = target+1 '// is this right?
Next cell
End Sub
我的目标是循环遍历工作簿中的列X,并复制每个大于0的数据(因为有空单元格和值为0的单元格) 并将其粘贴到A2 / A3 / A4范围内的现有工作簿中,依此类推
答案 0 :(得分:0)
您不能将数字1添加到Range对象。
尝试将target = target+1 '// is this right?
替换为:
Set target = target.Offset(1)
这可以解决问题吗?
答案 1 :(得分:0)
SibSib1903,我在下面添加了一个简单的示例,您可以轻松地适应自己的要求。它查看A列中的所有单元格值,并且任何大于零的数值都将从第1行开始复制到C列。例如,如果A列包含45行数据,并且其中只有三行的数值大于零,这三个值将复制到前三行的C列中。
Public Sub copieTest()
Dim ws As Worksheet, cell As Range, rngX As Range
Dim tmpVal As Variant, counter As Long
Set ws = ThisWorkbook.Worksheets("cop1")
Set rngX = ws.Range("A1:A" & ws.Cells(ws.Rows.count, 1).End(xlUp).Row)
counter = 1
For Each cell In rngX
tmpVal = Val(Trim(cell.Value))
If tmpVal > 0 Then
ws.Range("C" & counter).Value = tmpVal
counter = counter + 1
End If
Next cell
Set rngX = Nothing: Set ws = Nothing
End Sub