代码未编译但对我来说似乎很好

时间:2019-06-25 12:02:27

标签: excel vba

这部分代码应遍历我告诉它的列中的数据表,如果它不为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

我希望此函数报告与该列中不为零的每个行项目有关的所有数据。

1 个答案:

答案 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

这样的两个范围的值相等