Lỗi đặt tên hàm trùng với địa chỉ Cells

hovannhat

Yêu THVBA
Chào các anh chị,
Em có 1 add-in này gồm các đoạn code để phân chia đốt cống bê tông ly tâm theo đường kính D và chiều dài L. Trong đó lệnh Dot1, Dot2, Dot3, Dot4 tương ứng tìm số đốt cống có chiều dài 1m, 2m, 3m, 4m.
Em lưu add-in trong đường dẫn: C:\Program Files\Microsoft Office\Office14\xlstart
Khi e dùng trên máy tính có hệ điều hành windows 7 thì chạy tốt (các lệnh Dot1, Dot2, Dot3, Dot4 điều cho kết quả như ý muốn)
Nhưng khi dùng trên máy tính có hệ điều hành windows 10 thì các lệnh trên điều bị lỗi, và báo #REF
Mong các anh chị tiền bối tìm giúp lỗi và cách sửa như thế nào. Em cảm ơn mọi người
Mã:
Function Dot1(D, L)
If L = 1 Then Dot1 = 1 Else Dot1 = 0
If D = 0 And L = 0 Then Dot1 = 0
End Function
Function Dot2(D, L)
Dot2 = 0
'If D > 1000 Then
    Du = L Mod (3)
    If Du = 2 And D > 1000 Then Dot2 = 1
    If Du = 2 And D <= 1000 Then Dot2 = 0
    If Du = 1 And D > 1000 Then Dot2 = 2
    If Du = 1 And D <= 1000 Then Dot2 = 0
    If Du = 0 Then Dot2 = 0
'End If
If L = 2 Then Dot2 = 1
If L = 5 Then Dot2 = 1
If D = 0 And L = 0 Then Dot2 = 0
If L < 2 Then Dot2 = 0
If Val(D) = 0 Then Dot2 = 0
End Function

Function Dot3(D, L)
Dim Dot2
Dot3 = 0
If D > 1000 Then
    Du = L Mod (3)
    If Du = 2 Then Dot2 = 1
    If Du = 1 Then Dot2 = 2
    Dot3 = (L - Val(Dot2) * 2) / 3
Else
    Du = L Mod (4)
    If Du = 0 Then Dot3 = 0
    If Du = 1 Then Dot3 = 3
    If Du = 2 Then Dot3 = 2
    If Du = 3 Then Dot3 = 1
End If
If D = 0 And L = 0 Then Dot3 = 0
If L < 3 Then Dot3 = 0
If L = 5 Then Dot3 = 1
If Val(D) = 0 Then Dot3 = 0
End Function
Function Dot4(D, L)
Dim Dot2, Dot3
Dot4 = 0
If D <= 1000 Then
    Du = L Mod (4)
    If Du = 0 Then Dot2 = 0: Dot3 = 0
    If (Du = 1) And (L = 5) Then Dot2 = 1: Dot3 = 1
    If (Du = 1) And (L <> 5) Then Dot2 = "": Dot3 = 3
    If Du = 2 Then Dot3 = 2
    If Du = 3 Then Dot3 = 1
    Dot4 = (L - Val(Dot2) * 2 - Val(Dot3) * 3) / 4
Else: Dot4 = 0
End If
If D = 0 And L = 0 Then Dot4 = 0
If L < 4 Then Dot4 = 0
If Val(D) = 0 Then Dot4 = 0
End Function
 
Sửa lần cuối bởi điều hành viên:

phuonghong1997

Yêu THVBA như điếu đổ
Input đầu vào của hàm là gì anh ơi. Nếu chỉ cho cái hàm, muốn thử nghiệm thì phải tự nghĩ data input hả anh.
Anh có nghĩ nếu đưa data mà anh đang chạy báo lỗi, để mọi người chạy thử trên máy mọi người thì hay hơn là đưa code có mấy cái hàm này không?
 

hovannhat

Yêu THVBA
Đúng hơn là add-in này dùng cho máy tính chạy win 32-bit thì được. Còn máy tính chạy win 64-bit thì báo lỗi #REF
 

hovannhat

