2017-01-16 5 views
0

Моя строка находится в формате Cells(i, 6) & ("-000") & (q). Здесь Cells(i,6).value является целым числом.Инкрементный номер в конце строки

Я хочу добавить 1 к q, из строки она находится в

ElseIf k > 0 Then 
    Sht1.Cells(erow, 3) = CInt(sht3.Cells(i, 5).value) + 1 
    Sht1.Cells(erow, 4) = CInt(sht3.Cells(i, 6).value) + 1 
    Sht1.Cells(erow, 1) = Sht1.Cells(erow - 1, 1).value + 1 
End If 
+0

В чем проблема с вашим кодом? – Vityata

+0

получение ошибки во время выполнения 13 –

ответ

0

Попробуйте заменить код следующим образом:.

If k > 0 Then 

    Sht1.Cells(erow, 3) = CInt(sht3.Cells(i, 5).value) + 1 
    Debug.Print CInt(sht3.Cells(i, 5).value) 

    Sht1.Cells(erow, 4) = CInt(sht3.Cells(i, 6).value) + 1 
    Debug.Print CInt(sht3.Cells(i, 6).value) 

    Sht1.Cells(erow, 1) = Sht1.Cells(erow - 1, 1).value + 1 
    Debug.Print Sht1.Cells(erow - 1, 1).value 

End If 

И увидеть, где он ломает. Посмотрите на ближайшее окно. Вероятно, это не число.

Если изменить код немного, вы можете получить то, что вы хотите:

Public Sub TestMe 

If k > 0 Then 

    Sht1.Cells(erow, 3) = IncreaseWithOne(sht3.Cells(i, 5).value) 

End If 

End Sub 

Public Function IncreaseWithOne(strValue As String) As String 

    Dim myVal As Long 

    myVal = Split(strValue, "-")(1) 
    IncreaseWithOne = Split(strValue, "-")(0) & "-" & Format(myVal + 1, "0000") 

End Function 

Но это действительно лучше, если вы измените свой вопрос, что вы хотите. Например, вы хотите разбить строку 25-00001, отнести к целому числу и прирастить вторую часть и вернуть 25-00002. Поскольку добавление целого к строке не поддерживается никаким языком программирования.

+0

перерывы на sht1.cells (erow, 3) и получение той же ошибки. Мой код выглядит как 16-00012 –

+0

Затем положите поверх строки 'Debug.Print CInt (sht3.Cells (i, 5) .value)' и скажите, что находится в непосредственном окне. – Vityata

+0

Он проходит через 'debug.print и показывает ошибку на sht1.cells (erow, 3) –

0

Из вашего другого вопроса (связанного внизу) мы знаем, что цифры, которые вы хотите увеличить, всегда являются правыми четырьмя символами, поэтому вы можете использовать Right для выделения числовой части. Я также думаю, что вы теперь использовали другой подход и сохраняете значение приращения отдельно. Для справки, хотя, это то, как вы могли бы это сделать:

Dim myString as String 
myString = "25-0003" 

' Assume there is always a single dash before the number to increment 
' This means we can use Split to create two parts, before and after "-" 

Dim myVal as Integer 
myVal = Val(Split(myString, "-")(1)) 
' >> myVal = 3 

myVal = myVal + 1 
' >> myVal = 4 

myString = Split(myString,"-")(0) & "-" & Format(myVal, "0000") 
' >> myString = "25-0004" 

Так редактировать фактический код, осуществляя приведенный выше код в функции, она становится

Sub ThisIsYourSub() 

    If k > 0 Then 
     Sht1.Cells(erow, 3) = IncrementString(sht3.Cells(i, 5).value) 
     Sht1.Cells(erow, 4) = IncrementString(sht3.Cells(i, 6).value) 
     Sht1.Cells(erow, 1) = IncrementString(Sht1.Cells(erow - 1, 1).value) 
    End If 

End Sub 

Function IncrementString(ByVal myString as String) as String 

    ' You should have some error handling in here! 

    Dim myVal as Integer 
    myVal = Val(Split(myString, "-")(1)) + 1 

    IncrementString = Split(myString,"-")(0) & "-" & Format(myVal, "0000") 

End Function 

Split Документация:

https://msdn.microsoft.com/en-us/library/office/gg278528.aspx


другое Ваш вопрос , В том числе сведения об использовании функции Format, как описано выше:

Standard pattern of string is like 16-000q. Use leading zeros to create 4 digit string from q

+0

Если я хочу, чтобы MyString для диапазона данных, это можно сделать в 'split function ', используя функцию сравнения? –

Смежные вопросы