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

  • Thread starter handung107
  • Ngày gửi
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#1
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 :

1/ Sử dụng Text Box:

Sử dụng Text Box để thể hiện thông tin trợ giúp cũng là một cách thực hiện dễ dàng. Bạn đưa Text Box vào trong WorkSheet của bạn bằng cách Click vào nút Text Box trên thanh công cụ Drawing


Bạn đưa thông tin trợ giúp vào Text Box và thiết đặt chiều rộng và cao của Text Box cho phù hợp.

Thông thường bạn sẽ không muốn Text Box này xuất hiện. Vì vậy chúng ta sẽ thêm 1 nút lệnh (Command Button) để cho hiện ra hoặc dấu đi Text Box này. Giả sử tôi tạo ra một nút lệnh và đưa vào một thủ tục để khi người dùng Click vào nút lệnh này thì thủ tục được thực hiện. Giả sử Text Box bạn tạo ra ở trên có tên là HelpText. Thủ tục đó như sau:

Sub ToggleHelp()
ActiveSheet.TextBoxes("HelpText").Visible = Not ActiveSheet.TextBoxes("HelpText").Visible
End Sub
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
 
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#2
Sử dụng Label để thể hiện thông tin trợ giúp

2/ Sử dụng Label để thể hiện thông tin trợ giúp

Hình sau thể hiện Form người dùng với 2 label: một dùng cho chủ đề của trợ giúp. Ví dụ trong hình là Form Letter Printing. Hai dùng để thể hiện nội dung trợ giúp ứng với chủ đề trên. Một SpinButton nhằm giúp người dùng di chuyển giữa các chủ đề. Một nút lệnh nhằm đóng Form này lại.


Các thông tin trợ giúp được lưu trữ trong worksheet có tên là HelpSheet. Vùng chứa thông tin là vùng A1:B5. Cột A dùng để chứa chủ đề của trợ giúp. Cột B dùng để chứa nội dung của trợ giúp tương ứng với cột A.


Trong quá trình thiết kế Form sẽ có dạng như sau: (chú ý: nút Close có tên là CancelButton; label1 có tên là LabelTopic, label2 có tên là LabelText, SpinButton có tên là SpinButton1)
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

Đoạn mã lệnh của Form như sau :

Private Sub CancelButton_Click()
Unload Me 'Nhằm đóng Form lại
End Sub
Private Sub SpinButton1_Change()
HelpTopic = SpinButton1.Value
LabelTopic.Caption = Sheets("HelpSheet").Cells(HelpTopic, 1)
LabelText.Caption = Sheets("HelpSheet").Cells(HelpTopic, 2)
Me.Caption = " (Help Topic " & HelpTopic & " of " & SpinButton1.Max & ")"
End Sub
Private Sub UserForm_Initialize()
With SpinButton1
.Max = Application.WorksheetFunction.CountA(Sheets("HelpSheet").Range("A:A"))
.Min = 1
.Value = 1
End With
End Sub
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é
 
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#3
Sử dụng DropDown control để chọn chủ đề của thông tin trợ giúp

3/ Sử dụng DropDown control để chọn chủ đề của thông tin trợ giúp :

Khi thiết kế trên form, chúng ta sử dụng Label control, do Label Control không có các thanh trượt, do đó Label được đặt trong một Frame control (Frame control có các thanh trượt). Hình sau là ví dụ của một "scrolling" Label, người dùng có thể di chuyển để đọc thông tin trợ giúp bằng cách dùng các thanh trượt của Frame control.
Form có thêm combobox có tên ComboBoxTopics nhằm chọn chủ đề trợ giúp. Ngoài ra còn có hai nút lệnh là PreviousButton và NextButton nhằm di chuyển qua lại giữa các chủ đề. Chú ý: khi bạn chọn chủ đề trong ComboBox hay khi bạn Click vào các nút PreviousButton, NextButton thì nội dung của chủ đề sẽ được cập nhật trong Label control. Nội dung của thông tin trợ giúp cũng được bố trí trên HelpSheet như sau: cột A để chứa chủ đề của trợ giúp, cột B để chứa nội dung tương ứng với chủ đề bên cột A.
Đ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

Đoạn mã như sau:

Option Explicit
Dim TopicCount As Integer
Dim CurrentTopic As Integer
Dim HelpSheet As Worksheet
Const HelpSheetName As String = "HelpSheet" 'Tên Sheet chứa nội dung trợ giúp
Const HelpFormCaption As String = APPNAME 'Tên ứng dụng của bạn
Private Sub UserForm_Initialize()
Dim Row As Integer
Set HelpSheet = ThisWorkbook.Sheets(HelpSheetName)
TopicCount = Application.WorksheetFunction.CountA(HelpSheet.Ran ge("A:A"))
For Row = 1 To TopicCount
ComboBoxTopics.AddItem HelpSheet.Cells(Row, 1)
Next Row
ComboBoxTopics.ListIndex = 0
CurrentTopic = 1
UpdateForm
End Sub
Private Sub UpdateForm()
ComboBoxTopics.ListIndex = CurrentTopic - 1
Me.Caption = HelpFormCaption & " (" & CurrentTopic & " of " & TopicCount & ")"
With LabelText
.Caption = HelpSheet.Cells(CurrentTopic, 2)
.AutoSize = False
.Width = 212
.AutoSize = True
End With
With Frame1
.ScrollHeight = LabelText.Height + 5
.ScrollTop = 1
End With
On Error Resume Next
If CurrentTopic = 1 Then PreviousButton.Enabled = False Else PreviousButton.Enabled = True
If CurrentTopic = TopicCount Then NextButton.Enabled = False Else NextButton.Enabled = True
If NextButton.Enabled Then NextButton.SetFocus Else PreviousButton.SetFocus
End Sub
Private Sub ComboBoxTopics_Click()
' Thi hành khi ComboBox thay đổi
CurrentTopic = ComboBoxTopics.ListIndex + 1
UpdateForm
End Sub
Private Sub PreviousButton_Click()
' Thi hành khi bạn Click PreviousButton
If CurrentTopic <> 1 Then
CurrentTopic = CurrentTopic - 1
UpdateForm
End If
End Sub
Private Sub NextButton_Click()
' Thi hành khi bạn Click nextButton
If CurrentTopic <> TopicCount Then
CurrentTopic = CurrentTopic + 1
UpdateForm
End If
End Sub
Private Sub CancelButton_Click()
Unload Me 'Nhằm đóng Form lại
End Sub
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
 
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#4
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
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#5
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é.
 
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#6
Ừ 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
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#8
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
 

Đính kèm

B

bigbigworld

Thành viên sơ cấp
10/9/05
21
0
1
Quan 9
#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
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#10
bigbigworld nói:
Public Ass As Balloon
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
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
 

Thành viên trực tuyến

Không có thành viên trực tuyến.

Xem nhiều