View Full Version : Chuyển 1 hàm có sẵn trong VBA (Excel)
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à #VALUE! k hà! Mong chỉ giáo!
Function StrReverse(hoten)
StrReverse(hoten) = StrReverse(hoten)
End Function
quocnghia
21-04-2004, 13:55
Bạn phải gõ như thế này mới đúng
Function StrReverse(hoten)
StrReverse= StrReverse(hoten)
End Function
Tks QuocNghia, 8020 sua lai roi, nhung ket qua vẫn ... the same (#VALUE! )???
quocnghia
22-04-2004, 11:53
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.
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
daovietcuong
21-11-2005, 16:55
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
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
22-11-2005, 09:48
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
22-11-2005, 10:48
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!
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!
Tuanktcdcn
23-11-2005, 10:57
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.
*........
........
Powered by vBulletin™ Version 4.0.3 Copyright © 2010 vBulletin Solutions, Inc. All rights reserved.