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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

Например, в Word в диалоговое окно печать вводим 1-30, что означает распечатать страницы с 1 по 30.
Я с помощью inputbox получаю такую строку 1-30, как заполнить остальные цифры 2, 3, 4 и до 29?
IceFlame
Сообщения: 62
Зарегистрирован: 29 ноя 2009, 03:54

Что значит заполнить? Получить строку вида "1,2,3,...30"?
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

IceFlame
да.
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Попробуйте так:

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

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
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

AlexZZZ
я ещё не пробовал твой код, а как быть в этой ситуации: 1, 4, 5, 6-30, 40, 41, 43-60?
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Однако...
Тогда так:

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

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
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

AlexZZZ
я проанализирую твой код в выходные, потому напишу, что у меня получилось.
Но всё равно спасибо.
Ответить