2013-07-24 2 views
1

사용자가 "새로 고침"/ "새로 고침"버튼을 클릭하면 Excel에서 통합 문서의 각 (또는 선택된) QueryTable에 대해 새로 고침 메서드를 호출하는 것처럼 보입니다. 그러나 QueryTable에 대한 BeforeRefresh 및 AfterRefresh 이벤트를 수신하는 것은 모두 이후에 작업을 수행해야하기 때문에 여기에서 도움이되지 않습니다. 선택한 QueryTables가 모두 업데이트 된 후 통합 문서의 QueryTables가 업데이트됩니다.Excel에서 이벤트 새로 고침 수신

이 방법이 있습니까? 어떻게 든 새로 고침 버튼을 마우스로 클릭하는 것을들을 수 있습니까?

답변

0

내가 VSTO를 사용하지 않는하지만 조사 할 것 :

  • AfterRefresh 이벤트 0
  • 로 설정 전역 변수 (또는 통합 문서 속성) 만들기 호출 절차
  • 를이 절차는를 증가 카운터
  • 카운터가 총 QueryTable 수 (또는 선택한 총 수)에 도달하면 카운터를 0으로 재설정하고 카운터를 0으로 재설정하십시오.

매번 Success 인수를 확인하여 선택한 QT가 모두 성공적으로 업데이트 된 경우에만 코드가 실행될 수 있습니다.

1

사실 내가 이것을 처음 의도했던 방식입니다. 그러나 여기에는 문제가 있습니다. QueryTables의 총 수는 10이라고 가정하자. 그리고 사용자가 하나의 QueryTable을 선택한 다음 "모두 새로 고침"을 눌렀다 고 가정 해 봅시다. 그래서, 제 알고리즘은 선택된 QueryTable의 수를 확인합니다. 결과적으로 1 번의 새로 고침만으로 계산이 시작됩니다.

한편 나는 리본에서 "새로 고침"버튼에 액세스하려고했습니다. 그러나 그것은 효과가 없었습니다. 내 코드는 아무것도하지 않는 몇 가지 이유 ... 들어

Public Class ThisAddIn 
    Private Sub ThisAddIn_Startup() Handles Me.Startup 
     AddHandler Globals.ThisAddIn.Application.WorkbookActivate, AddressOf OnWorkbookOpened 
    End Sub 

    Private refrBtn As Office.CommandBarButton 

    Private Sub OnClick(ByVal Ctrl As Office.CommandBarButton, _ 
        ByRef CancelDefault As Boolean) 
     MsgBox("PLS WORK!") 
    End Sub 

    Private Sub OnWorkbookOpened(wb As Excel.Workbook) 
     Try 
     refrBtn = CType(wb.Application.CommandBars.FindControl(Id:=459), Office.CommandBarButton) 
     AddHandler refrBtn.Click, AddressOf OnClick 
     Catch ex As Exception 
     MsgBox(ex.Message) 
     MsgBox(ex.GetType) 
     MsgBox(ex.StackTrace.ToString) 
     End Try 
    End Sub 
End Class 

편집 : 내 로그인 데이터를 잊고, 그래서 새 계정

을 만들었습니다
관련 문제