Vba excel узнать есть ли примечание в ячейке
Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".
Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".
Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".
Заранее благодарю. Автор - Hyperboreus
Дата добавления - 22.04.2013 в 17:03
Забыл сказать, на листе присутствуют защищённые ячейки, а лист защищён паролем (изменения можно делать только макросом, а не через интерфейс пользователя).
Предполагалось добавлять примечания в активные ячейки (кроме защищённых) макросом.
Забыл сказать, на листе присутствуют защищённые ячейки, а лист защищён паролем (изменения можно делать только макросом, а не через интерфейс пользователя).
Предполагалось добавлять примечания в активные ячейки (кроме защищённых) макросом. Hyperboreus
Забыл сказать, на листе присутствуют защищённые ячейки, а лист защищён паролем (изменения можно делать только макросом, а не через интерфейс пользователя).
Предполагалось добавлять примечания в активные ячейки (кроме защищённых) макросом. Автор - Hyperboreus
Дата добавления - 22.04.2013 в 17:17
Спасибо. Насколько я понял, этот макрос добавляет в примечание уже готовый текст. А как быть если необходимо непосредственно руками, после выполнения макроса, вводить текст примечания.
Спасибо. Насколько я понял, этот макрос добавляет в примечание уже готовый текст. А как быть если необходимо непосредственно руками, после выполнения макроса, вводить текст примечания. Hyperboreus
Спасибо. Насколько я понял, этот макрос добавляет в примечание уже готовый текст. А как быть если необходимо непосредственно руками, после выполнения макроса, вводить текст примечания. Автор - Hyperboreus
Дата добавления - 22.04.2013 в 17:21
Проверял. Происходит добавление пустого примечания. Изменить (редактировать) примечание через правую кнопку нельзя, так как лист защищён от изменений, вносимых посредством интерфейса. Можно только через макрос.
Проверял. Происходит добавление пустого примечания. Изменить (редактировать) примечание через правую кнопку нельзя, так как лист защищён от изменений, вносимых посредством интерфейса. Можно только через макрос. Hyperboreus
Поскольку опыта общения с макросами практически нет, и не всегда в целом получается решить проблему. Поэтому обращаюсь к знающим людям.
Поскольку опыта общения с макросами практически нет, и не всегда в целом получается решить проблему. Поэтому обращаюсь к знающим людям. Hyperboreus
А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново
А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново Serge_007
А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново Автор - Serge_007
Дата добавления - 23.04.2013 в 23:36
А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново
Сама форма предусмотрена с защитой. Защита была поставлена в целях сохранения структуры формы (чтобы лишнего не добавляли). На листе есть кнопка к которой привязан макрос добавляющий строки (через меню нельзя добавить). Значения в некоторые ячейки и так можно вводить, так как у них снята защита, но добавить примечание нельзя. Поэтому было выдвиното предложение о создании второй кнопки, позволяющей добавить примечание в активную ячейку.
Т.е. насколько я понял, Вы предлагаете использовать макрос, который выполняет следующие действия:
1. Снимает защиту с листа;
2. Добавляет примечание;
3. Ставит защиту листа.
А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново
Сама форма предусмотрена с защитой. Защита была поставлена в целях сохранения структуры формы (чтобы лишнего не добавляли). На листе есть кнопка к которой привязан макрос добавляющий строки (через меню нельзя добавить). Значения в некоторые ячейки и так можно вводить, так как у них снята защита, но добавить примечание нельзя. Поэтому было выдвиното предложение о создании второй кнопки, позволяющей добавить примечание в активную ячейку.
Т.е. насколько я понял, Вы предлагаете использовать макрос, который выполняет следующие действия:
1. Снимает защиту с листа;
2. Добавляет примечание;
3. Ставит защиту листа. Hyperboreus
А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново
Сама форма предусмотрена с защитой. Защита была поставлена в целях сохранения структуры формы (чтобы лишнего не добавляли). На листе есть кнопка к которой привязан макрос добавляющий строки (через меню нельзя добавить). Значения в некоторые ячейки и так можно вводить, так как у них снята защита, но добавить примечание нельзя. Поэтому было выдвиното предложение о создании второй кнопки, позволяющей добавить примечание в активную ячейку.
Т.е. насколько я понял, Вы предлагаете использовать макрос, который выполняет следующие действия:
1. Снимает защиту с листа;
2. Добавляет примечание;
3. Ставит защиту листа. Автор - Hyperboreus
Дата добавления - 24.04.2013 в 11:45
Sub Comm()
On Error Resume Next
With Range("C6")
.AddComment
.Comment.Visible = False
.Select
Selection.Comment.Text Text:=InputBox("Текст комментария")
End With
End Sub
Sub Comm()
On Error Resume Next
With Range("C6")
.AddComment
.Comment.Visible = False
.Select
Selection.Comment.Text Text:=InputBox("Текст комментария")
End With
End Sub
Быть или не быть, вот в чем загвоздка!
Sub Comm()
On Error Resume Next
With Range("C6")
.AddComment
.Comment.Visible = False
.Select
Selection.Comment.Text Text:=InputBox("Текст комментария")
End With
End Sub
RAN, Да, Ваш вариант работает. БОЛЬШОЕ СПАСИБО.
По ходу дела возник еще вопрос.
Например процедура добавления примечания прошла успешно. Если необходимо в уже сущуствующее примечание добавить еще текст (например при составлении отчёта по бизнес-плану за отчётный период). Т.е. в строке прочие расходы суммируется числа по 7-8 позициям, соответственно необходимо занести в примечание какая сумма и что она значит. Не всегда получается это внести за один раз. Иногда приходится возвращаться к этой сумме и ещё что-то добавлять, т.о. необходимо и в примечании делать изменения.
Как это можно осуществить через макрос.
RAN, Да, Ваш вариант работает. БОЛЬШОЕ СПАСИБО.
По ходу дела возник еще вопрос.
Например процедура добавления примечания прошла успешно. Если необходимо в уже сущуствующее примечание добавить еще текст (например при составлении отчёта по бизнес-плану за отчётный период). Т.е. в строке прочие расходы суммируется числа по 7-8 позициям, соответственно необходимо занести в примечание какая сумма и что она значит. Не всегда получается это внести за один раз. Иногда приходится возвращаться к этой сумме и ещё что-то добавлять, т.о. необходимо и в примечании делать изменения.
Как это можно осуществить через макрос.
По ходу дела возник еще вопрос.
Например процедура добавления примечания прошла успешно. Если необходимо в уже сущуствующее примечание добавить еще текст (например при составлении отчёта по бизнес-плану за отчётный период). Т.е. в строке прочие расходы суммируется числа по 7-8 позициям, соответственно необходимо занести в примечание какая сумма и что она значит. Не всегда получается это внести за один раз. Иногда приходится возвращаться к этой сумме и ещё что-то добавлять, т.о. необходимо и в примечании делать изменения.
Как это можно осуществить через макрос.
Заранее спасибо. Автор - Hyperboreus
Дата добавления - 24.04.2013 в 13:55
Есть таблица по платежам. В ячейках определенных столбцов в примечаниях(вкладка Рецензирование -Создать примечание) записывается дополнительная информация по платежу. Например, номер договора, на основании которого был произведен платеж. И теперь необходимо отобрать записи только по определенным договорам. Ячеек несколько сотен, просматривать и выписывать договора из комментариев вручную похоже на одну из разновидностей древнеримских пыток. Однако при помощи VBA сделать это совсем просто.
Синтаксис вызова функции с листа Excel:
=Get_Text_from_Comment( A1 )
A1 - ячейка с примечанием, текст которого необходимо получить. Если комментарий в ячейке отсутствует, то функция вернет пусто.
Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: необходимо скопировать текст кода выше, перейти в редактор VBA( Alt+F11 ) -создать стандартный модуль(Insert -Module) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций, отыскав её в категории Определенные пользователем (User Defined Functions) .
Текст из примечания без автора примечания
Слегка доработанная функция, в которой можно отсечь имя пользователя, создавшего комментарий:
Function Get_Text_from_Comment(rCell As Range) As String Dim sTxt As String On Error Resume Next sTxt = rCell.Comment.Text Get_Text_from_Comment = Mid(sTxt, InStr(sTxt, ":") + 2) End Function
Синтаксис вызова с листа Excel такой же, как и в функции выше. Просто указываете внутри функции ссылку на ячейку.
=Get_Text_from_Comment( A1 )
Код записи текста примечаний в выделенных ячейках
Если текст из примечаний необходимо записать в те же ячейки одним махом и удалить после этого все примечания, можно использовать следующий код:
'--------------------------------------------------------------------------------------- ' Author : The_Prist(Щербаков Дмитрий) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' http://www.excel-vba.ru ' Purpose: Процедура записи текста из примечаний в ячейки выделенного диапазона '--------------------------------------------------------------------------------------- Sub CommentsToCell() Dim sTxt As String, res As String, rc As Range, rr As Range Dim IsDelAuthor As Boolean, IsDelComment As Boolean, IsReplaceCellVal As Boolean 'запрашиваем параметры If MsgBox("Оставлять автора комментария?", vbQuestion + vbYesNo, "www.excel-vba.ru") = vbNo Then IsDelAuthor = True End If If MsgBox("Заменять значение, если в ячейке с комментариями уже есть текст?" & vbNewLine & _ "ДА(Yes) - значения ячеек будут заменены текстом комментариев" & vbNewLine & _ "НЕТ(No) - к имеющимся значениям будет добавлен текст комментария", vbQuestion + vbYesNo, "www.excel-vba.ru") = vbYes Then IsReplaceCellVal = True End If If MsgBox("Удалять комментарии после обработки?", vbQuestion + vbYesNo, "www.excel-vba.ru") = vbYes Then IsDelComment = True End If On Error Resume Next 'получаем в выделенном диапазоне только ячейки с комментариями Set rr = Selection.SpecialCells(xlCellTypeComments) If rr Is Nothing Then MsgBox "В выделенном диапазоне нет ячеек с комментариями", vbCritical, "www.excel-vba.ru" Exit Sub End If On Error GoTo 0 Application.ScreenUpdating = False 'цикл по всем ячейкам с комментариями For Each rc In rr.Cells sTxt = rc.Comment.Text If IsDelAuthor Then res = Mid(sTxt, InStr(sTxt, ":") + 2) Else res = sTxt End If If IsReplaceCellVal Then rc.Value = res Else rc.Value = rc.Value & Chr(10) & res End If Next If IsDelComment Then rr.ClearComments End If Application.ScreenUpdating = True MsgBox "Комментарии записаны", vbCritical, "www.excel-vba.ru" End Sub
Код необходимо так же скопировать и вставить в стандартный модуль(Переходим в редактор VBA( Alt+F11 ) -Insert -Module).
Выделить диапазон ячеек, комментарии из которых необходимо перенести, нажать Alt+F8 и выбрать код CommentsToCell . Код содержит несколько параметров:
Добрый день.
Подскажите, можно ли сделать фильтр, по наличию примечания в ячейке.
Есть столбец, где содержаться значения (числовые и строковые) с наличием примечания.
Можно ли установить фильтр, именно по наличию примечания.
Добрый день.
Подскажите, можно ли сделать фильтр, по наличию примечания в ячейке.
Есть столбец, где содержаться значения (числовые и строковые) с наличием примечания.
Можно ли установить фильтр, именно по наличию примечания. Smoke27
Фильтр вряд ли, если только макросом, а вот выделить ячейки с примечаниями можно F5 -- Выделить -- Примечания --ОК
Фильтр вряд ли, если только макросом, а вот выделить ячейки с примечаниями можно F5 -- Выделить -- Примечания --ОК Pelena
В макросах я вааще никак, как можно через них?
Просто имеются прайсы по 20 тысяч строк, из которых до 5 тысяч с примечаниями, которые нужно отобрать и произвести манипуляции.
В макросах я вааще никак, как можно через них?
Просто имеются прайсы по 20 тысяч строк, из которых до 5 тысяч с примечаниями, которые нужно отобрать и произвести манипуляции. Smoke27
Возможно вам надо только отобразить/скрыть примечания для их визуального восприятия, тогда вкладка Рецензирование -> "Показать или скрыть примечания"(MS Office 2007/2010)
Возможно вам надо только отобразить/скрыть примечания для их визуального восприятия, тогда вкладка Рецензирование -> "Показать или скрыть примечания"(MS Office 2007/2010) igrtsk
а потом фильтруйте по этому столбцу
Кажется то что нужно, спасибо большое, буду сейчас воять, отпишусь потом о результатах
а потом фильтруйте по этому столбцу
Кажется то что нужно, спасибо большое, буду сейчас воять, отпишусь потом о результатах Smoke27
а потом фильтруйте по этому столбцу
Кажется то что нужно, спасибо большое, буду сейчас воять, отпишусь потом о результатах Автор - Smoke27
Дата добавления - 03.03.2014 в 16:06
Только учтите, что в приведённом мною коде есть грабли!
Т.к. объект "Примечание" (Comment) не поддерживает обработку событий, то изменение примечания не вызывает никаких событий в книге, которые могли бы быть обработаны программно.
Поэтому, применив данную UDF, Вы получите замерший "снимок" имевшихся на момент вычисления формулы примечаний.
Но если Вы измените или удалите примечание в ячейке, то в соседней ячейке вычисленное значение не изменится до тех пор пока Вы не переоткроете книгу или не обновите значения в ячейках (например, добавив к каждой спецвставкой "пустышку").
Тут надо бы, конечно, придумать какой-нибудь "костыль" для автоматизации пересчёта формул, но мне всё недосуг.
Только учтите, что в приведённом мною коде есть грабли!
Т.к. объект "Примечание" (Comment) не поддерживает обработку событий, то изменение примечания не вызывает никаких событий в книге, которые могли бы быть обработаны программно.
Поэтому, применив данную UDF, Вы получите замерший "снимок" имевшихся на момент вычисления формулы примечаний.
Но если Вы измените или удалите примечание в ячейке, то в соседней ячейке вычисленное значение не изменится до тех пор пока Вы не переоткроете книгу или не обновите значения в ячейках (например, добавив к каждой спецвставкой "пустышку").
Тут надо бы, конечно, придумать какой-нибудь "костыль" для автоматизации пересчёта формул, но мне всё недосуг. Alex_ST
Тут надо бы, конечно, придумать какой-нибудь "костыль" для автоматизации пересчёта формул, но мне всё недосуг. Автор - Alex_ST
Дата добавления - 03.03.2014 в 16:48
Добрый день!
Есть таблица, в ней существуют разделы. У каждого раздела есть строки, у которых есть примечания.
У каждого раздела примечания разные.
Вопрос: можно по примечаниям выделить строки и скопировать их на отдельный лист?
Добрый день!
Есть таблица, в ней существуют разделы. У каждого раздела есть строки, у которых есть примечания.
У каждого раздела примечания разные.
Вопрос: можно по примечаниям выделить строки и скопировать их на отдельный лист? Гость
Предваряя вопрос "как?" - перебором ячеек, анализом примечаний, копированием строк.
Предваряя вопрос "как?" - перебором ячеек, анализом примечаний, копированием строк. Hugo
Предваряя вопрос "как?" - перебором ячеек, анализом примечаний, копированием строк. Автор - Hugo
Дата добавления - 18.05.2011 в 14:34
Я нашел код, осуществляющий поиск указанного текста во всех примечаниях, но он выдает ошибку
в строках, содержаших Ме. Что можно придумать?
Private Sub SearchTextInComments()
iSearchText$ = "текст"
Я нашел код, осуществляющий поиск указанного текста во всех примечаниях, но он выдает ошибку
в строках, содержаших Ме. Что можно придумать?
Private Sub SearchTextInComments()
iSearchText$ = "текст"
Private Sub SearchTextInComments()
iSearchText$ = "текст"
Да, точно, можно ведь и сразу искать в комментариях.
У меня этот код ошибок не даёт. Поместите его в модуль исследуемого листа.
Да, точно, можно ведь и сразу искать в комментариях.
У меня этот код ошибок не даёт. Поместите его в модуль исследуемого листа. Hugo
У меня с VBA не очень. Подскажите, что и куда нужно добавить в код, чтобы он копировал выбранные строки на отдельный лист?
У меня с VBA не очень. Подскажите, что и куда нужно добавить в код, чтобы он копировал выбранные строки на отдельный лист? Гость
В общем-то ничего особенно много добавлять не пришлось:
Private Sub SearchTextInComments()
Dim iSearchText$: iSearchText$ = "текст"
Dim iCell As Range, i As Long, iAddress$
End With
End Sub
В общем-то ничего особенно много добавлять не пришлось:
Private Sub SearchTextInComments()
Dim iSearchText$: iSearchText$ = "текст"
Dim iCell As Range, i As Long, iAddress$
End With
End Sub
Private Sub SearchTextInComments()
Dim iSearchText$: iSearchText$ = "текст"
Dim iCell As Range, i As Long, iAddress$
End With
End Sub
Чтобы не было ошибки либо, как советовал Игорь, поместите код в модуль листа, либо замените Me не ActiveSheet
Но ведь вам, кажется, нужно было не определённый текст искать, а
Есть таблица, в ней существуют разделы. У каждого раздела есть строки, у которых есть примечания.
У каждого раздела примечания разные.
Вопрос: можно по примечаниям выделить строки и скопировать их на отдельный лист?
Ну так дайте ссылку на файл-пример таблицы.
Не нам же её за вас придумывать. Тем более, что понятия "Раздел" в Экселе не существует и мы можем только гадать, что вы имеете в виду.
Чтобы не было ошибки либо, как советовал Игорь, поместите код в модуль листа, либо замените Me не ActiveSheet
Но ведь вам, кажется, нужно было не определённый текст искать, а
Есть таблица, в ней существуют разделы. У каждого раздела есть строки, у которых есть примечания.
У каждого раздела примечания разные.
Вопрос: можно по примечаниям выделить строки и скопировать их на отдельный лист?
Ну так дайте ссылку на файл-пример таблицы.
Не нам же её за вас придумывать. Тем более, что понятия "Раздел" в Экселе не существует и мы можем только гадать, что вы имеете в виду. Alex_ST
Есть таблица, в ней существуют разделы. У каждого раздела есть строки, у которых есть примечания.
У каждого раздела примечания разные.
Вопрос: можно по примечаниям выделить строки и скопировать их на отдельный лист?
Ну так дайте ссылку на файл-пример таблицы.
Не нам же её за вас придумывать. Тем более, что понятия "Раздел" в Экселе не существует и мы можем только гадать, что вы имеете в виду. Автор - Alex_ST
Дата добавления - 18.05.2011 в 15:54
Спасибо, с ActiveSheet ошибку не выдает, но оказалось в поиске ничего не находит, просто создает пустую книгу. Ссылку на файл выложить не получается .
Спасибо, с ActiveSheet ошибку не выдает, но оказалось в поиске ничего не находит, просто создает пустую книгу. Ссылку на файл выложить не получается . Гость
но ничего не получается.
но ничего не получается.
но ничего не получается.
я нуб! Автор - Нострадамус обыкновенный
Дата добавления - 05.04.2013 в 12:11
Я расшифрую для тех, кто не может туда попасть или это могут стереть.
Я думаю, поиск в примечаниях пригодится не только мне, в связи с этим выложу исходный код кнопки:
Option Compare Text
Sub Find_n_Highlight()
On Error Resume Next: Err.Clear
Dim ra As Range, cell As Range, res, txt$, v, pos&
res = InputBox("Введите наименование организации, которую необходимо найти в календаре", "Поиск текста", "насхульян")
If VarType(res) = vbBoolean Then Exit Sub ' нажата кнопка ОТМЕНА
txt$ = Trim(res): If Len(txt) = 0 Then Exit Sub ' текст не введен, или состоит из пробелов
Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp)) ' диапазон для поиска
Application.ScreenUpdating = False
ra.Font.Color = 0: ra.Font.Bold = 0 ' сброс цветового выделения
Я расшифрую для тех, кто не может туда попасть или это могут стереть.
Я думаю, поиск в примечаниях пригодится не только мне, в связи с этим выложу исходный код кнопки:
Option Compare Text
Sub Find_n_Highlight()
On Error Resume Next: Err.Clear
Dim ra As Range, cell As Range, res, txt$, v, pos&
res = InputBox("Введите наименование организации, которую необходимо найти в календаре", "Поиск текста", "насхульян")
If VarType(res) = vbBoolean Then Exit Sub ' нажата кнопка ОТМЕНА
txt$ = Trim(res): If Len(txt) = 0 Then Exit Sub ' текст не введен, или состоит из пробелов
Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp)) ' диапазон для поиска
Application.ScreenUpdating = False
ra.Font.Color = 0: ra.Font.Bold = 0 ' сброс цветового выделения
Я расшифрую для тех, кто не может туда попасть или это могут стереть.
Я думаю, поиск в примечаниях пригодится не только мне, в связи с этим выложу исходный код кнопки:
Option Compare Text
Sub Find_n_Highlight()
On Error Resume Next: Err.Clear
Dim ra As Range, cell As Range, res, txt$, v, pos&
res = InputBox("Введите наименование организации, которую необходимо найти в календаре", "Поиск текста", "насхульян")
If VarType(res) = vbBoolean Then Exit Sub ' нажата кнопка ОТМЕНА
txt$ = Trim(res): If Len(txt) = 0 Then Exit Sub ' текст не введен, или состоит из пробелов
Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp)) ' диапазон для поиска
Application.ScreenUpdating = False
ra.Font.Color = 0: ra.Font.Bold = 0 ' сброс цветового выделения
Я пытаюсь написать макрос, в котором, если есть ячейка со словом «ИТОГО», он будет вводить тире в ячейку под ней. Например:
В приведенном выше случае я хотел бы поставить тире в ячейку F7 (примечание: может быть любое количество столбцов, поэтому это всегда будет строка 7, но не всегда столбец F).
В настоящее время я использую этот код, но он не работает, и я не могу понять, почему.
Помощь будет оценена. Надеюсь, я не делаю глупостей.
Это будет проходить по всем ячейкам в заданном диапазоне, который вы определяете ("RANGE TO SEARCH") , и добавлять тире в ячейку ниже, используя метод Offset() . В VBA рекомендуется никогда не использовать метод Select .
Это позволит вам динамически добавлять столбцы и автоматически вставлять дефис под любыми столбцами в строке C после 6, содержащей «Итого» без учета регистра. Примечание: если вы пройдете мимо ZZ6, вам нужно будет изменить код, но это должно привести вас туда, куда вам нужно.
Требование:
Найдите ячейку, содержащую слово TOTAL , затем введите прочерк в ячейке под ним.
Решение: В этом решении используется метод Find объекта Range , поскольку кажется целесообразным использовать его вместо грубой силы (цикл For…Next ). Для объяснения и подробностей о методе см. метод Range.Find (Excel)
Реализация:
Для обеспечения гибкости в эту функцию заключен метод Find :
Где:
sWhat : содержит string для поиска
rTrg : range для поиска
Функция возвращает True , если найдено какое-либо совпадение, в противном случае она возвращает False
Кроме того, каждый раз, когда функция находит совпадение, она передает полученный range процедуре Range_Find_Action для выполнения требуемого действия (т. Е. "введите тире в ячейку под ним" ). «Требуемое действие» выделено в отдельную процедуру для обеспечения гибкости и настройки.
Вот как называется функция:
Этот тест ищет "всего", чтобы показать эффект MatchCase:=False . Соответствие можно сделать чувствительным к регистру, изменив его на MatchCase:=True
Читайте также: