Тип: ошибка несоответствия VBA - код не работает - PullRequest
0 голосов
/ 03 августа 2020

Я продолжаю получать ошибку несоответствия типа в приведенном ниже коде (указанном рядом со строкой), что интересно, так это то, что макрос был запущен, но когда я отправил его себе по электронной почте на другом компьютере, он сломался. Есть идеи, как это исправить?

Чтобы дать фон, макрос предназначен для пользовательской формы, которая регистрирует проблемы на разных вкладках (в зависимости от того, в чем проблема). Когда проблема помечается как завершенная, она перемещается на вкладку «5. Завершено и проверено», где строке присваивается номер и добавляется столбец, в котором указывается, сколько дней потребовалось для выполнения задачи. Когда проблема перемещается из вкладки источника, она копируется, удаляется, а затем добавляется на вкладку 5. Завершено и подтверждено.

Option Explicit

Sub Complete()

Dim sourceWS As Worksheet
Set sourceWS = ActiveSheet
Dim destWS As Worksheet
Set destWS = ThisWorkbook.Worksheets("5. Complete & Verified")

Dim RowCountS, RowCountD As Long

Dim intLastRowSrc As Long
RowCountS = ActiveSheet.Rows.Count
intLastRowSrc = sourceWS.Cells(RowCountS, 1).End(xlUp) + 1'Type Mistmatch

Dim intLastRowSDes As Long
RowCountD = Worksheets("5. Complete & Verified").Rows.Count
intLastRowSDes = destWS.Cells(RowCountD, 2).End(xlUp) + 1 'Type Mismatch

Dim r As Long

Dim iRow2 As Long
iRow2 = Application.WorksheetFunction.CountA(Sheets("5. Complete & Verified").Range("B:B")) + 1

Dim iRow3 As Long
iRow3 = Application.WorksheetFunction.CountA(sourceWS.Range("A:A")) + 1


Dim LastRow4 As Long
Dim LastRow5 As Long


For r = intLastRowSrc To 2 Step -1
        If sourceWS.Cells(r, "R") = "Complete & Verified" Then
            intLastRowSDes = destWS.Cells(RowCountD, 2).End(xlUp) + 2
            destWS.Range("C" & intLastRowSDes & ":S" & intLastRowSDes).Value = sourceWS.Range("B" & r & ":R" & r).Value
            sourceWS.Rows(r).Delete
            destWS.Cells(intLastRowSDes, 1) = sourceWS.Name ' Adding tab name as the Payer
            destWS.Cells(iRow2, 2) = iRow2 - 1 ' Numbering the rows in order instead of copying number from payer tab
            
            'Adding in Column for Days to Complete
            Worksheets("5. Complete & Verified").Cells(2, 20) = "=IF(RC[-3]="""",0,RC[-3]-RC[-9])"
            LastRow5 = Worksheets("5. Complete & Verified").Range("A1").End(xlDown).Row 'last row filled number row number not cell value 'need to copy before pasting
            Worksheets("5. Complete & Verified").Range("T2").Copy
            Worksheets("5. Complete & Verified").Range("T2" & ":" & "T" & LastRow5).PasteSpecial (xlPasteFormulas) 'paste formulas
            Worksheets("5. Complete & Verified").Range("A1") = "Payor"
            Worksheets("5. Complete & Verified").Range("A1") = "Payor"
            Worksheets("5. Complete & Verified").Activate
            Range("A1").Select
            ActiveWindow.ScrollRow = 1
            ActiveWindow.ScrollColumn = 1

            'Renumbering the No. Column on the Payer Tab
            sourceWS.Activate
            
            If IsEmpty(sourceWS.Range("A2")) = False Then
                LastRow4 = Range("A1").End(xlDown).Row 'last row filled number row number not cell value 'need to copy before pasting
                If (LastRow4 = 2) Then
                sourceWS.Range("A2") = 1
                Else
                sourceWS.Range("A2") = "=ROW()-1"
                sourceWS.Range("A2").Copy
                sourceWS.Range("A2" & ":" & "A" & LastRow4).FillDown 'paste formula
                End If
                sourceWS.Calculate
                sourceWS.Range("A2" & ":" & "A" & LastRow4).Copy
                sourceWS.Range("A2" & ":" & "A" & LastRow4).PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False
                Range("A2").Select
            
    End If
    End If

Next



Exit Sub

End Sub

1 Ответ

0 голосов
/ 03 августа 2020

sourceWS.Cells (RowCountS, 1) .End (xlUp) возвращает ссылку на диапазон, и вы не можете добавить число в диапазон. Попробуйте: sourceWS.Cells (RowCountS, 1) .End (xlUp) .Row () + 1, и у вас должен быть действительный номер строки.

...