Tải bản đầy đủ (.pdf) (10 trang)

Giáo trình hình thành ứng dụng ngôn ngữ visual basic trên java theo vùng dữ liệu p2 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.66 MB, 10 trang )

C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G


I
I
V
V
:
:


L
L


P
P


T


T
R
R
Ì
Ì
N
N
H
H


T
T
R
R
Ê
Ê
N
N


M
M
I
I
C
C
R
R
O

O
S
S
O
O
F
F
T
T


E
E
X
X
C
C
E
E
L
L



163

Ø
Ø

Người sử dụng có thể lựa chọn một vùng dữ liệu trực tiếp trên worksheet bằng cách sử

dụng chuột;
Ø
Ø

Việc kiểm tra dữ liệu nhập vào được thực hiện tự động.
Cú pháp của hàm InputBox này như sau:
Application.InputBox(prompt, title, default, left, top, helpFile,
context, type)
Hầu hết các tham số đều là tham số tuỳ chọn, chỉ có tham số prompt là bắt buộc phải nhập vào.
Ý nghĩa của các tham số như sau:
Tham số Giải thích
prompt Đoạn văn bản sẽ hiển thị trong hộp thoại
title Tiêu đề của hộp thoại InputBox
default Giá trị mặc định. Nếu người dùng không nhập gì cả, hàm sẽ trả về giá trị mặc
định này.
left, top Toạ độ góc trên bên trái của hộp thoại.
helpFile, context Tên tệp trợ giúp và chủ đề cần hiển thị
type Mã xác định kiểu trả về của hàm.
Bảng sau thể hiện các loại mã xác định kiểu trả về của hàm:
Mã Kiểu giá trị trả về là
0 Công thức
1 Số
2 Chuỗi
4 Boolean (True hoặc False)
8 Đối tượng kiểu Range. Tham chiếu đến một vùng dữ liệu
16 Giá trị lỗi, chẳng hạn như #NA
64 Mảng giá trị
Hàm InputBox của Excel được sử dụng khá linh hoạt. Hàm này có thể cho phép có nhiều hơn
một kiểu giá trị trả về bằng cách cộng các loại mã thích hợp. Ví dụ như muốn hộp thoại
InputBox cho phép nhập vào cả số và chuỗi, có thể nhập tham số

type bằng 3 (tức là 1+2, hay
“Số” cộng “chuỗi”). Còn nếu gán tham số type bằng 8 thì người dùng có thể tự nhập vào địa
chỉ của vùng dữ liệu trong hộp thoại, hoặc cũng có thể chọn vùng dữ liệu trên worksheet bằng
chuột.
Ví dụ sau, thủ tục EraseRange, sử dụng hàm InputBox để người dùng lựa chọn một vùng dữ
liệu để xoá. Người dùng có thể nhập vào địa chỉ của vùng dữ liệ
u hoặc cũng có thể chọn bằng
cách dùng chuột. Hàm InputBox với tham số
type bằng 8 sẽ trả về đối tượng kiểu Range (chú
ý từ khoá Set trước hàm InputBox, vì lúc này hàm sẽ trả về đối tượng chứ không phải là một
giá trị đơn thuần). Vùng dữ liệu này sẽ được xoá đi bằng phương thức Clear. Giá trị mặc định
được hiển thị trong hộp thoại InputBox là địa chỉ của vùng được chọn hiện hành. Câu lệnh On
Error nhằm mục đích sẽ thoát khỏi thủ
tục khi có lỗi xảy ra.
Sub EraseRange()
Dim UserRange As Range


164
Dim DefaultRange As String
DefaultRange = Selection.Address
On Error GoTo Canceled
Set UserRange = Application.InputBox _
(Prompt:=“Vùng dữ liệu cần xoá:”, _
Title:= “Xoá vùng dữ liệu”, _
Default:=DefaultRange, _
Type:=8)
UserRange.Clear
UserRange.Select
Canceled:

End Sub

Một lợi điểm nữa của việc sử dụng hàm inputBox của Excel chính là việc tự động thực hiện
kiểm tra giá trị nhập vào. Trong ví dụ trên, nếu người dùng nhập vào giá trị không phải là địa
chỉ của một vùng dữ liệu, Excel sẽ hiển thị một hộp thông báo và nhắc người dùng nhập lại dữ
liệu.

