Работа с числами в Word

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

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

Ответить
Hralain
Сообщения: 5
Зарегистрирован: 05 ноя 2013, 20:32

Подскажите пожалуйста с решением задачи. Есть файл Word. В нем таблица. Как сделать так, чтобы в столбиках, где номер, где 8-10 цифр, дописывались единички спереди, подгоняя число до 12 цифр, а где 11-12 цифр, они не оставались как есть?
Мне понятно, что надо сразу 2 условия: функция IsNumeric = true и Len(числа) = 8-10 добавлять "111" & "9 цифр". Но как обратиться к этим столбикам?
Если не трудно, напишите код с пояснениями.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Доступ к значению ячейки таблицы:
ThisDocument.Tables(A).Cell(X, Y).Range.Text
где А - номер таблицы в документе в порядке создания, Х,У - номер ряда и колонки ячейки в таблице
It's a long way to the top if you wanna rock'n'roll
Hralain
Сообщения: 5
Зарегистрирован: 05 ноя 2013, 20:32

Спасибо, а можно чуть подробнее? У меня таблица на 200 листов идет. Я же не буду каждую ячейку вбивать, столбец надо. Можно ли его забить в переменную и уже с ней сравнивать?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Hralain, Если ячейки столбца, где находятся исходные числа, не об'единены, то можно попробовать замутить что-то вроде нижеопубликованного варианта, разумеется указав свои индексы(номера) таблиц и столбца.

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

Private Sub Test()

    Dim objCell As Word.Cell, strText$, dblCell#, intLength%
    
    For Each objCell In ThisDocument.Tables(1).Columns(2).Cells
        '1 - номер(индекс) таблицы в текущем документе
        '2 - номер(индекс) столбца в котором необходимо добавить "префиксы"
    
        strText = Replace(objCell.Range.Text, ".", ",")
        strText = Left(strText, Len(strText) - 2)
        
        If IsNumeric(strText) = True Then
           dblCell = CDbl(strText): intLength = Len(strText)
           
           Select Case intLength
               'Case 1 To 7, Is > 12
                  'типа оставить как есть ?
               Case 8 To 10
                  objCell.Range.Text = String(12 - intLength, "1") & dblCell
           End Select
           
        End If
    Next

End Sub
Hralain
Сообщения: 5
Зарегистрирован: 05 ноя 2013, 20:32

Если обращаться к конкретному столбику, то не надо условие чисел (IsNumeric), в том столбе только номера и будут. Причем они будут от 8 до 12 цифр, ни больше, ни меньше.
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Мне бы Вашу уверенность ... впрочем, что мешает избавиться от "ненужной" проверки ...
Hralain
Сообщения: 5
Зарегистрирован: 05 ноя 2013, 20:32

А если у меня много одинаковых таблиц? Как чтобы он во всех посмотрел этот столбец?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

перебрать таблицы, например For Each tbl In ThisDocument.Tables
It's a long way to the top if you wanna rock'n'roll
Hralain
Сообщения: 5
Зарегистрирован: 05 ноя 2013, 20:32

Ну покажите с примером пожалуйста.
Ответить