所以我希望我的代码循环显示工作表,依赖于工作表名称我想复制不同的范围(如果工作表不会列出我只想跳过它)(让我说我知道列的编号/地址)我想要复制(行数可能不同,取决于我得到的原始文件),我想将所有这些范围一个在另一个下面复制到名为check_data的工作表中,右边有一个列,从哪个工作表这个部分来自。我有时会被困在这部分代码中,但似乎它并没有遍历表单。
到目前为止,我得到了这个(但我对vba来说是全新的)
Sub Copy_data()
Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Set wb = ActiveWorkbook
Set ws1 = wb.Sheets("A")
Set ws2 = wb.Sheets("B")
Set ws3 = wb.Sheets("Check_data")
For Each ws In Worksheets
If ws.Name = "A" Then
ws1.Activate
ws1.Range("A1:Q1").Select
ws1.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ws3.Select
If ws3.Range("A1") = "" Then
ws3.Range("A1").Select
ActiveSheet.Paste
Else
Selection.End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End If
ElseIf ws.Name = "B" Then
ws2.Activate
ws2.Range("A1:Q1").Select
ws2.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ws3.Select
If ws3.Range("A1") = "" Then
ws3.Range("A1").Select
ActiveSheet.Paste
Else
Selection.End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End If
Else
End If
Next ws
End Sub
感谢您的任何建议
答案 0 :(得分:0)
这里有几件事。始终使用对象完全指定工作簿和工作表,并使用这些对象预先计算Sheets
等方法,如下所示:
Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set wb = ThisWorkbook
ws1 = wb.Sheets("A")
ws2 = wb.Sheets("Check_data")
ws1.Range("A1:Q1").Select
ws1.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
...当您准备粘贴时也是如此,除了您需要显式激活您要粘贴的工作表:
ws2.Activate
If ws2.Range("A1") = "" Then
ws2.Range("A1").Select
Selection.Paste
Else
Selection.End(xlDown).Offset(1, 0).Select
Selection.Paste
End If
显然,这不是您的整个代码段被重写的,但它是您想要进入的方向。