8.2.2. Hộp thoại Open – Hàm GetOpenFilename
Trong một số chương trình, khi cần nhập vào tên tệp nào đó, ta có thể sử dụng hộp thoại
InputBox để yêu cầu người sử dụng nhập vào tên tệp từ bàn phím. Tuy nhiên cách này có thể
phát sinh lỗi do người dùng nhập vào một tên tệp không tồn tại (có thể do gõ phím sai hoặc
không nhớ chính xác tên tệp). Một cách tốt hơn để làm việc này chính là sử dụng phương thức
GetOpenFilename của đối tượng Application. Ph
ương thức này sẽ hiển thị hộp thoại Open
(giống như khi chọn trình đơn FileÖOpen) nhưng chỉ trả về tên tệp được chọn mà không mở
một tệp nào cả. Người dùng chỉ việc chọn tệp bằng các công cụ trực quan có sẵn trong hộp
thoại.
Cú pháp của phương thức này như sau (tất cả các tham số đều là tham số tuỳ chọn):
GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)
C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G

G


I
I
V
V
:
:


L
L


P
P


T
T
R
R
Ì
Ì
N
N
H
H



T
T
R
R
Ê
Ê
N
N


M
M
I
I
C
C
R
R
O
O
S
S
O
O
F
F
T
T



E
E
X
X
C
C
E
E
L
L



165

Tham số Giải thích
FileFilter Chuỗi chứa bộ lọc tệp.
FilterIndex Số thứ tự của bộ lọc tệp mặc định.
Title Tiêu đề của hộp thoại, giá trị mặc định là “Open”.
ButtonText Không sử dụng.
MultiSelect Nếu bằng TRUE, người dùng có thể chọn nhiều tệp cùng một lúc. Mặc định là
FALSE.
Tham số FileFilter quy định các phần tử sẽ được hiển thị trong danh sách đổ xuống “File of
type” của hộp thoại. Mỗi phần tử tương ứng với một loại tệp nào đó. Phần tử là một cặp giá trị
gồm tên sẽ được hiển thị trong danh sách và phần mở rộng của loại tệp tương ứng. Nếu không
gán giá trị cho tham số này, giá trị mặc định sẽ là:
“All Files (*.*),*.*”
Chú ý phần đầu của chuỗi này (phần nằm phía trước dấu phẩy - All Files (*.*)) là đoạn văn bản
sẽ được hiển thị trong danh sách. Còn phần thứ hai của chuỗi (phần nằm sau dấu phẩy – *.*)

chính là phần mở rộng của tệp sẽ được hiển thị.
Ví dụ sau minh hoạ cách tạo một chuỗi chứa trong biến Filt có thể dùng để truyền vào tham số
FileFilter của phương thức GetOpenFilename. Nh
ư trong trường hợp này, người dùng có thể
chọn 2 loại tệp (và một lựa chọn cho tất cả các tệp).
Filt = “Text Files (*.txt),*.txt,” & _
“Comma Separated Files (*.csv),*.csv,” & _
“All Files (*.*),*.*”
Ví dụ sau sẽ nhắc người dùng chọn một tệp, sau đó sẽ hiển thị tên tệp được chọn.
Sub GetImportFileName()
Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Dim FileName As String
' Gán bộ lọc tệp
Filt = "Text Files (*.txt),*.txt," & _
"Comma Separated Files (*.csv),*.csv," & _
"All Files (*.*),*.*"
' Hiển thị các tệp *.csv là mặc định
FilterIndex = 2
' Gán tiêu đề cho hộp thoại
Title = "Chon tep"
' Lấy tên tệp
FileName = Application.GetOpenFilename _
(FileFilter:=Filt, _
FilterIndex:=FilterIndex, _
Title:=Title)
' Thoát nếu nhấn nút Cancel
If FileName = "False" Then
MsgBox "Khong tep nao duoc chon."

Exit Sub
End If
' Hiển thị tên tệp đầy đủ
MsgBox "Ban vua chon tep: " & FileName


166
End Sub

