Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
(word) Макрос с созданием аббревиатур, Run-time Error 4608 Значение лежит вне допустимого диапазона
 
Добрый день!

Пытался адаптировать известный макрос по извлечению аббревиатур из документа word.
При запуске в строке 106:
Цитата
If oRange.Information(wdInContentControl) = True Then
выпрыгивает ошибка "Run-time Error 4608 Значение лежит вне допустимого диапазона", а вот что делать с этим диапазоном я не могу разобраться, интернет мне тоже не помог, надежда как всегда на вас.
Как мне подсказать макросу что я от него хочу и чего ему от меня нужно?  :)
Код
Sub ИзвлечьАббревиатуры()

    Dim oDoc_Source As Document
    Dim oDoc_Target As Document
    Dim strListSep As String
    Dim strAcronym As String
    Dim oTable As Table
    Dim oRange As Range
    Dim n As Long
    Dim strAllFound As String
    Dim Title As String
    Dim Msg As String
    Dim oCC As ContentControl

    Title = "Извлечение аббревиатур из документа"
    
    'Show msg - stop if user does not click Yes
    Msg = "Этот макрос находит все слова, состоящие из 2 или более " & _
        "заглавных букв и извлекает эти слова в таблицу " & _
        "в новом документе, где Вы можете добавить определения." & vbCr & vbCr & _
        "Вы хотите продолжить?"

    If MsgBox(Msg, vbYesNo + vbQuestion, Title) <> vbYes Then
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    
    'Find the list separator from international settings
    'May be a comma or semicolon depending on the country
    strListSep = Application.International(wdListSeparator)
    
    'Start a string to be used for storing names of acronyms found
    strAllFound = "#"
    
    Set oDoc_Source = ActiveDocument
    
    'Create new document for acronyms
    Set oDoc_Target = Documents.Add
    
    With oDoc_Target
        'Make sure document is empty
        .Range = ""
    
        'Insert info in header - change date format as you wish
        .PageSetup.TopMargin = CentimetersToPoints(3)
        .Sections(1).Headers(wdHeaderFooterPrimary).Range.Text = _
            "Список сокращений составлен из файла: " & oDoc_Source.FullName & vbCr & _
            "Составил: " & Application.UserName & vbCr & _
            "Дата составления: " & Format(Date, "MMMM d, yyyy")
                
        'Adjust the Normal style and Header style
        With .Styles(wdStyleNormal)
            .Font.Name = "Arial"
            .Font.Size = 12
            .ParagraphFormat.LeftIndent = 0
            .ParagraphFormat.SpaceAfter = 6
        End With
    
        With .Styles(wdStyleHeader)
            .Font.Size = 8
            .ParagraphFormat.SpaceAfter = 0
        End With
        
        'Insert a table with room for acronym and definition
        Set oTable = .Tables.Add(Range:=.Range, numrows:=2, NumColumns:=3)
        With oTable
            'Format the table a bit
            'Insert headings
            .Range.Style = wdStyleNormal
            .AllowAutoFit = False
            
            .Cell(1, 1).Range.Text = "Аббревиатура"
            .Cell(1, 2).Range.Text = "Обозначение"
            .Cell(1, 3).Range.Text = "Страница"
            'Set row as heading row
            .Rows(1).HeadingFormat = True
            .Rows(1).Range.Font.Bold = True
            .PreferredWidthType = wdPreferredWidthPercent
            .Columns(1).PreferredWidth = 20
            .Columns(2).PreferredWidth = 65
            .Columns(3).PreferredWidth = 15
        End With
    End With
    
    With oDoc_Source
        Set oRange = .Range
        
        n = 1 'used to count below
        
        With oRange.Find
            'Use wildcard search to find strings consisting of 3 or more uppercase letters
            'Set the search conditions
            'NOTE: If you want to find acronyms with e.g. 2 or more letters,
            'change 3 to 2 in the line below
            .Text = "<[А-ЯЁ;A-Z]{2" & strListSep & "}>"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = True
            .MatchWildcards = True
            
            'Perform the search
            Do While .Execute
                'Skip content controls with placeholder text
                If oRange.Information(wdInContentControl) = True Then
                    Set oCC = oRange.ParentContentControl
                    If oCC.ShowingPlaceholderText = True Then
                        oRange.End = oCC.Range.End + 1
                        oRange.Collapse wdCollapseEnd
                        GoTo SkipCC
                    End If
                End If
                
                'Continue while found
                strAcronym = oRange.Text
                'Insert in target doc
                
                'If strAcronym is already in strAllFound, do not add again
                If InStr(1, strAllFound, "#" & strAcronym & "#") = 0 Then
                    'Add new row in table from second acronym
                    If n > 1 Then oTable.Rows.Add
                    'Was not found before
                    strAllFound = strAllFound & strAcronym & "#"
                    
                    'Insert in column 1 in oTable
                    'Compensate for heading row
                    With oTable
                        .Cell(n + 1, 1).Range.Text = strAcronym
                        'Insert page number in column 3
                        .Cell(n + 1, 3).Range.Text = oRange.Information(wdActiveEndPageNumber)
                    End With
                    
                    n = n + 1
                End If
