Nhờ các anh tạo giúp hàm tìm vị trí sheet (1 người xem)

  • Thread starter Thread starter adua29
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

adua29

Real-life Girls Super Сasual Dating
Tham gia
29/4/08
Bài viết
156
Được thích
111
Giới tính
Nam
Nghề nghiệp
Health
Em đã thử viết một đoạn code nhưng do VBA mới i tờ nên hàm không hoàn chỉnh
Nhờ các anh chị sửa giùm em

Mã:
Function posisheet(namesheet As String) As Byte
For i = 1 To INFO("numfile")
Do
If Sheet(i) = namesheet Then
posisheet = i
Next
End Function

Mục đích của hàm là tìm xem trong file có namesheet không
Nếu không thì cho kết quả bằng 0
Nếu có thì cho vị trí của sheet trong file
Em xin cảm ơn
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn có thể sử dụng hàm sau:
PHP:
Function SheetPos(ShName As String) As Byte
    Dim i As Byte
    For i = 1 To ThisWorkbook.Sheets.Count
        If Sheets(i).Name = ShName Then
            SheetPos = i: Exit Function
        End If
    Next i
End Function
 
Có lẽ fải vầy đó bạn:

PHP:
Option Explicit
Function PosiSheet(namesheet As String) As Byte
 Dim Sh As Worksheet
 
 For Each Sh In Worksheets
   If Sh.Name = namesheet Then
4      PosiSheet = Sh.Index:      Exit Function
   End If      '
 Next Sh
End Function

(*) Trong hàm của bạn còn thiếu vài thứ cần thiết, như sau:
Dùng Do nhưng không/chưa có Loop; Nhưng thực tế hình như không cần đến Do;

Tương tợ, xài If nhưng lại chưa có End If hay 1 kết cầu nào đó thay cho End If;

Khi đã tìm thấy rồi thì nên thoát khỏi vòng lặp; Chứ nếu không nó lại lấy ẩu giá trị khác báo cáo cho bạn vì bạn thích nhận báo cáo láo từ nó đó nha!

Bạn chưa giới thiệu cái INFO("numfile") là chi cả?

Mình (tôi & bạn) mới tập tành, nên mọi cái fải tường minh; Có cái nền vững mới tiến xa được bạn à!
 
Theo em thì em dùng cái này, khỏi dùng vòng lặp.

Mã:
Function ThuTuSheet(TenSheet As String) As String
    Application.Volatile
    ThuTuSheet = Worksheets(TenSheet).Index
End Function
 
Theo em thì em dùng cái này, khỏi dùng vòng lặp.

Mã:
Function ThuTuSheet(TenSheet As String) As String
Application.Volatile
ThuTuSheet = Worksheets(TenSheet).Index
End Function
Quá hay, nhưng cần thêm bẫy lỗi nữa:
Mục đích của hàm là tìm xem trong file có namesheet không
Nếu không thì cho kết quả bằng 0
Nếu có thì cho vị trí của sheet trong file
Chắc thêm 2 câu lệnh này vào đầu Function là được:
PHP:
ThuTuSheet = 0
On Error Resume Next
Nhân tiện, domfootwear cho mình hỏi: Câu lệnh Application.Volatile dùng để làm gì? Mình đã thử tìm trong Microsoft Visual Basic Help (dấu ? trong VBE) nhưng không tìm thấy.
Cảm ơn bạn.
 
Quá hay, nhưng cần thêm bẫy lỗi nữa:

Chắc thêm 2 câu lệnh này vào đầu Function là được:
PHP:
ThuTuSheet = 0
On Error Resume Next
Nhân tiện, domfootwear cho mình hỏi: Câu lệnh Application.Volatile dùng để làm gì? Mình đã thử tìm trong Microsoft Visual Basic Help (dấu ? trong VBE) nhưng không tìm thấy.
Cảm ơn bạn.

Nếu không có câu Application.Volatile thì hàm sẽ không cập nhật 1 cách tự động.
 
Nhân tiện, domfootwear cho mình hỏi: Câu lệnh Application.Volatile dùng để làm gì? Mình đã thử tìm trong Microsoft Visual Basic Help (dấu ? trong VBE) nhưng không tìm thấy.
Cảm ơn bạn.
Đây là nội dung Help của Excel:

Volatile Method

Marks a user-defined function as volatile. A volatile function must be recalculated whenever calculation occurs in any cells on the worksheet. A nonvolatile function is recalculated only when the input variables change. This method has no effect if it's not inside a user-defined function used to calculate a worksheet cell.
expression.Volatile(Volatile)
expression Required. An expression that returns an Application object.
Volatile Optional Variant. True to mark the function as volatile. False to mark the function as nonvolatile. The default value is True
 
Application.Volatile hoàn toàn không cần thiết

Bạn có chắc là không cần thiết không? Ví dụ nếu như bạn đổi tên sheet và vị trí của sheet vừa tham chiếu thì hàm có tự động cập nhật không? Ẹc... ẹc...
 
Lần chỉnh sửa cuối:
Hi!!! Ba3ba3 bị sai rồi:

-Rất nhiều trường hợp không có Volatle giá trị mới nhất không được cập nhật (Nhiều hàm UDF cứ phải vào Cell chứa hàm gõ Enter thì mới cập nhật giá trị mới).
-Volatile: Không phải là hàm. Nguyên gốc ông Bill gọi là Volatile Method
 
Web KT

Bài viết mới nhất

Back
Top Bottom