Yêu THVBA
Input đầu vào của hàm là gì anh ơi. Nếu chỉ cho cái hàm, muốn thử nghiệm thì phải tự nghĩ data input hả anh.
Anh có nghĩ nếu đưa data mà anh đang chạy báo lỗi, để mọi người chạy thử trên máy mọi người thì hay hơn là đưa code có mấy cái hàm này không?
Input đầu vào đơn giản thôi. Ví dụ ô A1 nhập 600 (đường kính ống D=600), ô B1 nhập 25 (chiều dài đường ống là 25m). Sau đó dùng các hàm Dot1, Dot2, Dot3, Dot4 để tìm số đốt cống có chiều dài 1m, 2m, 3m, 4m (nghĩa là với 25m đường ống đã cho, thì gồm bao nhiêu đốt cống 1m, 2m, 3m, 4m mỗi loại. Việc này để nhập vật tư cho đúng vì cống bê tông ly tâm đúc sẵn theo các module độ dài (1, 2, 3, 4)m.
Mình muốn đưa file input đầu vào của mình lên mà k biết cách nào đưa lên cả :(
 
Sửa lần cuối:

hovannhat

Yêu THVBA
Vậy là anh đưa ra kết luận rồi, bây giờ anh muốn mọi người giúp đỡ thế nào hả anh?
Ý mình là không hiểu vì sao code này chạy trên win 32-bit thì được, mà win 64-bit lại không được. Mình không biết có phải 1 số lệnh không tương thích với win-64 bit. Có cách nào để giải quyết vấn đề này không ạ?
 

phuonghong1997

Yêu THVBA như điếu đổ
Anh thay tên hàm dot1 thành dotx1 nhé.
Mã:
Function Dotx1(D, L)
If L = 1 Then Dot1 = 1 Else Dotx1 = 0
If D = 0 And L = 0 Then Dotx1 = 0
End Function
Chạy thử xem.
 
D

Deleted member 199

Guest
Theo tôi biết thì bạn đặt tên bất kỳ mà số chữ cái latin dưới 4 chữ số sẽ không được, không cần biết nội dung bên trong hàm là gì.
Ví dụ các tên không hợp lệnh: ab1, abc1. Do đó cần thêm một chữ cái vào nữa.
Ví dụ hợp lệ: abcd
 

phuonghong1997

Yêu THVBA như điếu đổ
Chạy được rồi là OK rồi anh. #8 anh ấy giải thích rồi đấy ạ.
Tranh thủ đang mừng quá, anh ủng hộ tí đi ạ.
Thông tin ủng hộ diễn đàn:
Tài khoản Ngân hàng thương mại cổ phần Ngoại thương Việt Nam Vietcombank, số tài khoản: 0011003264055
Chi nhánh Quận Hoàn Kiếm, Hà Nội.
Chủ tài khoản: Phạm Minh Hoàng.
 

hovannhat

Yêu THVBA
Theo tôi biết thì bạn đặt tên bất kỳ mà số chữ cái latin dưới 4 chữ số sẽ không được, không cần biết nội dung bên trong hàm là gì.
Ví dụ các tên không hợp lệnh: ab1, abc1. Do đó cần thêm một chữ cái vào nữa.
Ví dụ hợp lệ: abcd
Cảm ơn bạn nhiều. Giờ mới biết cái này luôn á.
 

hovannhat

Yêu THVBA
Chạy được rồi là OK rồi anh. #8 anh ấy giải thích rồi đấy ạ.
Tranh thủ đang mừng quá, anh ủng hộ tí đi ạ.
Thông tin ủng hộ diễn đàn:
Tài khoản Ngân hàng thương mại cổ phần Ngoại thương Việt Nam Vietcombank, số tài khoản: 0011003264055
Chi nhánh Quận Hoàn Kiếm, Hà Nội.
Chủ tài khoản: Phạm Minh Hoàng.
Done rồi bạn nhé.
Tuy không nhiều nhưng cũng là tấm lòng biết ơn của mình.
Cảm ơn diễn đàn rất nhiều.
 

tuhocvba

Administrator
Thành viên BQT
Mình muốn đưa file input đầu vào của mình lên mà k biết cách nào đưa lên cả :(
Nếu upload ảnh minh họa lên diễn đàn, bạn tham khảo cách làm .
Nếu upload file lên diễn đàn, bạn có thể upload lên google drive, rồi kéo link về diễn đàn. .
Hoặc upload lên mediafire rồi kéo link về diễn đàn.
 
T

thanhphong

Guest
Excel 2007+ có 16.384 cột được đánh số từ A đến XFD. Khi bạn đặt tên hàm là Dot1 và sử dụng trên sheet thì Excel sẽ lấy hiểu đấy là địa chỉ ô DOT1 nên báo lỗi.
Đúng như bác đã nói.
Bạn cần đăng nhập để thấy đính kèm

Vì vậy mọi người nên đặt tên hàm tự tạo có tối thiểu 4 chữ latin như bạn @duyhieu61 nói là đúng.
 
B

bvtvba

Guest
Anh thay tên hàm dot1 thành dotx1 nhé.
Mã:
Function Dotx1(D, L)
If L = 1 Then Dot1 = 1 Else Dotx1 = 0
If D = 0 And L = 0 Then Dotx1 = 0
End Function
Chạy thử xem.
Sửa vẫn còn sót đó bạn.
Bạn cần đăng nhập để thấy đính kèm

Sửa đúng:
Mã:
Function Dotx1(D, L)
If L = 1 Then Dotx1 = 1 Else Dotx1 = 0
If D = 0 And L = 0 Then Dotx1 = 0
End Function
 

Euler

Administrator
Thành viên BQT
Các bạn siêu nhỉ. Hôm nay Euler mới biết lỗi này, vì Euler không bao giờ đặt tên hàm ngắn như vậy, hihi.
Bạn cần đăng nhập để thấy đính kèm
 
Top