SkipCC:
            Loop
        End With
    End With
    
    'Sort the acronyms alphabetically - skip if only 1 found
    If n > 2 Then
        With Selection
            .Sort ExcludeHeader:=True, FieldNumber:="Column 1", SortFieldType _
                :=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending
            
            'Go to start of document
            .HomeKey (wdStory)
        End With
    End If
        
    Application.ScreenUpdating = True
    
    'If no acronyms found, show msg and close new document without saving
    'Else keep open
    If n = 1 Then
        Msg = "No acronyms found."
        oDoc_Target.Close savechanges:=wdDoNotSaveChanges
    Else
        Msg = "Finished extracting " & n - 1 & " acronymn(s) to a new document."
    End If
    
    MsgBox Msg, vbOKOnly, Title
    
    'Clean up
    Set oRange = Nothing
    Set oDoc_Source = Nothing
    Set oDoc_Target = Nothing
    Set oTable = Nothing
    Set oCC = Nothing
    
End Sub


С уважением, Dost1369
Изменено: Dost1369 - 11.11.2022 14:37:35
Очистка диапазона при наличии в этом диапазоне пустой ячейки (VBA)
 
Добрый день!

Подскажите, пожалуйста, как можно отслеживать наличие пустой ячейки в диапазоне и очистку этого диапазона при наличии в нем пустой ячейки.

Пример прилагаю.

Пояснения к примеру:
В диапазоне F2:F4 оказалась пустая ячейка (F3), VBA отслеживает наличие этой пустоты и удаляет данные из всего диапазона F2:F4.
Такое необходимо провернуть для каждого столбца (B2:B4, С2:С4, D2:D4 и т.д.).

Пробовал пойти таким путем, но потерпел фиаско. :sceptic:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count = "" Then Exit Sub
    If Not Intersect(Target, Range("B3")) Is Nothing Then
    Range("B2:B4").Select
    Selection.ClearContents
    End If
End Sub

С  уважением, Dost1369.
Создание файла txt с наименованием из ячейки и копирование в него данных по условию
 
Добрый день!

Подскажите, пожалуйста, каким образом я могу создать файл txt в определенной папке (D:\Test) c наименованием файла, которое соответствует значению в ячейке С3 и скопировать туда выбранные данные из диапазона D6:E18 при условии, что начало диапазона всегда начинается с ячейки D6, а конец диапазона будет динамическим (последняя не пустая ячейка в диапазоне D6:E18). В примере диапазон для копирования будет D6:E12.

С уважением, Dost1369.
Сокрытие листов по условию
 
Добрый день!

Подскажите, пожалуйста, есть ли какой-то способ скрыть все листы в книге, которые не выделены цветом разом, а не тыкая вручную?
(без заливки скрываем, с заливкой оставляем)

В интернете поискал, но найти информацию не смог.



