Xin code Addin luôn hiển thị Cell(1,1) khi Sheet được gọi Active

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
709
Được thích
90
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Tình hình là trong workbook của em có gần 100 Sheet, mỗi lần di duyển giữa các Sheet lại mất công di chuyển thanh Scrollbar, em có viết code trong file như vậy thì chạy ok mặc dù không hiểu lắm
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        ActiveSheet.Cells(1, 1).Activate
End Sub
Do sử dụng nhiều em muốn làm 1 addin để khỏi chèn code vào mỗi file nhờ các anh sửa giúp sao cho ActiveWorkbook để hoạt động được với ạ
Cám ơn anh chị nhiều!
 
Tình hình là trong workbook của em có gần 100 Sheet, mỗi lần di duyển giữa các Sheet lại mất công di chuyển thanh Scrollbar, em có viết code trong file như vậy thì chạy ok mặc dù không hiểu lắm
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        ActiveSheet.Cells(1, 1).Activate
End Sub
Do sử dụng nhiều em muốn làm 1 addin để khỏi chèn code vào mỗi file nhờ các anh sửa giúp sao cho ActiveWorkbook để hoạt động được với ạ
Cám ơn anh chị nhiều!

thì bạn đặt code trên vào file 100 she et đó là được rồi, sao lại cần add ins nữa làm gì?
 
Upvote 0
thì bạn đặt code trên vào file 100 she et đó là được rồi, sao lại cần add ins nữa làm gì?
Mình có rất nhiều file như thế, giờ chỉ việc chèn thêm đoạn code vào addin để không phải file nào cũng cần chèn code trên mà
 
Upvote 0
Mình có rất nhiều file như thế, giờ chỉ việc chèn thêm đoạn code vào addin để không phải file nào cũng cần chèn code trên mà

Khó đấy vì đây liên quan đến even (sự kiện ) của she et,

Nên đặt addins, thường ta phải gán sub cho phím tắt gì đó , khi cần dùng chạy thì bấm phím tắt, với trường hợp đó, thì bài của bạn chỉ cần bấm

Ctrl+Home là đã về đầu tiên rồi, nên tôi nghĩ chịu khó nhét code trên vào đi 1 lần dùng cho nhiều lần
 
