Значение ячейки не будет сравниваться со значением массива Variant - PullRequest
0 голосов
/ 03 июля 2019

У меня проблема с получением значений массива для сравнения со значениями, хранящимися в ячейках электронной таблицы.

Я попытался сравнить значение ячейки непосредственно со значением массива, но проверка каждый раз завершается неудачей.

Чтобы попытаться исправить эту проблему, я попытался присвоить значение ячейки на каждой итерации переменной, затемненной как переменная (так же, как массив затемнен как переменная)

Значения успешно добавляются в массив, и тип переменной используется, поскольку некоторые счета-фактуры являются только числами, а другие содержат буквы.

Когда я прохожу свой код, переменная не присваивается / не принимает значение. Каждый раз, когда достигается оператор сравнения, переменная показывает, что она пуста.

Dim Paidlrow As Long
Dim lrow As Long

Dim wb As Workbook
Dim Consolid As Worksheet
Dim PaidInv As Worksheet
Dim Summary As Worksheet

Dim Invoices() As Variant
Dim InvCheck As Variant
Dim txt As String
Dim Formula As String

Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
Dim Cleared As Long
Dim LInv As Long
Dim NewBlank As Long

Dim MaxSheets As Integer

Set wb = Workbooks("Wire Payments projections for Euro's")
Set Consolid = wb.Sheets("Consolidation")
Set Summary = wb.Sheets("Pay Summary")
Set PaidInv = wb.Sheets("Paid Invoices")

'define define and define

MaxSheets = wb.Sheets.Count
lrow = Consolid.Cells(Rows.Count, 1).End(xlUp).Row + 1

Cleared = 1

ReDim Preserve Invoices(1 To Cleared)

i = 2
With wb

    'begin inv extraction loop
    For i = 2 To lrow
        ReDim Preserve Invoices(1 To Cleared)

        'if inv is marked for payment, add to array and move details to paid inv tab
        With PaidInv
            Paidlrow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        End With

        With Consolid
            If .Cells(i, 10) = "X" Or .Cells(i, 10) = "x" Then
                Invoices(Cleared) = .Cells(i, 1)
                Consolid.Rows(i).Copy Destination:=PaidInv.Cells(Paidlrow, 1)
                Consolid.Rows(i).Clear
                Cleared = Cleared + 1
            End If
        End With

    Next i
End With
    'loop through each sheet to remove paid invoices identifie in previous loop
    For k = 1 To MaxSheets
        If wb.Sheets(k).Name <> Summary.Name And wb.Sheets(k).Name <> PaidInv.Name And wb.Sheets(k).Name <> Consolid.Name Then
            With wb.Sheets(k)
                LInv = Cells(Rows.Count, 2).End(xlUp).Row + 1
                For j = LBound(Invoices) To UBound(Invoices)
                    For l = 7 To LInv
                        InvCheck = .Cells(l, 2).Value

                        If Invoices(j) = InvCheck And InvCheck <> "" Then

                            '.Rows(l).Delete

                            NewBlank = Cells(Rows.Count, 1).End(xlUp).Row + 1
                            .Range("A7:K7").Copy
                            .Range(.Cells(NewBlank, 1), .Cells(NewBlank, 11)).PasteSpecial Paste:=xlPasteFormats

                            '.Cells(NewBlank, 1) = Right(.Cells(1, 9), 6)

                            'Formula = "=$B$3*I"
                            'Formula = Formula & NewBlank
                            '.Cells(NewBlank, 10).Formula = Formula



                        End If
                    Next l
                Next j
            End With
        End If
    Next k

Я закомментировал код для удобства тестирования. Теперь он должен отформатировать некоторые дополнительные ячейки, чтобы соответствовать форматированию над ним.

UPDATE

Для ударов и хихиканья я изменил проверку массива и связанной переменной на тип String, а не на вариант. По какой-то причине это решило проблему, с которой я столкнулся. Я так растерялся ...

1 Ответ

0 голосов
/ 03 июля 2019

Кажется, что отсутствует точка:

With wb.Sheets(k)
    LInv = Cells(Rows.Count, 2).End(xlUp).Row + 1

должно быть:

With wb.Sheets(k)
    LInv = .Cells(Rows.Count, 2).End(xlUp).Row + 1

, чтобы убедиться, что LInv считывается из листа номер k.

Как есть, код эквивалентен:

With wb.Sheets(k)
    LInv = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1

и, если активный лист не имеет значений в просматриваемых ячейках, сравнение не удастся.

Есть похожая проблема с этой строкой позже в коде:

NewBlank = Cells(Rows.Count, 1).End(xlUp).Row + 1

должно быть:

NewBlank = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...