Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2014, 15:55   #1
artemcx
Новичок
Джуниор
 
Регистрация: 29.05.2014
Сообщений: 8
Вопрос Макрос для вставки нумерации в название таблицы

Добрый день!

Имеется куча таблиц вида:

Таблица №
_________
_________
_________

Надо после каждого "№" вставить номера по порядку.
artemcx вне форума Ответить с цитированием
Старый 29.05.2014, 16:47   #2
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Вот самый простой макрос:
Код:
Public Sub TableNum()
Dim Table As Table, Caption As CaptionLabel
    On Error Resume Next
    Set Caption = CaptionLabels("Таблица №")
        If Err.Number > 0 Then
            CaptionLabels.Add Name:="Таблица №"
        End If
    For Each Table In ActiveDocument.Tables
        Table.Range.InsertCaption Label:="Таблица №", TitleAutoText:= _
            "InsertCaption1", Title:="", Position:=wdCaptionPositionAbove, _
            ExcludeLabel:=0
    Next Table
End Sub
Пименов Александр вне форума Ответить с цитированием
Старый 29.05.2014, 17:01   #3
artemcx
Новичок
Джуниор
 
Регистрация: 29.05.2014
Сообщений: 8
По умолчанию

Дело в том, что он вставляет "Таблица №1" например после существующей надписи.

Вот так получается:

Таблица № - Название
Таблица №1

По другому пробывал, та же штука...Получается надо в сам текст сквозную нумерацию.
artemcx вне форума Ответить с цитированием
Старый 30.05.2014, 07:46   #4
artemcx
Новичок
Джуниор
 
Регистрация: 29.05.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Пименов Александр Посмотреть сообщение
Вот самый простой макрос:
Код:
Public Sub TableNum()
Dim Table As Table, Caption As CaptionLabel
    On Error Resume Next
    Set Caption = CaptionLabels("Таблица №")
        If Err.Number > 0 Then
            CaptionLabels.Add Name:="Таблица №"
        End If
    For Each Table In ActiveDocument.Tables
        Table.Range.InsertCaption Label:="Таблица №", TitleAutoText:= _
            "InsertCaption1", Title:="", Position:=wdCaptionPositionAbove, _
            ExcludeLabel:=0
    Next Table
End Sub
Дело в том, что он вставляет "Таблица №1" например после существующей надписи.

Вот так получается:

Таблица № - Название
Таблица №1

По другому пробывал, та же штука...Получается надо в сам текст нумерацию.
artemcx вне форума Ответить с цитированием
Старый 30.05.2014, 09:56   #5
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

получился приличный слон, но у меня работает
--допускает повторное применение
--проверяет строку на шаблон
---------------------пробуйте на копии
Код:
Sub w140517_1023()
Dim S1, S2, s1a, J1, J1K, j1t, j1p, j2
j1t = Word.ActiveDocument.Tables.Count
j1p = Word.ActiveDocument.Paragraphs.Count
Debug.Print j1t, j1p
j2 = 2
Do While j1p > 0
With Word.ActiveDocument.Paragraphs(j1p)
If .Range.Information(wdWithInTable) = True Then
j2 = 0
S2 = .Range.Text & S2
Else
j2 = j2 + 1
    If j2 = 1 Then
    .Range.Select
    S1 = .Range.Text
    S1 = Replace(S1, Chr(13), "")
    S1 = Replace(S1, Chr(10), "")
    J1 = InStr(S1, "№")
    Debug.Print Len(S1), J1, S1; "="
    
        If J1 = 0 Then
        MsgBox "таблица не имеет опорной строки " & Mid(S2, 1, 100)
        S2 = ""
        Else
        S2 = ""
        J1K = J1 + 1
        Do While J1K < Len(S1)
            If InStr("0123456789 ", Mid(S1, J1K, 1)) > 0 Then
            .Range.Characters(J1K).Text = "`"
            Else
            Exit Do
            End If
        J1K = J1K + 1
        Loop
        Do While J1K > J1
            If .Range.Characters(J1K).Text = "`" Then
            .Range.Characters(J1K).Text = ""
            End If
        J1K = J1K - 1
        Loop
        
        .Range.Characters(J1).Text = "№" & j1t & " "
        End If
    
    
    j1t = j1t - 1
    End If
End If
End With
j1p = j1p - 1
Loop
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 30.05.2014, 10:34   #6
artemcx
Новичок
Джуниор
 
Регистрация: 29.05.2014
Сообщений: 8
По умолчанию

Программа работает, спасибо! Но есть минус, для большого количества таблиц (около 10 000) работает очеееень долго. 100 таблиц в файле нумерует минут 30....

На ошибку не обращайте внимания
Изображения
Тип файла: jpg Безымянный.jpg (13.7 Кб, 124 просмотров)

Последний раз редактировалось artemcx; 30.05.2014 в 10:51.
artemcx вне форума Ответить с цитированием
Старый 30.05.2014, 10:48   #7
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

у вас похоже неразрешены макросы на вкладке параметры-безопасность

правда у меня 2007
но каких-то особых строк я не применяла
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 30.05.2014, 11:05   #8
artemcx
Новичок
Джуниор
 
Регистрация: 29.05.2014
Сообщений: 8
По умолчанию

С ошибкой разобрался, все работает.


Для большого количества таблиц (около 10 000) работает очеееень долго. 100 таблиц в файле нумерует минут 30....
artemcx вне форума Ответить с цитированием
Старый 30.05.2014, 11:42   #9
artemcx
Новичок
Джуниор
 
Регистрация: 29.05.2014
Сообщений: 8
По умолчанию

Вот что-то похожее должно получится, но ничего не происходит. Что посоветуете изменить (добавить)?

Sub qwer ()
Dim i As Long
Do
i = i + 1
Loop While ThisDocument.Range.Find.Execute(Fin dtext:="Таблица № ", replacewith:="Таблица №" + CStr(i))

End Sub
artemcx вне форума Ответить с цитированием
Старый 30.05.2014, 12:45   #10
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

10000 таблиц---- сколько же это страниц
задача явно не для ворда

--если структура одинакова --excel
--иначе НТМ с оглавлением и навигацей


====
таблицы имеют объединенные ячейки или нет
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для сквозной нумерации с группами и подгруппами Ph0enix Microsoft Office Excel 3 16.04.2014 10:33
PasteLink - простой макрос на VBA для Excel для вставки в ячейку гипперссылки на файл в буфере обмена. wyfinger Microsoft Office Excel 4 22.05.2013 14:10
Макрос для вставки новой строки Maiku Microsoft Office Excel 6 15.03.2013 18:28
Макрос для вставки картинки из эксель КТатьяна Microsoft Office Excel 0 02.05.2011 12:46
макрос для нумерации строк Olya1985 Microsoft Office Excel 5 07.01.2011 23:46