Byval target as range что это
Перейти к содержимому

Byval target as range что это

  • автор:

Byval target as range что это

Давайте посмотрим как определить событие выбора определной ячейки. Первое — это надо определить, что вообще что-то выбрали. Для этого создайте книгу. Запустите редактор VBA и щелкните на листе. Для данного листа будет создана функция SelectionChange, если ее нет, то у Вас всегда есть возможность ее выбрать. Теперь впишите код сообщения в функцию, чтобы увидеть, что происходит.

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) MsgBox Target.Address End Sub

У Вас теперь есть возможность щелкать по ячейкам конкретного листа, я еще раз повторяю и вы получите сообщение с адресом ячейки. Сообщение выбора ячейки обрабатывается локально. А что если у нас надо обрабатывать это сообшение с трех листов и желательно вместе. Для этого нужно создать модуль и в нем процедуру обработки. Я пока поместил туда просто вывод информационного окна.

Public Sub Selection_Cell(ByVal Addres As String, ByVal List As String) MsgBox Addres + " " + List End Sub

И соотвественно надо пересылать туда данный с каждого листа.

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Selection_Cell Target.Address, Target.Worksheet.Name End Sub

Вот с этого момента можно вставлять вызов функции Selection_Cell на каждый лист в ответ на реакцию выделения.

Но это еще не все. Дело в том, что передается объект типа RANGE, то есть нет разницы передана одна ячейка или диапазон. Но при выделении диапазона внутрь него может попасть и наша ячейка. Итак, нам надо бы анализировать диапазон. Давайте договоримся, что нам надо обязательно отловить момент выделения ячейки $A$1. Вот на всех листах. У нас для этого все есть. Процедура общая, в которой есть адрес. И реакция на выделение на каждом листе. Смотрим код:

Public Sub Selection_Cell(ByVal Addres As String, ByVal List As String) On Error GoTo Ends Dim Test As Range Dim Find As Range Dim Result As Range Dim x As Integer Set Find = Range("$A$1") Set Test = Range(Addres) Set Result = Intersect(Test, Find) x = Result.Count MsgBox "$A$1" Ends: End Sub

Идея простая. Мы имеем переданный диапазон Test и нужный Find. Как узнать, что один включает другой . Вызовем операцию пересечения Intersect. Результатом будет диапазон, который содержит пересечение. Так вот если искомая нам ячейка в нем есть, то нормально, а если нет, то обращение к Count вызовет ошибку. Этим мы и воспользовались.

Событие Worksheet.Change (Excel)

Происходит при изменении ячеек на листе пользователем или внешней ссылкой.

Синтаксис

expression. Изменение (целевой объект)

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Target (Целевое значение) Обязательный Диапазон Измененный диапазон. Может быть несколько ячеек.

Возвращаемое значение

Nothing

Замечания

Это событие не возникает при изменении ячеек во время пересчета. Используйте событие Calculate для перехвата пересчета листа.

Пример

В следующем примере кода цвет измененных ячеек изменяется на синий.

Private Sub Worksheet_Change(ByVal Target as Range) Target.Font.ColorIndex = 5 End Sub 

В следующем примере кода проверяется, что при изменении значения ячейки измененная ячейка находится в столбце A, а также если измененное значение ячейки больше 100. Если значение больше 100, смежная ячейка в столбце B изменяется на красный цвет.

Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Then ThisRow = Target.Row If Target.Value > 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub 

В следующем примере кода значения в диапазоне A1:A10 задаются в верхнем регистре при вводе данных в ячейку.

Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A10")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub Application.EnableEvents = False 'Set the values to be uppercase Target.Value = UCase(Target.Value) Application.EnableEvents = True End Sub 

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Объект Worksheet (Excel)

Объект Worksheet является членом коллекции Worksheets . Коллекция Worksheets содержит все объекты Worksheet в книге.

Объект Worksheet также является членом коллекции Sheets . Коллекция Листов содержит все листы книги (как листы диаграмм, так и листы).

Пример

Используйте worksheets (index), где index — это номер или имя индекса листа, чтобы вернуть один объект Worksheet . В следующем примере лист скрыт в активной книге.

Worksheets(1).Visible = False 

Номер индекса листа обозначает положение листа на панели вкладок книги. Worksheets(1) — это первый (самый левый) лист в книге, а Worksheets(Worksheets.Count) — последний. Все листы включаются в число индексов, даже если они скрыты.

Имя листа отображается на вкладке листа. Используйте свойство Name , чтобы задать или вернуть имя листа. В следующем примере выполняется защита сценариев на Листе 1.

 Dim strPassword As String strPassword = InputBox ("Enter the password for the worksheet") Worksheets("Sheet1").Protect password:=strPassword, scenarios:=True 

Если лист является активным листом, можно использовать свойство ActiveSheet , чтобы ссылаться на него. В следующем примере используется метод Activate для активации Sheet1, задает ориентацию страницы в альбомный режим, а затем выводит лист.

Worksheets("Sheet1").Activate ActiveSheet.PageSetup.Orientation = xlLandscape ActiveSheet.PrintOut 