Hình IV-18: Hộp thoại Open
8.2.3. Hộp thoại Save As – Hàm GetSaveAsFilename
Phương thức GetSaveAsFilename cũng tương tự như phương thức GetOpenFileName. Phương
thức này sẽ hiển thị hộp thoại Save As, cho phép người dùng chọn hoặc chỉ định tệp để lưu, sau
đó sẽ trả về tên tệp đầy đủ nhưng không thực hiện thao tác lưu nào cả.
Cú pháp của phương thức này như sau:
GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,Button
Text)
Tham số Giải thích
InitialFilename Xác định tên tệp gợi ý ban đầu
FileFilter Chuỗi chứa bộ lọc tệp.
FilterIndex Số thứ tự của bộ lọc tệp mặc định.
Title Tiêu đề của hộp thoại, giá trị mặc định là “Save As”.
ButtonText Không sử dụng.
Ví dụ sau sẽ hiển thị hộp thoại Save As để người dùng nhập vào tên tệp, sau đó sẽ hiển thị tên
tệp được lựa chọn.
C
C
H
H
Ư

Ư
Ơ
Ơ
N
N
G
G


I
I
V
V
:
:


L
L


P
P


T
T
R
R
Ì

Ì
N
N
H
H


T
T
R
R
Ê
Ê
N
N


M
M
I
I
C
C
R
R
O
O
S
S
O

O
F
F
T
T


E
E
X
X
C
C
E
E
L
L



167

Sub SaveAs()
Dim fileSaveName As String
fileSaveName = Application.GetSaveAsFilename( _
InitialFileName:="TenTep", _
FileFilter:="Excel Workbook (*.xls), *.xls", _
Title:="Luu tap tin")
If fileSaveName <> "False" Then
MsgBox "Save as " & fileSaveName

End If
End Sub
8.2.4. Hộp thoại chọn thư mục – Đối tượng FileDialog
Nếu cần người dùng chọn một thư mục để thực hiện thao tác nào đó, có thể thực hiện theo
nhiều cách khác nhau, nhưng đơn giản nhất vẫn là sử dụng đối tượng FileDialog.
Ví dụ sau hiển thị một hộp thoại cho phép người dùng chọn thư mục. Sau đó hiển thị tên thư
mục bằng cách s
ử dụng hộp thoại MsgBox. Tên tệp sẽ được truy cập thông qua thuộc tính
SelectedItems của đối tượng FileDialog.
Sub GetAFolder()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Application.DefaultFilePath & “\”
.Title = “Please select a location for the backup”
.Show
If .SelectedItems.Count = 0 Then
MsgBox “Canceled”
Else
MsgBox .SelectedItems(1)
End If
End With
End Sub
Đối tượng FileDialog cho phép chỉ định thư mục ban đầu bằng cách gán giá trị cho thuộc tính
InitialFileName. Trong ví dụ trên đã sử dụng thư mục mặc định của Excel làm thư mục ban
đầu.
8.2.5. Các hộp thoại mặc định trong Excel – Tập đối tượng Dialogs
Tập đối tượng Dialogs của đối tượng Application bao gồm 258 phần tử thể hiện hầu hết các
hộp thoại mặc định trong Excel. Mỗi hộ
p thoại có một hằng số được định nghĩa trước giúp
người dùng có thể xác định được hộp thoại cần hiển thị một cách dễ dàng. Chẳng hạn như khi
muốn hiển thị hộp thoại GoTo của Excel, sử dụng hằng số

xlDialogFormulaGoto.
Sử dụng phương thức Show để hiển thị các hộp thoại. Ví dụ sau sẽ hiển thị hộp thoại Go To
của Excel.
Application.Dialogs(xlDialogFormulaGoto).Show
Người lập trình còn có thể viết mã lệnh để kiểm tra cách thức đóng hộp thoại. Trong ví dụ sau,
biến Result sẽ trả về TRUE nếu người dùng kích chuột vào nút OK, và FALSE nếu kích chuột
vào nút Cancel hoặc nhấn phím ESC.
Result = Application.Dialogs(xlDialogFormulaGoto).Show
Cần phải lưu ý rằng, tính năng này không được trình bày rõ ràng trong các tài liệu trợ giúp của
Excel. Các tài liệu trợ giúp cho phần này rất sơ lược, không đề cập đến một sự thật: các hộp


