从工作表“DATA”范围B4:Hx
开始,其中x
是按行计数的最后一行。我需要复制此范围并将其粘贴为从A1
开始的工作表“bat”上的值。
前进我需要偏移6
中的列。因此,我的第二份副本将是I4:Ox
,因此将一份副本附加到bat
表格中。
我知道我必须停在哪里,并且我使用Funds
值通知它。
我遇到的第一个错误是当我尝试设置Column2 = Range("H" & bottomD)
值时,会给我“溢出”。
我确定不知道我的For
循环是否有效。
Sub Copy_bat()
Dim bottomD As Integer
Dim Column1 As Integer
Dim Column2 As Integer
Dim i As Integer
Dim Funds As Integer
Funds = Sheets("bat").Range("u3").Value
Sheets("DATA").Activate
bottomD = Range("A" & Rows.Count).End(xlUp).Row
Column1 = Range("B4")
Column2 = Range("H" & bottomD)
For i = 1 To Funds
Range(Column1 & ":" & Column2).Copy
Sheets("Data").Cells(Rows.Count, "A").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True, Transpose:=False
Column1 = Colum1.Range.Offset(ColumnOffset:=6)
Column2 = Colum2.Range.Offset(ColumnOffset:=6)
Next i
End Sub
答案 0 :(得分:1)
Option Explicit
以防止拼写错误。总是!你底部有拼写错误 - Colum1
和Colum2
。Activate
和Select
(您有Sheets("DATA").Activate
) - 性能更好,错误几率更小。相反,您应该始终明确地告诉VBA您要引用哪个工作表。Range2.value = Range1.value
之类的操作。无需.Copy
然后.Paste
。我尽力了解你的需求。根据我的理解,你没有使用Range
数据类型,而你需要它。这导致了你的错误。
Option Explicit
Sub Copy_bat()
Dim bottomD As Integer
Dim i As Integer
Dim Funds As Integer
Dim rngArea As Range
Funds = Sheets("bat").Range("u3").Value
With Sheets("Data")
bottomD = .Range("A" & .Rows.Count).End(xlUp).Row
Set rngArea = Range(.Range("B4"), .Range("H" & bottomD))
End With
For i = 1 To Funds
Sheets("bat").Cells(Rows.Count, "A").End(xlUp)(2).Resize(rngArea.Rows.Count, rngArea.Columns.Count).Value = _
rngArea.Value
Set rngArea = rngArea.Offset(, 7)
Next
End Sub
我创建了一个rngArea
类型的Range
变量,而不是2个变量(Column1
和Column2
)。此代码从" Data"中获取信息。表格并将其放入" bat"片。然后通过"数据"中的 7(!)列向右偏移将数据放入" bat"表格低于以前放置的数据。
希望这有帮助。