Я пишу макрос, который будет в основном копировать и вставлять данные с одного листа на другой. Код выполняется и работает до последнего бита, где мне нужно удалить последние три символа из каждой ячейки в указанном столбце.
Код делает это нормально, но впоследствии я всегда получаю сообщение об ошибке
Недопустимый вызов процедуры или аргумент (Ошибка 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