Chuyển 1 hàm có sẵn trong VBA (Excel)

  • Thread starter 8020
  • Ngày gửi
8

8020

Sơ cấp
30/3/04
17
0
0
#1
Hi,
8020 thấy trong VBA của Excel có nhiều hàm rất tiện lợi mà lại không có sẵn trong các hàm (function) của Excel, ví dụ, hàm StrReverse để đảo thứ tự các ký tự trong 1 chuỗi. Vậy có cách nào để chuyển hàm đó sang một hàm user-defined Excel function để tiện sử dụng không? 8020 đã thử vào VBA viết cú lệnh đơn giản như sau nhưng khi dùng trong Excel thì bị trả về kết quả là [HASHTAG]#VALUE[/HASHTAG]! k hà! Mong chỉ giáo!

Function StrReverse(hoten)
StrReverse(hoten) = StrReverse(hoten)
End Function
 
Q

quocnghia

Sơ cấp
24/3/04
64
0
0
#2
Bạn phải gõ như thế này mới đúng

Function StrReverse(hoten)
StrReverse= StrReverse(hoten)
End Function
 
8

8020

Sơ cấp
30/3/04
17
0
0
#3
Tks QuocNghia, 8020 sua lai roi, nhung ket qua vẫn ... the same ([HASHTAG]#VALUE[/HASHTAG]! )???
 
Q

quocnghia

Sơ cấp
24/3/04
64
0
0
#4
Mở 1 new file (vd : Book1), vào Tool , MacRo, VBA, Insert Module, gõ cthức như trên, đóng VBA, save Book1, chọn type Xla. Sau đó Add in vaò là xài được.
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#5
Đem đồ cũ ra xài chơi, hỉ!

Mình đề nghị các bạn nên đổi tên khác một chút so với VB chứ không bị kiện cáo lôi thôi hay bị sung đột đấy nha; Ngay trong office nó cũng thế rồi VD: các hàm có chức năng tương tự nhau trong Excel, VB & Access cũng lấy tên khác nhau: FIND - InStr, . . .
Function DaoChu (SChuoi as String) As String
dim ii as Integer, Iz as Integer, Chu As String
Iz=len(SChuoi)
for ii=1 to iZ
SChuoi=Right(SChuoi;1) & Left(SChuoi,iZ-1)
next ii
DaoChu=SChuoi
end Function
 
D

daovietcuong

Guest
#6
Sài lại đồ cũ

Dear all
--------
Nếu sài lại đồ cũ thì phải thế này:

Function funReverse(strHoten as String) as String
funReverse = StrReverse(strHoten)
End Function

Lưu ý là đưa "phănsừn" này vào module để sử dụng được trên worksheet!
Làm như SA_DQ thì chạy chậm lắm!
---------------------------------
Always careful - Always successful
 
W

workman

Cao cấp
22/7/05
372
0
0
46
Ho Chi Minh
#7
daovietcuong nói:
Dear all
--------
Nếu sài lại đồ cũ thì phải thế này:

Function funReverse(strHoten as String) as String
funReverse = StrReverse(strHoten)
End Function

Lưu ý là đưa "phănsừn" này vào module để sử dụng được trên worksheet!
Làm như SA_DQ thì chạy chậm lắm!
---------------------------------
Always careful - Always successful

Chào cả nhà

Lâu quá mới rảnh rỗi vào diễn đàn. Mà các bác dùng hàm StrReverse để làm gì thế nhỉ. Bác nào cho ví dụ cụ thể mục đích chế ra hàm này để làm gì được không?
 
HongViet

HongViet

Thành viên thân thiết
10/11/05
286
10
18
Đà nẵng
#8
workman nói:
Chào cả nhà
Mà các bác dùng hàm . . .cho ví dụ cụ thể mục đích chế ra hàm này để làm gì được không?
Cái hàm của B. Sa_DQ sẽ làm Form quảng cáo chữ chạy được, nếu thêm vô nó một vòng lặp đễ giết thời gian:

Dim iW As Long, Bien as Long
for iW = -32222 to 456789
if iw < 0 then Bien = Bien - 1
If iW>0 Then Bien= 1 + Bien
next iW
:dzo:
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#9
Quảng cáo chạy chữ thì dùng Form với Animation Image Cotrol tốt hơn chứ nhẩy :banana:
Chỉ cần chọn background cho form theo ý muồn cộng với vài dòng lệnh cố định vị trí của form thôi...
Tớ nhớ không lầm thì ngay Windows 98 đã hỗ trợ cả Flash Shockware Control (support *.swf image) cho VBA nữa đấy!
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,012
125
63
45
Hà nội
vnuni.net
#10
daovietcuong nói:
Dear all
--------
Nếu sài lại đồ cũ thì phải thế này:

Function funReverse(strHoten as String) as String
funReverse = StrReverse(strHoten)
End Function

Lưu ý là đưa "phănsừn" này vào module để sử dụng được trên worksheet!
Làm như SA_DQ thì chạy chậm lắm!
---------------------------------
Always careful - Always successful

Tên hàm, tên method nên là 1 động từ, tên property nên là danh từ. Nếu viết StrReverse thì sẽ hiểu là 1 biến có kiểu String. Mọi người thử đọc thêm về Coding convention và cố gắng tạo thói quen viết code "đẹp" nhé.

Cheers!
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
42
Hà Nội
www.bluesofts.net
#11
quocnghia nói:
Bạn phải gõ như thế này mới đúng

Function StrReverse(hoten)
StrReverse= StrReverse(hoten)
End Function
Với cách viết trên thì khi bạn gán "= StrReverse(hoten)" EXCEL sẽ dùng luôn hàm trong khai báo "Function StrReverse(hoten)" chứ không phải dùng StrReverse(expression) trong VBA6.DLL. Tóm lại không được dùng chung tên hàm nếu có mục đích riêng.

Cần sửa lại như sau:

Function UDF_StrReverse(hoten)
UDF_StrReverse = StrReverse(hoten)
End Function

Mục đích sử dụng hàm UDF_StrReverse
* Tách tên ra khỏi cột "Họ và tên", mục đích để sắp xếp danh sách theo Tên.
Giả sử cột A là "Họ và tên". Cột B ta cần tách Tên, gõ công thức:

=RIGHT(A2,FIND(" ",UDF_StrReverse(A2))-1)

Ví dụ này nếu dùng theo cách viết hàm thông thường (không dùng VBA) thì dài gấp 7 lần.
*........
........
 

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

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




Xem nhiều