168
thoại hiển thị khi gọi bằng VBA không hoàn toàn giống như khi gọi thông qua trình đơn trong
Excel. Chính vì vậy, chẳng có cách nào khác ngoài việc thử nghiệm để kiểm tra hoạt động của
các hộp thoại.
CHÚ Ý Các hộp thoại hiển thị khi gọi bằng VBA không hoàn toàn giống như khi gọi thông
qua trình đơn trong Excel.
Trong trường hợp của hộp thoại Go To, khi hiển thị bằng VBA, nút Special bị mờ đi, không
hoàn toàn giống như khi chọn từ trình đơn EditÖGo To.

Ngoài ra, còn có một vấn đề khác nữa, đó là việc không thể hiển thị được các hộp thoại có
nhiều thẻ khác nhau. Lấy ví dụ với hộp thoại Format Cell, không có cách nào để hiển thị đầy đủ
hộp thoại này với nhiều thẻ khác nhau từ
VBA, thay vào đó, chỉ có thể hiển thị một thẻ tại một
thời điểm. Đoạn mã sau chỉ hiển thị được thẻ Alignment của hộp thoại Format Cells:
Application.Dialogs(xlDialogAlignment).Show
Để hiển thị các thẻ khác trong hộp thoại Format Cells, phải sử dụng riêng lẻ các hằng số đã
được định nghĩa trước như:
xlDialogFormatNumber, xlDialogBorder,

xlDialogCellProtection, xlDialogPatterns, hoặc xlDialogFontProperties.
C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G


I
I
V
V
:
:


L
L


P
P



T
T
R
R
Ì
Ì
N
N
H
H


T
T
R
R
Ê
Ê
N
N


M
M
I
I
C
C
R

R
O
O
S
S
O
O
F
F
T
T


E
E
X
X
C
C
E
E
L
L



169


Có rất nhiều hằng số được định nghĩa trước tương ứng với một hộp thoại trong Excel. Danh

sách đầy đủ các hằng số này có thể được tra cứu với Object Browser:
1. Trong mô đun mã lệnh VBAIDE, nhấn F2 để khởi động Object Browser.
2. Trong cửa sổ Object Browser, chọn Excel ở danh sách phía trên.
3. Trong danh sách thứ 2, gõ vào xlDialog.
4. Kích chuột vào biểu tượng hình ống nhòm.
CHÚ Ý Hiển thị một hộp thoại không đúng ngữ cảnh sẽ làm phát sinh lỗi. Ví dụ như khi
đang chọn một chuỗi số liệu trong một biểu đồ mà lại hiển thị hộp thoại Fonts (hằng số
xlDialogFontProperties) thì sẽ xuất hiện thông báo lỗi bởi vì hộp thoại này xuất hiện trong
tình huống này là không thích hợp.
Dưới đây là danh số một số hằng số hay được sử dụng:
Hằng số Mô tả
xlDialogOpen Hộp thoại Open
xlDialogSaveAs Hộp thoại Save As
xlDialogPageSetup Hộp thoại Page Setup
xlDialogPrint Hộp thoại Print
xlDialogPrinterSetup Hộp thoại Printer Setup
GỢI Ý Các hằng số tương ứng khi sử dụng tập đối tượng Dialogs được bắt đầu bằng
xlDialog và tiếp theo là tên của hộp thoại (viết liền nhau). Trong VBAIDE, gõ xlDialog sau
đó nhấn CTRL+Space để hiển thị cửa sổ gợi ý mã lệnh, trong đó sẽ có danh sách đầy đủ
các hằng số liên quan.
8.2.6. Thực thi mục trình đơn Excel từ VBA


170
Một cách khác nữa để hiển thị các hộp thoại mặc định là thực thi trực tiếp thông qua trình đơn.
Điều này cũng tương đương như khi sử dụng chuột để chọn một mục trình đơn trong thanh
trình đơn của Excel.
Đoạn mã lệnh sau tương đương với việc người dùng chọn trình đơn EditÖGo To trực tiếp
trong Excel:
Application.CommandBars(“Worksheet Menu Bar”). _

