VBA Excel: получить адрес ячейки, на которую нажали кнопку, в другой книге - PullRequest
1 голос
/ 05 марта 2020

У меня есть файл Excel A с макросом, и я должен получить адрес ячейки в другом файле Excel, нажав на него пользователем.

Макрос выглядит следующим образом.

В Классе :

Public WithEvents appevent As Application

Private Sub appevent_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
ClickedCell = ActiveCell.Address
End Sub

В Модуле

Sub ClickedCellSub()
Dim WbA As Variant, WbB As Variant
WbA = ThisWorkbook.Name
WbB = "B.xlsx"
MsgBox "Please double click on the Assembly SS 00 you want to compare"
Set myobject.appevent = Application
Workbooks(WbB).Sheets(1).Activate
Set myobject.appevent = Nothing
MsgBox ClickedCell
Workbooks(WbA).Activate
End Sub

Проблема в том, что макрос не дождитесь события DoubleClick на другом листе Excel и перейдите к концу.

Как я могу остановить макрос, пока событие не произойдет?

Заранее большое спасибо!

Ответы [ 3 ]

0 голосов
/ 09 марта 2020

Я изменил код. В модуле:

enter Option Explicit
Private mobjApplication As clsApplication
Global ClickedCell As String

Sub Vergleichen()
Dim StruktBer As Variant        


StruktBer = Application.GetOpenFilename(, , "Strukturbericht öffnen")                       '####Name der Datei aus der Strukturberich

Set mobjApplication = New clsApplication
Workbooks.Open StruktBer

MsgBox "Bitte die Sachnummer der Strukturstufe '00' anklicken die man vergleichen möchte"

End Sub

Sub GOFURTHER

В классе:

Option Explicit

Private WithEvents mobjApplication As Application

Private Sub Class_Initialize()
Set mobjApplication = Application
End Sub

Private Sub mobjApplication_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ClickedCell = Target.Address
    Set mobjApplication = Nothing
    Call GOFURTHER

End Sub

Макрос останавливается до тех пор, пока пользователь не нажмет на другую таблицу Excel. Есть ли способ не выйти из первого саба и остаться в первом?

0 голосов
/ 09 марта 2020

Почему бы просто не использовать InputBox?
https://docs.microsoft.com/en-us/office/vba/api/excel.application.inputbox
В своем приглашении вы просите пользователя выбрать диапазон в соответствующем документе, и все.

0 голосов
/ 05 марта 2020

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

В классе используйте следующее:

Private WithEvents wb As Excel.Workbook
Private rng As Excel.Range

Public Event evtCellClicked(rngClicked As Excel.Range)
Public Event evtCellDoubleClicked(rngDoubleCliecked As Excel.Range)

Public Sub init(wbInput As Excel.Workbook)
    Set wb = wbInput
End Sub

Public Property Get CellClicked() As Excel.Range
    CellClicked = rng
End Property

Private Sub wb_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Set rng = Target
    RaiseEvent evtCellClicked(Target)
End Sub

Private Sub wb_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Set rng = Target
    RaiseEvent evtCellClicked(Target)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...