Попытка присвоить значения ячейки, но постоянно напоминать "несоответствие типов" - PullRequest
0 голосов
/ 24 июня 2019

Спасибо за ответы. Я понимаю, где я допустил ошибки, поэтому немного изменил, но появилось новое напоминание об ошибке. Он продолжает напоминать мне «ожидается :(» в строке «Instra = Instrb + 2».

Option Explicit

Sub separate()

Dim instrb As Integer
Dim Instra As Integer
Dim i As Integer

i = 2

Do Until Worksheets(1).Cells(i, "A") = ""
instrb = InStr(Cells(i, "A").Text, "pm")
Instra = Instrb + 2
    Cells(i, "B").Value = Right(Worksheets(1).Cells(i, "A"), (Len(Worksheets(1).Cells(i, "A")) - Instra))
    i = i + 1
Loop

End Sub

Я новичок в программировании, поэтому я знаю, что моя работа выглядит глупо. То, что я пытаюсь сделать, это скопировать все слова в правой части «pm» в столбце A и вставить в столбец B. Однако это напоминает мне «несоответствие типов». Я думаю, что я делаю правильно, поэтому не уверен, что происходит.

Sub separate()
    Dim instrb As Integer
    Dim Instra As Integer
    Dim i As Integer

    i = 2

    Do Until Worksheets(1).Cells(i, "A") = ""
        instrb = InStr(Cells(i, "A").Text, "pm")
        Instra = Instrab + 2
        Cells(i, "B").Value = Right(Worksheets(1).Cells(i, "A"), Len(Worksheets(1).Cells(i, "A") - Instra) + 2).Text
        i = i + 1
    Loop
End Sub

1 Ответ

1 голос
/ 24 июня 2019

Рассмотрим:

Sub separate()
    Dim instrbb As Integer
    Dim instra As Integer
    Dim i As Integer

    i = 2

    Do Until Worksheets(1).Cells(i, "A") = ""
        instrbb = InStr(Cells(i, "A").Text, "pm")
        instra = instrbb + 2
        Cells(i, "B").Value = Right(Worksheets(1).Cells(i, "A").Text, (Len(Worksheets(1).Cells(i, "A")) - instra + 1))
        i = i + 1
    Loop
End Sub

Но вы можете упростить:

Sub separate()
    Dim instrbb As Integer
    Dim instra As Integer
    Dim i As Integer
    Dim s As String

    i = 2
    With Worksheets(1)
        Do Until .Cells(i, "A") = ""
            s = .Cells(i, "A").Text
            .Cells(i, "B").Value = Split(s, "pm")(1)
            i = i + 1
        Loop
    End With
End Sub

ПРИМЕЧАНИЯ:

  1. исключено использование Instrb в качестве переменной, поскольку это предопределенная функция VBA
  2. исправлены простые математические ошибки при разборе строки
  3. как уже упоминали другие, было бы разумно использовать Long вместо Integer
  4. как уже упоминали другие, было бы разумно использовать Option Explicit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...