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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2017, 08:41   #1
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию Обработчик события приложения (xlsApp_SheetChange)

Доброго времени суток всем! Прошу помощи.
Задача такая. Необходимо создать функцию в личной книге макросов. Пользователь открывает чистый Эксел и начинает вводить товар, напротив этого товара вводит функцию =PERSONAL.XLSB!slone(E2). Цена подтягивается из другого файла 2.xls с листа price. Это всё реализовано.
Далее нужно, чтобы ячейка с формулой закрасилась красным и рядом появилось значение этой функции.
Вот код функции в модуле персональной книги
Код:
Function slone(s As String, Optional pth As String = "C:\Users\slone\Downloads\2.xls", Optional Sh As String = "price", Optional rng As String = "A:B")
Dim wb As Object, r As Range, x
Set wb = GetObject(pth)
With wb.Sheets(Sh)
Set r = Intersect(.UsedRange, .Range(rng))
End With

s = Replace(s, " ", "")
s = Replace(s, ",", "")
s = Replace(s, "-", "")
s = Replace(s, ".", "")

x = Application.VLookup(s, r, 2, 0)
wb.Close 0
slone = x

End Function
В модуле персональной книги вот этот код
Код:
Private WithEvents xlsApp As Application

Private Sub Workbook_Open()
Set xlsApp = ThisWorkbook.Application
End Sub


Private Sub xlsApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Cells.Count = 1 Then
'Debug.Print Target.Parent.Name
'Debug.Print Target.Formula
If Left(Target.Formula, 21) = "=PERSONAL.XLSB!slone(" Then
Target.Offset(, 1) = Target.Value
Target.Interior.Color = vbRed
End If
End If

End Sub
Обработчик события приложения (xlsApp_SheetChange) отслеживает ввод формулы (UDF), и при срабатывании этой функции, в которой открывается другая книга через getobject - как изменяемая ячейка определяется ячейка той открываемой книги 2.xls, а не та, что на самом деле изменялась.
Файл 2.xls прилагаю.

За 6 лет на форуме можно было бы и запомнить, что код оформляется не в теги цитаты
Модератор
Вложения
Тип файла: xls 2.xls (27.5 Кб, 10 просмотров)

Последний раз редактировалось Аватар; 14.08.2017 в 08:59.
slone2179 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик события nanom1t C++ Builder 1 15.04.2013 01:02
обработчик события Rymbil C# (си шарп) 8 29.10.2012 21:25
Обработчик события BodyZ C# (си шарп) 0 24.10.2012 18:17
Обработчик события yardie Общие вопросы .NET 3 26.03.2011 18:30
Обработчик события... Flash_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 12.03.2007 21:24