Upvote 0
Upvote 0
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    [COLOR=#ff0000]Sh[/COLOR].Cells(1, 1).Select
End Sub
Cái này có hiệu lực với mọi sheet, đâu cần đặt trong từng sheet.

Còn muốn addin thì tạo class:
Mã:
Dim WithEvents MyWorkbook As Application
 
Public Sub Class_Initialize()
    If MyWorkbook Is Nothing Then
        Set MyWorkbook = Application
    End If
End Sub
 
Public Sub Class_Terminate()
    Set MyWorkbook = Nothing
End Sub
 
Private Sub MyWorkbook_SheetActivate(ByVal Sh As Object)
    Sh.Cells(1,1).Select
End sub

p/s: lỗi trong #1 là thay vì ActiveSheet bạn phải dùng Sh
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    [COLOR=#ff0000]Sh[/COLOR].Cells(1, 1).Select
End Sub
Cái này có hiệu lực với mọi sheet, đâu cần đặt trong từng sheet.

Còn muốn addin thì tạo class:
Mã:
Dim WithEvents MyWorkbook As Application
 
Public Sub Class_Initialize()
    If MyWorkbook Is Nothing Then
        Set MyWorkbook = Application
    End If
End Sub
 
Public Sub Class_Terminate()
    Set MyWorkbook = Nothing
End Sub
 
Private Sub MyWorkbook_SheetActivate(ByVal Sh As Object)
    Sh.Cells(1,1).Select
End sub

p/s: lỗi trong #1 là thay vì ActiveSheet bạn phải dùng Sh
không chạy được anh ạ, nhờ anh xem giúp em với
 
Upvote 0
không chạy được anh ạ, nhờ anh xem giúp em với
1/ phải khai báo một đối tượng thuộc class MyEvent
Mã:
Private ObjEvent As New MyEvent
2/ phải kích hoạt thì nó mới chạy chứ
Mã:
ObjEvent.Class_Initialize
(xem file đính kèm)
p/s: khỏi cần lưu dạng addin, cứ file này dùng được rồi. muốn dùng thì click [Run], không muốn dùng nữa thì click [Stop].
 

File đính kèm

  • SelectA1.xlsm
    22 KB · Đọc: 3
Upvote 0
1/ phải khai báo một đối tượng thuộc class MyEvent
Mã:
Private ObjEvent As New MyEvent
2/ phải kích hoạt thì nó mới chạy chứ
Mã:
ObjEvent.Class_Initialize
(xem file đính kèm)
p/s: khỏi cần lưu dạng addin, cứ file này dùng được rồi. muốn dùng thì click [Run], không muốn dùng nữa thì click [Stop].

Code căn bản chỉ nhiêu đó là đủ, nhưng để tạo thành 1 AddIn tiện dụng thì còn phải "màu mè" nhiều
Tôi làm như sau:
- Khi AddIn được kích hoạt, nó sẽ tạo ra 1 ToolBar
- Trên toolbar sẽ có 1 nút để kích hoạt sự kiện đồng thời cũng có thể tắt sự kiện (chỉ với cái nút này)
- Toàn bộ code:
1> Chèn 1 Class Module, đặt tên là cls_Events, với code:
Mã:
Public WithEvents ExlApp As Application
Private Sub Class_Initialize()
  Set ExlApp = Application
End Sub
Private Sub Class_Terminate()
  Set ExlApp = Nothing
End Sub
Private Sub ExlApp_SheetActivate(ByVal Sh As Object)
  Sh.Range("A1").Activate
End Sub
Private Sub ExlApp_WorkbookActivate(ByVal Wb As Workbook)
  Wb.ActiveSheet.Range("A1").Activate
End Sub
2> Chèn 1 Module, đặt tên là mod_Reg, với code:
Mã:
Dim ExlObj As cls_Events
Private Sub Event_Start()
  Dim cBar As CommandBar
  Set cBar = Application.CommandBars("Event Control")
  If ExlObj Is Nothing Then Set ExlObj = New cls_Events
  ActiveSheet.Range("A1").Activate
  With cBar.Controls("Start Event")
    .Caption = "Stop Event"
    .OnAction = "mod_Reg.Event_Stop"
    .FaceId = 185
  End With
End Sub
Private Sub Event_Stop()
  Dim cBar As CommandBar
  Set cBar = Application.CommandBars("Event Control")
  Set ExlObj = Nothing
  With cBar.Controls("Stop Event")
    .Caption = "Start Event"
    .OnAction = "mod_Reg.Event_Start"
    .FaceId = 186
  End With
End Sub
3> Chèn thêm 1 Module nữa, đặt tên là mod_CBar, với code:
Mã:
Private Sub Auto_Open()
  BuildBar
End Sub
Private Sub Auto_Close()
  DelBar
End Sub
Private Sub BuildBar()
  Dim cBar As CommandBar
  DelBar
  Set cBar = Application.CommandBars.Add("Event Control")
  With cBar
    .Position = msoBarTop
    .Visible = True
    With .Controls.Add(msoControlButton)
      .Caption = "Start Event"
      .Style = msoButtonIconAndCaption
      .OnAction = "mod_Reg.Event_Start"
      .FaceId = 186
    End With
  End With
End Sub
Private Sub DelBar()
  On Error Resume Next
  Application.CommandBars("Event Control").Delete
End Sub
Vậy là xong! Hãy save file thành AddIn với tên tùy ý. Gọi AddIn lên và tận hưởng thành quả
Ẹc... Ẹc...
-----------------------------
Lưu ý:
1> Trên Excel 2007 hoặc 2010, Toolbar sẽ được hiển thị trên Tab có tên là Add-Ins

Capture1.JPG

Capture2.JPG



























1> Nếu code được lưu thành xla và mở trên Excel 2003, Toolbar sẽ được hiển thị trên 1 thanh riêng

Capture3.JPG
















Capture4.JPG
 

File đính kèm

  • GoHome.xlam
    18.1 KB · Đọc: 8
  • Go Home.xlsm
    18.6 KB · Đọc: 12
Upvote 0
Code căn bản chỉ nhiêu đó là đủ, nhưng để tạo thành 1 AddIn tiện dụng thì còn phải "màu mè" nhiều
Tôi làm như sau:
- Khi AddIn được kích hoạt, nó sẽ tạo ra 1 ToolBar
- Trên toolbar sẽ có 1 nút để kích hoạt sự kiện đồng thời cũng có thể tắt sự kiện (chỉ với cái nút này)
Anh cho hỏi có cách nào tự động luôn không cần click vào Toolbar không anh
 
Upvote 0
Anh cho hỏi có cách nào tự động luôn không cần click vào Toolbar không anh

Đoạn:
Mã:
Private Sub Auto_Open()
  BuildBar
End Sub
Sửa thành:
Mã:
Private Sub Auto_Open()
  BuildBar
  [COLOR=#ff0000]Application.Run "mod_Reg.Event_Start"[/COLOR]
End Sub
Thì nó sẽ tự động liền
Tôi thì không khoái cái vụ tự động này tí nào, bởi vì muốn chạy hay không phải do tôi quyết định. "Tự ý chạy" sẽ rất nhiều người không thích
 
Upvote 0
Web KT
Back
Top Bottom