Код не компилируется, но кажется мне хорошим - PullRequest
0 голосов
/ 25 июня 2019

Этот раздел кода должен циклически проходить по таблице данных в столбце, о котором я говорю, и если он не равен 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 Ответ

4 голосов
/ 25 июня 2019

Вычистил код для вас

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...