Tạo công cụ trợ giúp Help cho File của bạn

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi handung107, 1 Tháng tám 2005.

4,092 lượt xem

  1. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Các bạn sẽ thích thú, nếu sử dụng một File nào đó, có sự hướng dẫn kịp thời của người thiết kế File, vì vậy, nếu bạn là người thiết kế, chắc ha73n bạn cũng từng nghĩ đến điều này.
    Cách đơn giản nhất là tạo một Worksheet hướng dẫn và cho những đường Link đến Sheet này, hoặc những Button để mở Sheet Hướng dẫn, hoặc tạo Menu...Cách này, hầu như ai cũng biết.
    Trên diễn đàn, Levanduyet đã đề cập vấn đề này trong bài "Thủ thuật Excel". Cũng như bài Tạo Menu, có thể các bạn bị choáng ngợp bởi những đoạn Code VBA. Tôi sẽ soạn lại cho các bạn dễ thực hiện những đoạn Code đó, kèm File hướng dẫn, hy vọng các bạn sẽ thích thú với đề tài này

    Trích bài Levanduyet :

    Như vậy, tôi sẽ tạo 1 Textbox bằng cách Insert / AutoShape. Vẽ AutoShape xong, bạn AddText, các bước này, tôi sẽ không đề cập. Riêng việc đặt tên cho TextBox, bạn hãy dùng NameBox, ở bên trái thanh Formula, để đặt tên là HelpText. Bạn dùng thanh Control ToolBox để chọn nút Button, vẽ lên Worksheet, để đặt tên cho hút, cũng trên thanh Control ToolBox, bạn Click vào nút Properties, tại đây, phần Name, bạn đặt là ToggleHelp, phần Caption, bạn đặt tên Help hay Hướng dẫn. DoubleClick nút Button, vào cưa sổ VBA, bạn chép nguyên đoạn Code ở trên vào. Bây giờ, bạn có thể thử, khi bạn Click vào nút Help này, một TextBox cùng với sự hướng dẫn người dùng sẽ hiện ra kịp thời. Chúc bạn thành công
     
    #1
  2. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Sử dụng Label để thể hiện thông tin trợ giúp

    Chúng ta qua một kiểu thiết kế khác, cũng như bài Menu, các bạn hãy soạn phần hướng dẫn của mình trong một Sheet riêng, đặt tên là "HelpSheet". Chúng ta sẽ dùng 2 cột : cột A để ghi chủ đề cần hướng dẫn, cột B các bạn ghi những điều hướng dẫn cho chủ đề đó.
    Các bạn hãy vào cửa sổ VBA, bạn Insert /UserForm để có một Form mới. Bạn hãy vào View để gọi Properties Window ra. Các bạn dùng công cụ Label vẽ lên Form 2 Label : một đặt tên là LabelTopic, một đặt tên là LabelText. Sau đó, dùng công cụ SpinButton và Button vẽ lên Form 1 SpinButton và Button, đặt tên cho nút này là CancelButton

    Bạn chép đoạn mã này vào phần Code của Form. Chúng ta Insert / Module để tạo thủ tục mở Form ra ;

    Sub MoForm()
    UserForm1.Show
    End Sub

    Bây giờ, bạn quay lại Worksheet, và tạo nút Button để mở Form này nhé
     
    #2
  3. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Sử dụng DropDown control để chọn chủ đề của thông tin trợ giúp

    Đoạn trên nói khá kỹ : chúng ta cần 1 Form có 1 Frame, Label được đặt trong Frame, một ComboBox, 3 Button. Cách đặt tên chúng ta đã nói ở trên, các bạn chú ý đặt đúng các tên như sau : chúng ta sẽ đỡ sửa đoạn Code, chỉ cần Copy và Paste vào là xong.
    ComboBox có tên là ComboBoxTopics, 3 nút có tên là PreviousButton, NextButton và CancelButton. Label có tên là LabelText
    Bạn cũng cần đặt Width cho ComboBox, khoảng 150 hay 200 để có thể hiện đủ chủ đề cần thiết

    Các bạn có thể làm thủ tục mở Form tương tự như trên

    Chúc bạn thành công. Trong File hướng dẫn, các bạn sẽ thấy đề tài này tại Sheet Form2
     
    #3
  4. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Sử dụng Office Assistant để thể hiện thông tin trợ giúp

    Tương tự thông tin trợ giúp bạn cũng đặt trong Worksheet HelpSheet

    Cột A chứa chủ đề thông tin trợ giúp. Cột B chứa nội dung tương ứng với chủ đề ở cột A.

    Các bạn Copy đoạn mã này và Paste vào Module nhé

    Public Const APPNAME As String = "Huong Dan Su dung"
    Dim Topic
    Dim HelpSheet
    Sub ShowHelp()
    Set HelpSheet = ThisWorkbook.Worksheets("HelpSheet")
    Application.Assistant.On = True
    Topic = 1
    With Assistant.NewBalloon
    .Heading = "Help Topic " & Topic & ": " & vbCrLf & HelpSheet.Cells(Topic, 1)
    .Text = HelpSheet.Cells(Topic, 2)
    .Button = msoButtonSetNextClose
    .BalloonType = msoBalloonTypeButtons
    .Mode = msoModeModeless
    .Callback = "ProcessRequest"
    .Show
    End With
    End Sub

    Sub ProcessRequest(bln As Balloon, lbtn As Long, lPriv As Long)
    NumTopics = Application.WorksheetFunction.CountA(HelpSheet.Ran ge("A:A"))
    Assistant.Animation = msoAnimationCharacterSuccessMajor
    Select Case lbtn
    Case msoBalloonButtonBack
    If Topic <> 1 Then Topic = Topic - 1
    Case msoBalloonButtonNext
    If Topic <> NumTopics Then Topic = Topic + 1
    Case msoBalloonButtonClose
    bln.Close
    Exit Sub
    End Select
    With bln
    .Close
    Select Case Topic
    Case 1: .Button = msoButtonSetNextClose
    Case NumTopics: .Button = msoButtonSetBackClose
    Case Else: .Button = msoButtonSetBackNextClose
    End Select
    .Heading = "Help Topic " & Topic & ": " & vbCrLf & HelpSheet.Cells(Topic, 1)
    .Text = HelpSheet.Cells(Topic, 2)
    .Show
    End With
    End Sub

    Bạn sẽ thấy phần thông tin hướng dẫn của bạn hiện ra ngay trên phần Help của Excel khi bạn gọi nó ra bằng nút lệnh hay bằng Menu. Bạn có thể tham khảo File hướng dẫn và bài của Levanduyet tại đây
    http://www.webketoan.com/forum/showthread.php?t=46&page=7&pp=10
     
    #4
  5. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
    Một ứng dụng một người làm và một người khác sử dụng thì việc thiết kế Help là rất quan trọng để mọi người cùng làm đúng. File Chị Handung107 up lên thực sự sẽ rất có ích cho những bạn muốn hoàn thiện hơn ứng dụng của mình mà chỉ cần hiểu cấu trúc dữ liệu trong Sheet "Help" và chút cơ bản về VBA.
    To Chị Handung107: Em đã download file "File help.rar" của chị. Về cơ bản mọi người nghiên cứu và sẽ dễ dàng để tạo một cái trên nền tảng của "File Halp.xls".
    Khi xem đến sheet "OfficeAssistant" em thấy có một vấn đề:
    Mỗi lần con trỏ dịch chuyển (Select) tới một ô (cell) thì EXCEL tạo ra một màn hính màu vàng (Office Assistant), vì vậy nếu chọn 2 ô thì sẽ có 2 màn hình n ô có n màn hình, nếu muốn thoát thì phải bấn n lần vào nút "close" thì mới thoát được . Với n màn hình trên EXCEL sẽ phải dùng n vùng nhớ->tốc độ xử lý chắc chắn sẽ bị chậm dần đến một lúc nào đó thì treo máy.
    Theo ý em thì khi con trỏ trong vùng cần help thì kiểm tra: nếu chưa có màn hình Help thì tạo (New), nếu đã có thì thôi có thể chỉ cần Visible=True.
    Khi con trỏ nằm ngoài vùng thì cho Visible=False nếu cần có thể hủy (Set OffA=nothing) để tiết kiệm bộ nhớ. Nếu có thể chị xem lại Sub "Showhelp" chữa giúp mọi người nhé.
     
    #5
  6. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Ừ nhỉ, cám ơn Tuấn nhé, chị không để ý. Tuấn sửa luôn giùm chị đi, và cũng mong em góp ý thêm cho phần "tạo Help" thêm phong phú bằng những kinh nghiệm của mình
     
    #6
  7. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
  8. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
    Cần sửa đổi 2 thủ tục ShowHelp,ProcessRequest và 1 sự kiện của sheet "OfficeAssistant" là Worksheet_SelectionChange
    Những nội dung sửa được format màu xanh (Blue)
    '================================================

    Public OA As Balloon

    '================================================
    Sub ShowHelp()


    If OA Is Nothing Then

    Set HelpSheet = ThisWorkbook.Worksheets("Help")
    Topic = 2
    Application.Assistant.On = True
    Set OA = Assistant.NewBalloon
    With OA

    .Heading = HelpSheet.Cells(Topic, 1)
    .Text = HelpSheet.Cells(Topic, 2)
    .Button = msoButtonSetNextClose
    .icon = msoIconTip
    .BalloonType = msoBalloonTypeButtons
    .Animation = msoAnimationCharacterSuccessMajor
    .Mode = msoModeModeless
    .Callback = "ProcessRequest"
    .Show
    End With


    End If

    End Sub
    '================================================
    Sub ProcessRequest(bln As Balloon, lbtn As Long, lPriv As Long)
    NumTopics = Application.WorksheetFunction.CountA(HelpSheet.Range("A:A"))
    Assistant.Animation = msoAnimationCharacterSuccessMajor
    Select Case lbtn
    Case msoBalloonButtonBack
    If Topic <> 1 Then Topic = Topic - 1
    Case msoBalloonButtonNext
    If Topic <> NumTopics Then Topic = Topic + 1
    Case msoBalloonButtonClose
    bln.Close

    Set OA = Nothing

    Exit Sub
    End Select
    With bln
    .Close
    Select Case Topic
    Case 1: .Button = msoButtonSetNextClose
    Case NumTopics: .Button = msoButtonSetBackClose
    Case Else: .Button = msoButtonSetBackNextClose
    End Select
    .Heading = HelpSheet.Cells(Topic, 1)
    .Text = HelpSheet.Cells(Topic, 2)
    .Show
    End With
    End Sub
    '================================================
    'Trong sự kiện Sheet "OfficeAssistant"
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Union(Target.Range("A1"), Range("A3:B800")).Address = Range("A3:B800").Address Then
    Call ShowHelp
    Cancel = True

    Else
    If Not OA Is Nothing Then
    OA.Close
    Set OA = Nothing
    End If

    End If
    End Sub
    '================================================
    'Nếu có thể cho thêm sự kiện Auto_Close trong Module "Help"
    Sub Auto_Close()
    If Not OA Is Nothing Then
    Set OA = Nothing
    End If
    End Sub
     

    Các file đính kèm:

    #8
  9. bigbigworld

    bigbigworld Thành viên sơ cấp

    Bài viết:
    21
    Đã được thích:
    0
    Nơi ở:
    Quan 9
    Public Ass As Balloon

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.Assistant.On = True
    Application.Visible = True
    Set Ass = Assistant.NewBalloon
    With Ass
    .Heading = "Hello"
    .Text = "Ban muon thoat chuong trinh phai ko?"
    .Button = msoButtonSetYesNo
    .Icon = msoIconTip
    .Show
    End With
    End Sub

    Bây giờ em muốn khi bấm YES thì lệnh thi hành còn NO thì lệnh không được thi hành. Phải viết làm sao ? Giúp em với
     
    #9
  10. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
    Bạn làm thế này nhé
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim X As MsoBalloonButtonType
    Application.Assistant.On = True
    Application.Visible = True
    Set Ass = Assistant.NewBalloon
    With Ass
    .Heading = "Hello"
    .Text = "Ban muon thoat chuong trinh phai ko?"
    .Button = msoButtonSetYesNo
    .Icon = msoIconTip

    If .Show <> msoBalloonButtonYes Then
    Exit Sub 'Thoát khỏi Sub
    End If


    End With

    MsgBox "Thực hiện lệnh"
    End Sub
     
    #10

Chia sẻ trang này