Недопустимый вызов процедуры или аргумент (ошибка 5), но код выполняется правильно - PullRequest
0 голосов
/ 04 ноября 2019

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

Код делает это нормально, но впоследствии я всегда получаю сообщение об ошибке

Недопустимый вызов процедуры или аргумент (Ошибка 5)

Этокусок, где Excel идентифицирует ошибку, даже если он выполняет свою работу, удаляя последние три символа значения ячейки. Перед изменением значений ячеек они выглядят как 000123.HK

Мой код должен удалить .HK в конце

Буду признателен за любую помощь по этому вопросу, также будет рад получить советы о том, какчтобы сделать мой код более эффективным!

With Worksheets("Earnings Final")
    For i = 1 To lastRow
        .Cells(i, "B") = Left(.Cells(i, "B").Value, Len(.Cells(i, "B").Value) - 3)
    Next i
End With

Полный код ниже:


Private Sub button_Click()

Dim ricRange As Range
Dim ricEveryNth As Range
Dim ricRow As Long

Dim sRange As Range
Dim sEveryNth As Range
Dim sRow As Long

Application.ScreenUpdating = False

Sheets("SheetA").Activate

With Worksheets("SheetA")
    Set ricRange = .Range("A2", Cells(.Rows.Count, "A").End(xlUp))
End With

Worksheets("SheetA").Range("A1").Cut
Worksheets("SheetA").Range("B1").Select
ActiveSheet.Paste

For ricRow = 1 To ricRange.Rows.Count Step 3
If ricRow = 1 Then
    Set ricEveryNth = ricRange(ricRow, 1)
Else
    Set ricEveryNth = Union(ricRange(ricRow, 1), ricEveryNth)
End If
Next ricRow
Application.Goto ricEveryNth

Selection.Copy
Sheets("SheetB").Activate
Worksheets("SheetB").Range("B1").PasteSpecial Paste:=xlPasteFormulas

With Worksheets("SheetA")
    Set sRange = .Range("B1", Cells(.Rows.Count, "B").End(xlUp))
End With

For sRow = 1 To sRange.Rows.Count Step 3
If sRow = 1 Then
    Set sEveryNth = sRange(sRow, 1)
Else
    Set sEveryNth = Union(sRange(sRow, 1), sEveryNth)
End If
Next sRow
Application.Goto sEveryNth

Selection.Copy
Sheets("SheetB").Activate
Worksheets("SheetB").Range("A1").PasteSpecial Paste:=xlPasteFormulas

' Remove .HK from stock codes

Dim lastRow As Long
Dim i As Integer


Sheets("SheetB").Activate
lastRow = Cells(Rows.Count, "B").End(xlUp).Row

With Worksheets("SheetB")
    For i = 1 To lastRow
        .Cells(i, "B") = Left(.Cells(i, "B").Value, Len(.Cells(i, "B").Value) - 3)
    Next i
End With

End Sub

1 Ответ

0 голосов
/ 04 ноября 2019

это метод Left / Len, вероятно, сбой. Проверьте, больше ли len, чем 3, потому что вы можете получить Left (строка, x), где x может быть отрицательным:

With Worksheets("Earnings Final")
  For i = 1 To lastRow
    If Len(.Cells(i, "B")) >= 3 Then
      .Cells(i, "B") = Left(.Cells(i, "B").Value, Len(.Cells(i, "B").Value) - 3)
    End If
  Next i
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...