Пытался адаптировать известный макрос по извлечению аббревиатур из документа 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
Подскажите, пожалуйста, как можно отслеживать наличие пустой ячейки в диапазоне и очистку этого диапазона при наличии в нем пустой ячейки.
Пример прилагаю.
Пояснения к примеру: В диапазоне F2:F4 оказалась пустая ячейка (F3), VBA отслеживает наличие этой пустоты и удаляет данные из всего диапазона F2:F4. Такое необходимо провернуть для каждого столбца (B2:B4, С2:С4, D2:D4 и т.д.).
Пробовал пойти таким путем, но потерпел фиаско.
Код
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
Подскажите, пожалуйста, каким образом я могу создать файл txt в определенной папке (D:\Test) c наименованием файла, которое соответствует значению в ячейке С3 и скопировать туда выбранные данные из диапазона D6:E18 при условии, что начало диапазона всегда начинается с ячейки D6, а конец диапазона будет динамическим (последняя не пустая ячейка в диапазоне D6:E18). В примере диапазон для копирования будет D6:E12.
Подскажите, пожалуйста, есть ли какой-то способ скрыть все листы в книге, которые не выделены цветом разом, а не тыкая вручную? (без заливки скрываем, с заливкой оставляем)
Добрый день! Прошу помочь с решением следующей задачки.
Исходные данные. 1) Есть необходимость в построении диаграммы, которая будет изменяться в соответствии со значением в ячейке B2. Для этого использую результирующий столбец I2:I12. 2) Временами получается так, что в определенную дату значений может не быть, поэтому ячейка остается либо пустой, либо со знаком "-". В этом случае линия на графике ныряет до значения 0 (синия линия), что недопустимо в моем случае. 3) Если прописывать #Н/Д, то график выстраивает усредненную линию по близлежащим точкам, что также не подходит.
Что хочется получить в итоге. 1) Возможность построения графика таким образом, чтобы линия прерывалась (пример: красная линия) при помощи макроса.
Чего удалось добиться своими силами. Идея макроса заключается в следующем: 1) При нажатии на "Большую кнопку" в диапазоне I2:I12 обновляется формула для правильного построения диаграммы. 2) Затем происходит поиск и выделение значений, которые НЕ соответствуют условиям, для правильного построения диаграммы (-, 0, #Н/Д). 3) Макрос удаляет значения в выделенных по условию ячейках (пример в диапазоне K2:K12). Если с обновлением формулы удалось справиться самостоятельно, то с выделением ячеек возникли трудности.
Добрый день! Подскажите, пожалуйста, каким образом можно скрывать надпись на диаграмме, используя CheckBox? У меня получилось только кнопкам присвоить макросы, которые скрывают свойства ТекстБокса. Файл примера прилагаю. С уважением, Dost1369.
Добрый день! Хочу построить динамическую диаграмму, чтобы при выборе данных Y (ячейка С4), диаграмма перестраивалась по столбцам G:I. Поискал по форуму, общая идея понятна, но реализовать не получается. Подскажите, пожалуйста, где я ошибаюсь?
Добрый день, уважаемые форумчане! Имеется изменяющийся во времени диапазон значений, по которым строятся большое количество диаграмм на одном листе. Подскажите, пожалуйста, каким образом я могу внедрить диаграмму в форму VBA по выбору ее имени в комбобоксе? Пример прилагаю. С уважением, Dost1369.
Добрый день, уважаемые форумчане! Суть проблемы: Есть сводный перечень, в котором наименования (столбец C) принадлежат разным объектам (столбец B), необходимо сделать так, чтобы в Combobox1 для выбора выдавался перечень объектов (сейчас я это сделал при помощи AddItem), а в Combobox2 перечень наименований, соответсвующий выбранному объекту. Для понимания работы желаемого - сделал табличку в фиолетовой рамке на листе "Выбор". Для вызова формы - добавил большую красную кнопку. Подскажите, пожалуйста, каким образом можно сделать зависимые Combobox в форме VBA? С уважением, Dost1369.
Подскажите, пожалуйста, как мне правильно прописать формулу в ячейки С6:С8 Лист Пример1 так, чтобы значение Y вычислялось из соответствующего диапазона дат и значений, т.е. максимальное значение из первого диапазона Х≤80 (выделил зеленым в листе Пример2) будет 76,17, а в ячейки D6:D8 выводилась дата соответствующая значению в ячейках С?
Старался сделать своими силами, но моя версия со вспомогательными таблицами выглядит как раненная черепаха на костылях, и это только для одного наименования. Если их будет около 200, то количество таких вспомогательных табличек перевалит за 800.
Необходимо, чтобы Userform при открытии файла разворачивалась на весь экран, учитывая то, что у пользователей стоит разное разрешение экранов. Пробовал сделать так, как реализовано в этой теме (http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=33379), но ничего не получилось. Подскажите, пожалуйста, где я ошибаюсь?
Добрый день, уважаемые жители Планеты! Поискал по различным форумам, но ответа на свой вопрос так и не нашел. Подскажите, пожалуйста, как можно сделать кнопку не активной или же скрыть ее, если в форме не выбрано значение? Пробовал реализовать свою "хотелку" через Enabled и Visible, но ничего не получилось. Пример файла прикрепляю. С уважением, Андрей.
Доброго времени суток, уважаемые форумчане. Необходимо сделать итоговую таблицу, где данные столбца А1 заполнялись бы с учетом определенного временного интервала, который прописывается в ячейках H1, H2. Пробовал через «индекс», но либо прогадал с формулой, либо не додумался как должна выглядеть формула в итоге. Подскажите, пожалуйста, как можно реализовать необходимое? С уважением, Андрей.
Доброго времени суток, уважаемые форумчане. Задача состоит в том, чтобы при вводе данных в одну ячейку, Excel автоматом делал выборку из исходной таблицы и помещал в соседнюю ячейку сумму значений вертикальной и горизонтальной шкалы. Есть подозрение, что есть способ сделать все это проще с помощью ВПР, ПОИСКПОЗ и ИНДЕКСа, но додумался пока только до этого.
Мое решение: Имеется значение, которому соответствует определенное ближайшее число по вертикальной и горизонтальной шкале (t, °C) в исходной таблице 1. При изменении числа в ячейке B5 происходит пересчет вспомогательной таблицы 2 с целью узнать минимальную разность значения из ячейки B5 и диапазона значений из исходной таблицы 1 и возвращает модуль полученного числа. Затем из диапазона полученных значений таблицы 2 отбирается минимальное значение этой самой разности и записывается в ячейку J77. Далее в таблице 3 сравниваем значение ячейки J77 и диапазона таблицы 2 и если числа не равны, то ставим знак «@», а при равенстве этих значений записываем в ячейку сумму по вертикальной и горизонтальной шкале. В итоге из диапазона таблицы 3 выбираем максимальное значение (т.к. оно там одно единственное, а остальные ячейки забиты «собаками») и отправляем его в ячейку C5. Подскажите, пожалуйста, как можно упростить все эти многочисленные манипуляции?
Имеется два файла, в первом есть значения, которые относятся к определенной дате, т.е. для каждого дня в году есть свое значение, во втором есть определенные даты, которые могут идти не по порядку. Необходимо, чтобы при появлении новой даты во втором файле, в соседней ячейке появлялось значения из первого файла, соответствующее этой дате.
Подскажите, пожалуйста, как это можно реализовать? С уважением, Андрей.
Доброго времени суток, уважаемые форумчане. Имеется огромное множество файлов с датами, что не позволяет вручную произвести все эти манипуляции (если честно, то тратить время на это просто контрпродуктивно). Подскажите, пожалуйста, как можно сделать выделение ячейки с датой определенным цветом при условии, что эта дата первая после смены года. Пытался сделать через условное форматирование, но не сообразил как именно прописать формулу. Заранее благодарю за советы. С уважением, Андрей.