这部分代码应遍历我告诉它的列中的数据表,如果它不为0或为空白,则应将表的整个行复制到另一个电子表格中,该电子表格是我格式化的报表。
这段代码对我来说似乎很好,我还有其他类似的代码段也可以正常工作,但是由于某些原因,这段代码并不合适。
Public Sub getActiveCodes()
Dim tRows
Dim i As Integer
Dim ws As Worksheet, rpts As Worksheet
Dim nxtRow As Integer
Set ws = Worksheets("Sheet1")
Set rpts = Worksheets("REPORTS")
For i = 1 To i = ws.Range("mainTable").Rows.Count
nxtRow = Module1.countRows(rpts)
If ws.ListObjects("mainTable").DataBodyRange(i, 9).Value <> 0_
Or "" Then
ws.ListObjects("mainTable").ListRows(i).Range.Copy
rpts.Range("A:" & nxtRow).PasteSpecial , Paste:=xlPasteValues
End If
Next i
End Sub
我希望此函数报告与该列中不为零的每个行项目有关的所有数据。
答案 0 :(得分:4)
为您清理了代码
Public Sub getActiveCodes()
Dim tRows
Dim i As Long, nxtRow As Long
Dim wb As Workbook
Dim ws As Worksheet, rpts As Worksheet
Set wb = Workbooks(REF)
Set ws = wb.Worksheets("Sheet1")
Set rpts = wb.Worksheets("REPORTS")
For i = 1 To ws.Range("mainTable").Rows.Count
nxtRow = Module1.countRows(rpts)
If ws.ListObjects("mainTable").DataBodyRange(i, 9).Value <> 0 _
Or ws.ListObjects("mainTable").DataBodyRange(i, 9).Value <> "" Then
ws.ListObjects("mainTable").ListRows(i).Range.Copy
rpts.Range("A:" & nxtRow).PasteSpecial xlPasteValues
End If
Next i
End Sub
问题是您的下划线和一般的If
陈述。在换行符之前,添加一个空格。此外,您不应该执行If x = 1 Or 2
,而应始终包含与之比较的值,因此If x = 1 Or x = 2
。这是因为If x = 1 Or 2
读为if x = 1 is true or if 2 is true
,这始终是正确的,因为无论x = 1
本身是否有数字2都是假的。
使用Copy
函数仅复制值很慢。最好将Range("A1:A20").Value = Range("B2:B21").Value