нужна доработка макроса, чтобы он отвечал следующим критериям: В ячейках в диапазоне F5:F150 указываются даты в формате dd.mm.yy hh:mm. что нужно: a) При изменении значения в любой из ячейке указанного диапазона требуется сохранять предыдущее значение (если оно было) в offset 0, 7 cell. b) Если ячейка (строка) удаляется с рабочего листа, то всю историю изменений в offset 0,7 следует очищать.
Бюджет = 500 руб.
код из примеров, но сохраняет историю изменений в комментарии к ячейке и не обнуляет значение offset 0, 7 после удаления соответствующей ячейки из диапазона F5:F150 или строки, включающей в себя в этот диапазон.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NewCellValue$, OldComment$
Dim cell As Range
'если ячейка не в отслеживаемом диапазоне, то выходим
If Intersect(Target, Range("F5:F150")) Is Nothing Then Exit Sub
'перебираем все ячейки в измененной области
For Each cell In Intersect(Target, Range("F5:F150"))
If IsEmpty(cell) Then
NewCellValue = "Ячейка очищена" 'фиксируем очистку ячейки
Else
NewCellValue = Format(cell, "dd.mm.yyyy hh:mm") 'или ее содержимое
End If
On Error Resume Next
With cell.Offset(rowOffset:=0, columnOffset:=7)
OldComment = .Comment.Text & Chr(10)
.Comment.Delete 'удаляем старое примечание (если было)
.AddComment 'добавляем новое и вводим в него текст
.Comment.Text Text:=OldComment & Application.UserName & " " & _
Format(Now, "dd.mm.yyyy hh:mm") & " : " & NewCellValue
.Comment.Shape.TextFrame.AutoSize = True 'делаем автоподбор размера
.Comment.Shape.TextFrame.Characters.Font.Size = 8
End With
Next cell
End Sub
Использование функции переноса данных с одного листа на другой (VBA) в shared workbook, Перенос строки на другой лист с последующим удалением с листа-донора
Возможно тема поднималась ранее (не смог найти, к своему сожалению), но попробую спросить: существуют ли какие-нибудь ограничения на макрокоманды в книгах с общим доступом?
При выполнении данного кода в книге - происходит корректный перенос (копирование с листа "info_list" на "лист1" выделенного в Listbox1 диапазона). Однако, как только книга приобретает статус расшаренной для общего доступа, при выборе последнего в списке listbox1 значения происходит ошибка и на лист1 переносятся все записи (и выбранные и не выбранные, включая заголовки из листа "info_list").
Объявление переменных, к сожалению не помогло. Прошу вашей помощи.
Код
Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = Me.ListBox1.ListCount - 1 To 0 Step -1
If Me.ListBox1.Selected(i) Then
j = j + 1
Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Copy Sheets("Лист1").Range("A" & Rows.Count).End(xlUp).Offset(1)
Sheets("Info_list").Range("A" & i + 2).Resize(1, 7).Delete
End If
Next i
LoadListBox
MsgBox "'OK'", vbInformation
End With
End Sub
Вызов функции "обновить файл" через VBA-код, Процедура / команда эквивалентная нажатию на кнопку "Обновить файл" при работе с книгой общего пользования
Прошу Вашей помощи в вопросе вызова команды эквивалентной той, что запускается по нажатию на кнопку "Обновить файл" при работе в книге с открытым общим доступом. Суть использования: избежать перезаписывания данных через UserForm в одинаковый диапазон рабочего листа со стороны нескольких пользователей, в один момент времени.
P.S. Конечно, соглашусь с Вами, что excel для таких вещей, как замена access и sql-server - не годен, однако, жизнь заставила...
Прошу оказать помощь с настройкой функционала по управлению данными рабочего листа через userform.
На листе существуют записи о входящих запросах. Требуется помощь с программированием кнопки Commandbutton2, чтобы по её нажатию соответствующей (выбранной в листбокс1) записи присваивался записи в столбце "Текущий статус" (D) "Исполнено".
Код на удаление (для модификации под вышеописанный вопрос)
Код
Private Sub CommandButton2_Click()
Dim i As Long, DelData As String, k As String, k1 As Long, DelStr As String, iLastRow As Long, iLastCol As Long
Dim delRange As Range
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
DelStr = DelStr & ListBox1.List(i, 0) & vbCrLf
If delRange Is Nothing Then
Set delRange = listBoxRange.Rows(i + 1)
Else
Set delRange = Union(delRange, listBoxRange.Rows(i + 1))
End If
End If
Next i
delRange.EntireRow.Delete
UserForm_Initialize
MsgBox "Запрос успешно обработан - " & vbLf & DelStr, vbInformation
End Sub
Существует всем известный код, но имеет один недостаток: при наличии повторяющихся значений в диапазоне B:B - все они будут переданы в объектную переменную .EmailAddr и, соответственно в строке получателей письма получится обширное загромождение одинаковых (при множестве дубликатов из диапазона B:B) значений.
Знаю, что можно воспользоваться свойством uniq, при спец.вставке - подскажите, пожалуйста, как будет выглядеть оформленный код.
Спасибо, заранее, за помощь
Код
Sub SendEmail()
'Uses late binding
Dim OutlookApp As Object
Dim MItem As Object
Dim cell As Range
Dim Subj As String
Dim EmailAddr As String
Dim Recipient As String
Dim Bonus As String
Dim Msg As String
'Create Outlook object
Set OutlookApp = CreateObject("Outlook.Application")
'Loop through the rows
For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
If cell.Value Like "*@*" Then
'Get the data
Subj = "Your Annual Bonus"
Recipient = cell.Offset(0, -1).Value
EmailAddr = cell.Value
Bonus = Format(cell.Offset(0, 1).Value, "$0,000.")
'Compose message
Msg = "Dear " & Recipient & vbCrLf & vbCrLf
Msg = Msg & "I am pleased to inform you that your annual bonus is "
Msg = Msg & Bonus & vbCrLf & vbCrLf
Msg = Msg & "William Rose" & vbCrLf
Msg = Msg & "President"
'Create Mail Item and send it
Set MItem = OutlookApp.CreateItem(0) 'olMailItem
With MItem
.To = EmailAddr
.Subject = Subj
.Body = Msg
'.Send
.Save 'to Drafts folder
End With
End If
Next
Set OutlookApp = Nothing
End Sub
Коллеги, всем привет Как присвоить переменной "sTO (адрес получателей письма) динамический диапазон?
Ниже код
Код
Option Explicit
Sub Send_Mail()
Dim objOutlookApp As Object, objMail As Object
Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
Application.ScreenUpdating = False
On Error Resume Next
Set objOutlookApp = CreateObject("Outlook.Application")
objOutlookApp.Session.Logon
Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение
'если не получилось создать приложение или экземпляр сообщения - выходим
If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
sTo = "AddressTo@mail.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value)
sSubject = "Автоотправка" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value)
sBody = "Привет от Excel-VBA" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
sAttachment = "C:/Temp/Книга1.xls" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)
'создаем сообщение
With objMail
.To = sTo 'адрес получателя
.Subject = sSubject 'тема сообщения
.Body = sBody 'текст сообщения
.Attachments.Add sAttachment
.Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра
End With
exit_:
Set objOutlookApp = Nothing: Set objMail = Nothing
Application.ScreenUpdating = True
End Sub
Коллеги, Имеется компания в которой существует отдел А и подразделения Б, В, Г, Д
Отдел А осуществляет обработку запросов, направляемых со стороны вышеуказанных подразделений. Все взаимодействие осуществляется через outlook.
Раз в день один из сотрудников заносит в таблицу информацию по направленным запросам (подразделение инициатор, время, тип запроса и соответственно время ответа на данный запрос со стороны сотрудника отдела А). Мы хотим чтобы данные подтягивались без участия сотрудника, заносящего данные вручную в такую таблицу. Это реально организовать? В какой срок и стоимость выйдет такая работа? Возможно в связке outlook + excel - без разницы, но знающие люди говорят, что это должен быть mssql + какой-нибудь клиент.
Требуется решать следующую задачу: В компании необходимо внедрить систему электронного документооборота (иметь возможность выгружать сообщения из outlook в excel в нужном формате для дальнейшего построения управленческой отчётности). Пример: поступает заказ на почтовый ящик (группа), исполнитель обрабатывает заказ и отвечает на группу о готовности. Далее, эти данные прогружаются автоматически, в готовый для построения сводных таблиц формат и данные тянутся в дешборд. В принципе это реализовано за тем лишь исключением, что отсутствует макрос, понимающий что определённый ответ относится к определённому запросу, направленному ранее на почтовую группу и возможность формировать готовые данные для сводных таблиц.
Это реально в связке excel + outlook или лучше сразу делать под mssql + веб-клиент?
Прошу оказать содействие в следующем вопросе Имеется форма пользователя, на которой устанавливается имя, дата, город Требуется добавить возможность формирования гиперссылки во время заполнения вышеописанных данных и, после нажатия кнопки "внести запись", подобные данные переносились на рабочий лист Excel.
Во всех тонкостях кода разобрался, кроме генерации гиперссылки и последующим размещением её на рабочий лист после нажатия условной кнопки "внести запись".
Код
Private Sub CommandButton16_Click() Dim wb As Workbook
Application.Dialogs(xlDialogInsertHyperlink).Show
По сути вопроса: как сделать привязку гиперссылки к конкретному диапазону +1?
Мне нужен человек с глубоким пониманием excel и принципов работы с данными.
В идеале разобрать кейс по сличению двух массивов данных (понять, какие данные содержаться в одном диапазоне, а каких нет). Вопросы по powerpivot Думаю, пару часов на это дело хватит. Цена договорная. ,
Ознакомился с темой, представленной на сайте: http://www.planetaexcel.ru/techniques/8/131/ И возник вопрос: каким образом сгруппировать подмножества из списка "Сыры" в соседний столбец (как это показано на прилагаемом скриншоте)?
Доброго здоровьеца, коллеги! Прошу оказать содействие в избитом вопросе сравнения двух диапазонов данных. Имеется два массива данных: Массив номер один: А1:B150 A1:A150 - записи формата: номера телефонов 8(956)-ххх-хх-хх B1:B150 - названия контор: ООО Рога и Копыта / ИП Выхлуев и т.д.
Второй массив содержит больше записей (строк), однако нам известно, что записи из массива номер один - точно содержатся в массиве номер два, плюс, надо убедиться, что они не перепутаны относительно массива номер один (т.е. записи соответствуют массиву номер один, либо-же не соответствуют).
Принял в работу всеми любимую функцию ВПР. Цепляю номер телефона (искомый элемент) из массива номер один, и начинаю поиск по второму столбцу второго массива. А в ответ #Н/Д...
Поиск по форуму натолкнул на несколько мыслей =ИНДЕКС(Таблица1[июл.12];ПОИСКПОЗ("8(956)-ххх-хх-хх";Таблица2[Статья];0)) Вот, как нибудь, с помощью данной формулы попробовать заменить впр?
Столкнулся сегодня со следующей проблемой: При попытке запустить форму через внедренную на рабочий лист commandbutton - событие не происходит (т.е. нельзя нажать кнопку). Аналогично, при попытке вставить другой элемент active-x - выдает сообщение с текстом: "Вставка объекта неосуществима",
Переустановка MS Office, с чисткой реестра не приносят положительных результатов. Вчера переустанавливал систему по этой причине. Подозреваю, что виноваты обновления (Винда 7 - домашняя базовая - лицензия, Офис для дома и учебы 2010 - лицензия). Подозреваю, что дело в кривом обновлении. Ибо в настройках безопасности все отключено. Иных причин не усматриваю.
Очень прошу оказать содейтствие т.к. иных способов решения проблемы, как переустановкой винды не имею. Спасибо