Controls(“Edit”).Controls(“Go To ”).Execute
Câu lệnh trên, khi thực thi sẽ hiển thị hộp thoại Go To. Cần chú ý rằng, đoạn văn bản nằm
trong dấu ngoặc phải giống hệt như những gì hiển thị trên thanh trình đơn (bao gồm cả dấu ba
chấm sau chữ “Go To”).
Việc thực thi mục trình đơn như thế này được thực hiện khá đơn giản, hơn nữa còn khắc phục
được nhược điểm không hiể
n thị hộp thoại có nhiều thẻ như đã đề cập ở phần “Các hộp thoại
mặc định trong Excel – Tập đối tượng Dialogs” trang 167. Ví dụ sau sẽ hiển thị hộp thoại
Format Cells với đầy đủ các thẻ định dạng.
Application.CommandBars("Worksheet Menu Bar"). _
Controls("Format").Controls("Cells ").Execute
Ngoài ra, theo cách này, người lập trình có thể thực thi bất kỳ một mục trình đơn nào có trong
thanh trình đơn của Excel.
8.3. Hộp thoại tuỳ biến – UserForm
Khi các hộp thoại mặc định trong Excel không đáp ứng được nhu cầu, người lập trình Excel có
thể tạo ra các hộp thoại tuỳ biến của riêng mình thông qua các UserForm. Với khả năng tuỳ
biến cao, người lập trình có thể sử dụng UserForm và các điều khiển trên đó để tạo ra những
hộp thoại với nhiều tính năng hơn, phù hợp hơn với nhu cầu thực tế hơn. Việc tạ
o các hộp thoại
tuỳ biến được thực hiện dễ dàng và hơn nữa với khả năng của mình, người lập trình có thể tạo
ra các hộp thoại trông chẳng khác gì hộp thoại của chương trình Excel.
Hộp thoại tuỳ biến được tạo ra dựa trên UserForm thông qua VBAIDE. Thông thường, có thể
tạo hộp thoại tuỳ biến theo các bước sau:
1. Tạo mới một UserForm vào trong dự án VBA của Workbook.
2. Vi
ết thủ tục để hiển thị UserForm. Thủ tục này phải được đặt trong một mô-đun của VBA
(chứ không phải đặt trong mô-đun của UserForm)
3. Chèn thêm các điều khiển cần thiết trên UserForm.
4. Điều chỉnh các điều khiển vừa thêm.
5. Viết mã lệnh cho các sự kiện tương ứng của các điều khiển (nếu cần). Các thủ tục này phải

được đặt trong mô-đun của chính UserForm đó.
Sau khi thực hiện xong các bước trên, mỗi khi cần hiển thị hộp thoại tuỳ biến, chỉ cần thực thi
thủ tục đã tạo ở bước 2.
8.3.1. Tạo mới UserForm
Để tạo mới UserForm, khởi động VBAIDE (nhấn phím ALT+F11), chọn dự án ứng với
workbook cần thêm Userform, sau đó chọn trình đơn InsertÖUserForm. Các UserForm sẽ
được tự động đặ
t tên UserForm1, UserForm2, Người lập trình có thể thay đổi tên của
UserForm để dễ dàng nhận dạng UserForm thông qua cửa sổ Properties (chọn UserForm và
nhấn phím F4 để hiển thị cửa sổ Properties).
C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G


I
I
V
V
:
:



L
L


P
P


T
T
R
R
Ì
Ì
N
N
H
H


T
T
R
R
Ê
Ê
N
N



M
M
I
I
C
C
R
R
O
O
S
S
O
O
F
F
T
T


E
E
X
X
C
C
E
E

L
L



171


Mỗi một workbook có thể chứa nhiều UserForm khác nhau, mỗi UserForm chính là một hộp
thoại tuỳ biến.
8.3.2. Hiển thị UserForm
Để hiển thị UserForm, sử dụng phương thức Show của đối tượng UserForm. Phương thức này
có cú pháp như sau:
object.Show modal
Trong đó:
Ø
Ø

object: là đối tượng kiểu UserForm;
Ø
Ø

modal: là tham số tuỳ chọn, xác định kiểu hiển thị của UserForm. Modal có thể là một
trong hai giá trị
vbModal hoặc vbModeless. Nếu là vbModal, người dùng phải đóng
UserForm mới có thể tiếp tục thao tác với Excel. Nếu là
vbModeless, người dùng vẫn có
thể vừa thao tác trên UserForm, vừa thao tác trên Excel. Mặc định là giá trị
vbModal.
Đoạn mã sau sẽ hiển thị UserForm có tên là UserForm1 ở chế độ Modal:

UserForm1.Show
Ngoài ra, còn có một kỹ thuật khác để hiển thị UserForm: sử dụng phương thức Add của tập
đối tượng UserForm, sau đó sử dụng phương thức Show để hiển thị UserForm. Phương thức
này thích hợp khi trong dự án có nhiều UserForm và người có thể chỉ định sự xuất hiện của một
UserForm bất kỳ. Đoạn mã sau sẽ hiển thị UserForm có tên là UserForm1:
MyForm = “UserForm1”
UserForms.Add(MyForm).Show
CHÚ Ý Thủ tục để hiển thị hộp thoại tuỳ biến (UserForm) phải được đặt trong một mô-
đun chuẩn của VBA (chứ không phải đặt trong mô-đun của UserForm).


172
VBA còn có lệnh Load. Lệnh này chỉ tải UserForm vào trong bộ nhớ mà không hiển thị cho
đến khi sử dụng phương thức
Show của UserForm đó. Để tải UserForm1 vào bộ nhớ, thực hiện
như sau:
Load UserForm1
Khi có một UserForm tương đối phức tạp (có nhiều thành phần điều khiển cùng với nhiều dữ
liệu bên trong đó), nếu sử dụng lệnh
Load để tải UserForm vào bộ nhớ thì UserForm sẽ được
hiển thị nhanh hơn khi sử dụng phương thức
Show. Tuy nhiên, trong đại đa số các trường hợp,
chỉ cần sử dụng phương thức
Show, bởi lẽ phương thức này cũng đã tự động thực hiện lệnh
Load (nếu UserForm chưa được tải vào bộ nhớ) ngay trước khi hiển thị Userform.
Một khi đã được hiển thị, UserForm sẽ luôn tồn tại trên màn hình cho đến khi người dùng đóng
nó lại. Vì vậy, thông thường, người lập trình sẽ tạo thêm một nút lệnh (Command Button) trên
UserFrom để thực hiện thủ tục đóng UserForm. Thủ tục này có thể sử dụng lệnh
Unload để dỡ
bỏ UserForm khỏi bộ nhó của máy tính, hoặc sử dụng phương thức

Hide của đối tượng
UserForm để tạm thời ẩn UserForm.
Đoạn mã sau sẽ đóng cửa sổ UserForm1:
UserForm1.Hide
Hoặc có thể sử dụng đoạn mã sau để đóng cửa sổ UserForm1:
Unload UserForm1
Phương thức Hide chỉ tạm thời ẩn UserForm, bản thân UserForm vẫn còn trong bộ nhớ, các
thuộc tính của UserFrom vẫn có thể được truy cập bình thường. Còn lệnh
Unload thì sẽ gỡ bỏ
UserForm ra khỏi bộ nhớ, lúc này các thuộc tính của UserForm sẽ không thể truy cập được
nữa.
8.3.3. Các điều khiển trên UserForm
Người lập trình có thể dùng rất nhiều loại điều khiển khác nhau lên UserForm. Thông tin chi
tiết, xem lại mục “Làm việc với UserForm và các thành phần điều khiển” trang 61. Dưới đây
chỉ trình bày thêm một điều khiển riêng của Excel, điều khiển RefEdit.
Điều khiển RefEdit cho phép người dùng lựa chọn một vùng dữ liệu bằng cách nhập địa chỉ
hoặc nhập tên vùng dữ liệu hoặc sử dụng chuột để chọn trực tiếp trong worksheet. Khi người
dùng kích chuột vào biểu tượng nhỏ ở góc phải của điều khiển, hộp thoại sẽ tạm thời được ẩn đi
và một cửa sổ nhỏ để ng
ười dùng chọn vùng dữ liệu sẽ được hiện lên, giống hệt như các hộp
thoại mặc định của Excel.

×