В этом примере событие BeforeDoubleClick используется для открытия указанного набора файлов в Блокноте. Чтобы использовать этот пример, лист должен содержать следующие данные:

  • Ячейка A1 должна содержать имена файлов для открытия, разделенные запятой и пробелом.
  • Ячейка D1 должна содержать путь к расположению файлов Блокнота.
  • Ячейка D2 должна содержать путь к расположению программы Блокнота.
  • Ячейка D3 должна содержать расширение файла без точки для файлов Блокнота (txt).

При двойном щелчке ячейки A1 файлы, указанные в ячейке A1, открываются в Блокноте.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Define your variables. Dim sFile As String, sPath As String, sTxt As String, sExe As String, sSfx As String 'If you did not double-click on A1, then exit the function. If Target.Address <> "$A$1" Then Exit Sub 'If you did double-click on A1, then override the default double-click behavior with this function. Cancel = True 'Set the path to the files, the path to Notepad, the file extension of the files, and the names of the files, 'based on the information on the worksheet. sPath = Range("D1").Value sExe = Range("D2").Value sSfx = Range("D3").Value sFile = Range("A1").Value 'Remove the spaces between the file names. sFile = WorksheetFunction.Substitute(sFile, " ", "") 'Go through each file in the list (separated by commas) and 'create the path, call the executable, and move on to the next comma. Do While InStr(sFile, ",") sTxt = sPath & "\" & Left(sFile, InStr(sFile, ",") - 1) & "." & sSfx If Dir(sTxt) <> "" Then Shell sExe & " " & sTxt, vbNormalFocus sFile = Right(sFile, Len(sFile) - InStr(sFile, ",")) Loop 'Finish off the last file name in the list sTxt = sPath & "\" & sFile & "." & sSfx If Dir(sTxt) <> "" Then Shell sExe & " " & sTxt, vbNormalNoFocus End Sub 

События

  • Activate
  • BeforeDelete
  • BeforeDoubleClick
  • BeforeRightClick
  • Calculate
  • Change
  • Deactivate
  • FollowHyperlink
  • LensGalleryRenderComplete
  • PivotTableAfterValueChange
  • PivotTableBeforeAllocateChanges
  • PivotTableBeforeCommitChanges
  • PivotTableBeforeDiscardChanges
  • PivotTableChangeSync
  • PivotTableUpdate
  • SelectionChange
  • TableUpdate

Методы

Свойства

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Отправить и просмотреть отзыв по

VBA-Урок 11.2. События рабочего листа (Worksheet Events)

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

Worksheet_SelectionChange (Открытие книги)

Чтобы выполнить инструкции, основанные на событиях для отдельного листа, выберите лист в редакторе, а затем Worksheet :

Событие SelectionChange будет добавлено по умолчанию. Это событие выполняется когда бы не изменялось содержание диапазона:

Private Sub Worksheet_SelectionChange (ByVal Target As Range) End Sub

Например, следующий код добавляет цвета заливки одного или более выбранных ячеек и автоматически удаляет цвет заливки от предыдущего выбранного диапазона, когда данный диапазон меняется:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Static previous_selection As String If previous_selection <> "" Then 'Removing background color from previous selection : Range(previous_selection).Interior.ColorIndex = xlColorIndexNone End If 'Adding background color to current selection : Target.Interior.Color = RGB(181, 244, 0) 'Saving the address of the current selection : previous_selection = Target.Address End Sub

Worksheet_Activate (Событие активации листа)

Это событие возникает при активации рабочего листа

Private Sub Worksheet_Activate () End Sub

Worksheet_Deactivate (Событие деактивации листа)

Это событие возникает при активации другого рабочего листа

Private Sub Worksheet_Deactivate () End Sub

Worksheet_BeforeDoubleClick (Событие двойного щелчка по ячейке)

Это событие возникает при двойном щелчке на ячейке рабочего листа:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) End Sub

Worksheet_BeforeRightClick (Событие перед правым кликом)

Это событие возникает перед самым кликом правой кнопки мыши по рабочему листу

Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean) End Sub

Worksheet_Calculate (Событие перерасчета листа)

Это событие возникает каждый раз, когда рассчитываются или пересчитываются данные на рабочем листе

Private Sub Worksheet_Calculate () End Sub

Worksheet_Change (Событие изменения содержимого ячейки)

Это событие возникает каждый раз, когда изменяется содержимое ячеек на заданном листе:

Private Sub Worksheet_Change(ByVal Target As Range) End Sub

Worksheet_FollowHyperlink (Событие нажатия на ссылку)

Это событие возникает при нажатии на ссылку (гипертекст)

Private Sub Worksheet_FollowHyperlink (ByVal Target As Hyperlink) End Sub

Temporarily deactivate all events (Временное отключение всех событий)

Чтобы выполнять код без каких-либо событий, вставьте его между двумя строчками такого кода:

Application.EnableEvents = False '=> отключение событий "Инструкции Application.EnableEvents = True '=> повторное включение событий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *