Страница 1 из 1

Замена знака тире в строке на числа...

Добавлено: 27 мар 2010, 19:35
Busine2009
Например, в Word в диалоговое окно печать вводим 1-30, что означает распечатать страницы с 1 по 30.
Я с помощью inputbox получаю такую строку 1-30, как заполнить остальные цифры 2, 3, 4 и до 29?

Re: Замена знака тире в строке на числа...

Добавлено: 27 мар 2010, 23:15
IceFlame
Что значит заполнить? Получить строку вида "1,2,3,...30"?

Re: Замена знака тире в строке на числа...

Добавлено: 28 мар 2010, 09:30
Busine2009
IceFlame
да.

Re: Замена знака тире в строке на числа...

Добавлено: 30 мар 2010, 23:05
AlexZZZ
Попробуйте так:

Код: Выделить всё

Sub RRR()
    Dim Str As String, Arr() As String, n As Long, _
    nn As Long, sStr As String, i As Long
    On Error GoTo lbl
    Str = InputBox("Введите страницы печати: ")
    Arr = Split(Str, "-")
    n = Val(Arr(0))
    nn = Val(Arr(1))
    sStr = n
        For i = n + 1 To nn
            sStr = sStr & "," & i
        Next i
    MsgBox sStr
    Exit Sub
lbl:
    MsgBox "Ошибка данных!"
End Sub

Re: Замена знака тире в строке на числа...

Добавлено: 31 мар 2010, 21:04
Busine2009
AlexZZZ
я ещё не пробовал твой код, а как быть в этой ситуации: 1, 4, 5, 6-30, 40, 41, 43-60?

Re: Замена знака тире в строке на числа...

Добавлено: 31 мар 2010, 23:28
AlexZZZ
Однако...
Тогда так:

Код: Выделить всё

Sub SSS()
    Dim Arr() As String, sStr As String, _
    i As Long, Str As String
    On Error GoTo lbl
    sStr = InputBox("Введите страницы печати: ")
    Arr = Split(sStr, ",")
    For i = 0 To UBound(Arr)
        If InStr(1, Arr(i), "-", vbBinaryCompare) > 0 Then
            If Len(Str) > 0 Then
                Str = Str & "," & RRR(Replace(Arr(i), " ", ""))
            Else
                Str = RRR(Replace(Arr(i), " ", ""))
            End If
        Else
            If Len(Str) > 0 Then
                Str = Str & "," & Replace(Val(Arr(i)), " ", "")
            Else
                Str = Replace(Val(Arr(i)), " ", "")
            End If
        End If
    Next i
    'Макрос печати
    MsgBox Str
    Exit Sub
lbl:
    MsgBox "Ошибка данных!"
End Sub

Function RRR(Str As String)
    Dim Arr() As String, n As Long, _
    nn As Long, sStr As String, i As Long
    On Error GoTo lbl
    Arr = Split(Str, "-")
    n = Val(Arr(0))
    nn = Val(Arr(1))
    sStr = n
        For i = n + 1 To nn
            sStr = sStr & "," & i
        Next i
    RRR = sStr
    Exit Function
lbl:
    MsgBox "Ошибка данных!"
End Function

Re: Замена знака тире в строке на числа...

Добавлено: 01 апр 2010, 21:36
Busine2009
AlexZZZ
я проанализирую твой код в выходные, потому напишу, что у меня получилось.
Но всё равно спасибо.