【发布时间】:2021-11-26 11:50:16
【问题描述】:
我想使用 for..next 在工作表之间复制一个范围,我有工作循环,我不知道如何定义一个范围,该范围将在我的循环中为每个 x 更改,范围应该是右侧的单元格列 B 和 C 中的 x。
Sub macro_cpt()
Dim Wiazka As String
Application.ScreenUpdating = False
Set w = Sheets("data_test")
w.Select
ActiveSheet.AutoFilterMode = False
owx = Cells(Rows.Count, "A").End(xlUp).Row
For x = 2 To owx Step 3
Wiazka = Cells(x, "A")
If Not SheetExists(ActiveWorkbook, Wiazka) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = Wiazka
Else
Sheets(Wiazka).Cells.ClearContents
End If
w.Select
????? Range ?????.Copy Sheets(Wiazka).Range("A1")
Next
Set W = Nothing
i = MsgBox("done.", vbInformation)
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True
ActiveWorkbook.Close SaveChanges:=False
End Sub
Function SheetExists(Wb As Workbook, ShName As String) As Boolean
For Each s In Wb.Sheets
If s.Name = ShName Then
SheetExists = True
Exit Function
End If
Next
End Function
【问题讨论】:
-
试试
w.Range(w.Cells(x,2),w.Cells(x,3)).Copy?还鼓励您阅读 how to avoid using Select/Activate 并完全限定您的范围引用以避免 VBA 假设您指的是ActiveSheet/ActiveWorkbook -
代码是否位于
ActiveWorkbook的标准模块中?工作表data_test是第一个工作表吗?您是否尝试将每个目标工作表中的每个B:C从 data_test 复制到A1:B1?无需再次将AutoFilterMode设置为False。当你最终关闭工作簿而不保存更改时,为什么要这样做?您的意思是使用SaveChanges:=True吗?请随时通过editing your post 分享更多信息。
标签: vba loops for-loop range next