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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2013, 21:07   #1
umka777_89
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 31
Лампочка Удаление пустых столбцов в таблице

Помогите с макросом, пожалуйста.
Нужно удалить столбцы в таблице (пустые: Семестр1, Семестр2 и тд), пример во вложении.
Изображения
Тип файла: jpg Таблица.jpg (98.1 Кб, 111 просмотров)
umka777_89 вне форума Ответить с цитированием
Старый 30.05.2013, 21:16   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

umka777_89, нужно удалить именно столбцы, у которых заголовок содержит слово "Семестр" или заголовок может быть любой и нужно удалить любой пустой столбец?
Скрипт вне форума Ответить с цитированием
Старый 30.05.2013, 21:23   #3
umka777_89
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 31
По умолчанию

Скрипт, мне именно для данной таблицы, здесь нужно будет удалять только столбцы с незаполненными ячейками, например может быть так
и надо удалить те, что не заполнены
Изображения
Тип файла: jpg Таблица2.jpg (97.7 Кб, 114 просмотров)
umka777_89 вне форума Ответить с цитированием
Старый 30.05.2013, 21:25   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

umka777_89, я в сообщении #2 задал вопрос и так и не получил на него ответа. Поэтому не могу вам помочь.
Скрипт вне форума Ответить с цитированием
Старый 30.05.2013, 21:30   #5
umka777_89
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 31
По умолчанию

Скрипт, заголовок содержит слово "Семестр", помогите, пожалуйчта
umka777_89 вне форума Ответить с цитированием
Старый 30.05.2013, 21:59   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Код работает, если нет объединённых ячеек в таблице.
Код работает с таблицей, в которой находится курсор.

Для ускорения работы кода можно попробовать перейти в режим "Черновик" (Word 2010) и отключить проверку правописания.
Код:
Sub Procedure_1()
    
    
    '1. Помещаем в константу "myHeader" фрагмент заголовка
        'столбцов, которые нас интересуют.
    Const myHeader As String = "Семестр"

    Dim myTable As Word.Table
    Dim myLen As Long
    Dim i As Long, j As Long
    
    
    '2. Даём таблице, в которой находится курсор, VBA-имя "myTable".
    'Через это имя будем обращаться к этой таблице. Так удобнее писать код.
    Set myTable = Selection.Tables(1)
    
    
    '3. Берём в переменную "myLen" количество символов,
        'которое во фрагменте заголовка, чтобы каждый раз
        'не вызывать функцию "Len" (может это ускорит работу кода).
    myLen = Len(myHeader)
    
    
    'В цикле с "i" двигаемся по ячейкам первой строки таблицы.
    'Когда что-то удаляем, то удобнее писать код, если
        'двигаться с конца в начало, т.к. порядковые номера
        'элементов меняются.
    For i = myTable.Columns.Count To 1 Step -1
        'Если в ячейке в начале ячейки есть слово "Семестр",
            'то анализируем остальные ячейки столбца.
        If Left(myTable.Cell(1, i).Range.Text, myLen) = myHeader Then
            
            'В цикле с "j" двигаемся по ячейкам столбца.
            For j = 2 To myTable.Rows.Count Step 1
            
                'В каждой Word-ячейке есть всегда два символа:
                    '1) символ "Конец ячейки" (его видно, если включен
                        'режим отображения непечатаемых символов (он круглый));
                    '2) символ, которого вообще не видно никогда.
                'Characters учитывает символ "Конец ячейки".
                'Если в ячейке больше одного символа, значит ячейка не пустая.
                If myTable.Cell(j, i).Range.Characters.Count > 1 Then
                    'Переходим к следующему столбцу.
                    GoTo metka
                End If
                
            Next j
            
            'Если код дошёл до сюда, значит все ячейки
                'в столбце просмотрены и все ячейки пустые.
            'Удаляем столбец.
            myTable.Columns(i).Delete
            
        End If
        
metka:
        
    Next i

End Sub

Последний раз редактировалось Скрипт; 31.05.2013 в 07:57.
Скрипт вне форума Ответить с цитированием
Старый 31.05.2013, 07:01   #7
umka777_89
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 31
По умолчанию

Скрипт, огромное вам спасибо))
umka777_89 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пустых строк в таблице Semen90 Microsoft Office Word 24 14.07.2022 12:28
Запрет пустых столбцов в DataSet JeyKip C# (си шарп) 4 18.04.2011 09:43
Ввести число для пустых ячеек в таблице kaval88 Microsoft Office Excel 31 25.02.2011 09:04
заполнение пустых строк в таблице pavelskv Microsoft Office Excel 11 08.02.2011 16:11
удаление сразу всех пустых строчек в таблице kibernet Microsoft Office Word 3 21.12.2010 12:07