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

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi 8020, 21 Tháng tư 2004.

9,056 lượt xem

  1. 8020

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

    Bài viết:
    17
    Đã được thích:
    0
    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
     
    #1
  2. quocnghia

    quocnghia Thành viên hoạt động

    Bài viết:
    64
    Đã được thích:
    0
    Bạn phải gõ như thế này mới đúng

    Function StrReverse(hoten)
    StrReverse= StrReverse(hoten)
    End Function
     
    #2
  3. 8020

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

    Bài viết:
    17
    Đã được thích:
    0
    Tks QuocNghia, 8020 sua lai roi, nhung ket qua vẫn ... the same ([HASHTAG]#VALUE[/HASHTAG]! )???
     
    #3
  4. quocnghia

    quocnghia Thành viên hoạt động

    Bài viết:
    64
    Đã được thích:
    0
    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.
     
    #4
  5. SA_DQ

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

    Bài viết:
    431
    Đã được thích:
    37
    Nơi ở:
    HCM city
    Đ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
     
    #5
  6. daovietcuong

    daovietcuong Guest

    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
     
    #6
  7. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh

    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?
     
    #7
  8. HongViet

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

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà nẵ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:
     
    #8
  9. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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!
     
    #9
  10. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội

    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!
     
    #10
  11. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
    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.
    *........
    ........
     
    #11

Chia sẻ trang này