Ячейка щелчка события

Я только что создал новый файл и поместил данные (строки от A1 до A10), и я хотел бы знать, как получать данные из ячейки каждый раз, когда вы нажимаете на ячейку A, если она не пуста (пример: когда я нажимаю на третья строка столбца A, чтобы я мог получить ее значение). Я видел метод "Worksheet_SelectionChange", но он не может работать с моим примером, потому что мы должны открыть код файла и поместить в него функцию, и я хочу сделать это непосредственно при создании файла. это мой пример

sub test(name as string)
  sheet.add

  ActiveSheet.name=name
  i=2

  while i < 10 
    cells(i,1)=i
    i=i+i
  Wend
end sub

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

Damian 10.04.2019 13:58
extendoffice.com/documents/excel/…
user2261597 10.04.2019 13:59

Возможно, worksheet_change даже относится к рабочей книге, отличной от рабочей книги с кодом. Однако для этого потребуется, чтобы код знал, что такое вновь созданный wb. Вам нужно будет открыть второй WB, который содержит код

Tim Stack 10.04.2019 14:02

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

mor diop 10.04.2019 14:06

@mordiop, так это новый WS или новый WB, который вы создаете каждый раз?

Tim Stack 10.04.2019 14:06

Я создаю новый лист в своем wb, как указано в моем примере «sheet.add». Метод тестирования создает новый лист каждый раз, когда я его использую.

mor diop 10.04.2019 14:13
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
6
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Событие Worksheet_SelectionChange не обязательно должно находиться в модуле, специфичном для листа. Он также может находиться, например, в модуле class module и важном для данного случая модуле ThisWorkbook (хотя там он называется событием Workbook_SheetSelectionChange).

Если вы всегда хотите запускать событие Workbook_SheetSelectionChange, независимо от в каком листе изменилось выделение, попробуйте следующее

'place in the ThisWorkbook module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

'Do stuff

MsgBox "Changes were made in worksheet: " & Sh.Name, vbInformation

End Sub

Если вы хотите запустить событие только на последней версии WS

1) Вы можете сделать так, чтобы последний сделанный WS всегда был последним в WB

'In a regular module
Sub addnwsheet()
Dim shtname As String

With ThisWorkbook

shtname = "temp" & .Sheets.Count
'add a sheet at the end
.Sheets.Add(after:=.Sheets(.Sheets.Count)).Name = shtname

End With

End Sub

'place in the ThisWorkbook module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Sh.Index = ThisWorkbook.Sheets.Count Then
    'Do stuff

    MsgBox "Selection changed in worksheet: " & Sh.Name, vbInformation
End If

End Sub

2) Более безопасный метод — объявить вновь созданный лист как переменную Global. Они настойчивы и публичны.

'In a regular module
Global nwsht As Sheet

Sub addnwsheet()
Dim shtname As String

With ThisWorkbook

    shtname = "temp" & .Sheets.Count
    'add a sheet at the end
    .Sheets.Add(after:=.Sheets(.Sheets.Count)).Name = shtname
    Set nwsht = .Sheets(shtname)

End With

End Sub

'place in the ThisWorkbook module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Sh = nwsht Then
    'Do stuff

    MsgBox "Selection changed in worksheet: " & Sh.Name, vbInformation
End If

End Sub

РЕДАКТИРОВАТЬ

Если вы хотите указать диапазон, в котором событие должно срабатывать

'place in the ThisWorkbook module
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim r as Range
    Set r = Workbooks(REF).Sheets(REF).Range("D2:D100") 'event will only get triggered by this range

    If Not Intersect(Target, r) Is Nothing Then
        'Do stuff

        MsgBox "Selection changed in worksheet: " & Sh.Name, vbInformation
    End If

    End Sub

Я взял ваш код, и он работает. Но здесь каждое изменение ячейки запускает метод, и я хочу, чтобы он был только в столбце B. Если я нажму на ячейку в столбце B, он запустится. Спасибо. Спасибо.

mor diop 10.04.2019 15:47

Я добавил код, с помощью которого вы можете указать диапазон @mordiop

Tim Stack 10.04.2019 15:57

Другие вопросы по теме