С уважением, Dost1369.
Изменено: Dost1369 - 30.03.2022 16:05:53
Удаление содержимого ячеек по условию в выделенном диапазоне (макрос)
 
Добрый день! Прошу помочь с решением следующей задачки.

Исходные данные.
1) Есть необходимость в построении диаграммы, которая будет изменяться в соответствии со значением в ячейке B2. Для этого использую результирующий столбец I2:I12.
2) Временами получается так, что в определенную дату значений может не быть, поэтому ячейка остается либо пустой, либо со знаком "-". В этом случае линия на графике ныряет до значения 0 (синия линия), что недопустимо в моем случае.
3) Если прописывать #Н/Д, то график выстраивает усредненную линию по близлежащим точкам, что также не подходит.

Что хочется получить в итоге.
1) Возможность построения графика таким образом, чтобы линия прерывалась (пример: красная линия) при помощи макроса.

Чего удалось добиться своими силами.
Идея макроса заключается в следующем:
1) При нажатии на "Большую кнопку" в диапазоне  I2:I12 обновляется формула для правильного построения диаграммы.
2) Затем происходит поиск и выделение значений, которые НЕ соответствуют условиям, для правильного построения диаграммы (-, 0, #Н/Д).
3) Макрос удаляет значения в выделенных по условию ячейках (пример в диапазоне K2:K12).
Если с обновлением формулы удалось справиться самостоятельно, то с выделением ячеек возникли трудности.

С уважением, Dost1369
Скрыть объекты диаграммы через CheckBox.
 
Добрый день!
Подскажите, пожалуйста, каким образом можно скрывать надпись на диаграмме, используя CheckBox?
У меня получилось только кнопкам присвоить макросы, которые скрывают свойства ТекстБокса.
Файл примера прилагаю.
С уважением, Dost1369.
Построение динамической диаграммы с выбором столбца
 
Добрый день!
Хочу построить динамическую диаграмму, чтобы при выборе данных Y (ячейка С4), диаграмма перестраивалась по столбцам G:I.
Поискал по форуму, общая идея понятна, но реализовать не получается.
Подскажите, пожалуйста, где я ошибаюсь?

С уважением, Dost1369.
Изменено: Dost1369 - 30.10.2017 07:42:46
Вставка графика в форму VBA по имени.
 
Добрый день, уважаемые форумчане!
Имеется изменяющийся во времени диапазон значений, по которым строятся большое количество диаграмм на одном листе.
Подскажите, пожалуйста, каким образом я могу внедрить диаграмму в форму VBA по выбору ее имени в комбобоксе?
Пример прилагаю.
С уважением, Dost1369.
Изменено: Dost1369 - 05.10.2017 10:50:36
Зависимые списки в Combobox (VBA)
 
Добрый день, уважаемые форумчане!
Суть проблемы: Есть сводный перечень, в котором наименования (столбец C) принадлежат разным объектам (столбец B), необходимо сделать так, чтобы в Combobox1 для выбора выдавался перечень объектов (сейчас я это сделал  при помощи AddItem), а в Combobox2 перечень наименований, соответсвующий выбранному объекту.
Для понимания работы желаемого - сделал табличку в фиолетовой рамке на листе "Выбор".
Для вызова формы - добавил большую красную кнопку.  
Подскажите, пожалуйста, каким образом можно сделать зависимые Combobox в форме VBA?
С уважением, Dost1369.
Подстановка максимальных значений из разных диапазонов
 
Добрый день, уважаемые форумчане!

Подскажите, пожалуйста, как мне правильно прописать формулу в ячейки С6:С8 Лист Пример1 так, чтобы значение Y вычислялось из соответствующего диапазона дат и значений, т.е. максимальное значение из первого диапазона Х≤80 (выделил зеленым в листе Пример2) будет 76,17, а в ячейки D6:D8 выводилась дата соответствующая значению в ячейках С?

Старался сделать своими силами, но моя версия со вспомогательными таблицами выглядит как раненная черепаха на костылях, и это только для одного наименования. Если их будет около 200, то количество таких вспомогательных табличек перевалит за 800.

С уважением, Dost1369.
Открытие Userform на весь экран
 
Доброго времени суток, уважаемые форумчане!

Необходимо, чтобы Userform при открытии файла разворачивалась на весь экран, учитывая то, что у пользователей стоит разное разрешение экранов.
Пробовал сделать так, как реализовано в этой теме (http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=33379), но ничего не получилось.
Подскажите, пожалуйста, где я ошибаюсь?

С уважением, Dost1369.
Видимость кнопки в зависимости от условия
 
Добрый день, уважаемые жители Планеты!
Поискал по различным форумам, но ответа на свой вопрос так и не нашел.
Подскажите, пожалуйста, как можно сделать кнопку не активной или же скрыть ее, если в форме не выбрано значение?
Пробовал реализовать свою "хотелку" через Enabled и Visible, но ничего не получилось.
Пример файла прикрепляю.
С уважением, Андрей.
Отбор значений с учетом временного интервала.
 
Доброго времени суток, уважаемые форумчане.
Необходимо сделать итоговую таблицу, где данные столбца А1 заполнялись бы с учетом определенного временного интервала, который прописывается в ячейках H1, H2.
Пробовал через «индекс», но либо прогадал с формулой, либо не додумался как должна выглядеть формула в итоге.
Подскажите, пожалуйста, как можно реализовать необходимое?
С уважением, Андрей.
Двумерный поиск по массиву, Осторожно! Много букв.
 
     Доброго времени суток, уважаемые форумчане.
    Задача состоит в том, чтобы при вводе данных в одну ячейку, Excel автоматом делал выборку из исходной таблицы и помещал в соседнюю ячейку сумму значений вертикальной и горизонтальной шкалы.
    Есть подозрение, что есть способ сделать все это проще с помощью ВПР, ПОИСКПОЗ и ИНДЕКСа, но додумался пока только до этого.

    Мое решение: Имеется значение, которому соответствует определенное ближайшее число по вертикальной и горизонтальной шкале (t, °C) в исходной таблице 1.
    При изменении числа в ячейке B5 происходит пересчет вспомогательной таблицы 2 с целью узнать минимальную разность значения из ячейки B5 и диапазона значений из исходной таблицы 1 и возвращает модуль полученного числа.
Затем из диапазона полученных значений таблицы 2 отбирается минимальное значение этой самой разности и записывается в ячейку J77.
    Далее в таблице 3 сравниваем значение ячейки J77 и диапазона таблицы 2 и если числа не равны, то ставим знак «@», а при равенстве этих значений записываем в ячейку сумму по вертикальной и горизонтальной шкале.
    В итоге из диапазона таблицы 3 выбираем максимальное значение (т.к. оно там одно единственное, а остальные ячейки забиты «собаками») и отправляем его в ячейку C5.
    Подскажите, пожалуйста, как можно упростить все эти многочисленные манипуляции?

Заранее благодарю,
С уважением, Андрей.
Поиск значений по дате
 
Доброго времени суток.

Имеется два файла, в первом есть значения, которые относятся к определенной дате, т.е. для каждого дня в году есть свое значение, во втором есть определенные даты, которые могут идти не по порядку.
Необходимо, чтобы при появлении новой даты во втором файле, в соседней ячейке появлялось значения из первого файла, соответствующее этой дате.


Подскажите, пожалуйста, как это можно реализовать?
С уважением, Андрей.
Выделение ячейки цветом по условию
 
Доброго времени суток, уважаемые форумчане.
Имеется огромное множество файлов с датами, что не позволяет вручную произвести все эти манипуляции (если честно, то тратить время на это просто контрпродуктивно).
Подскажите, пожалуйста, как можно сделать выделение ячейки с датой определенным цветом при условии, что эта дата первая после смены года.
Пытался сделать через условное форматирование, но не сообразил как именно прописать формулу.
Заранее благодарю за советы.
С уважением, Андрей.
Изменено: Dost1369 - 16.11.2015 10:28:28
Страницы: 1
Наверх