Lỗi khi thêm vào khai báo (1 người xem)

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

anhquangphan

Thành viên mới
Tham gia
6/6/10
Bài viết
23
Được thích
0
Chào ACE 4rum,

Hiện tại em muốn thêm

chitiet <> "SE duct") And (chitiet <> "SE spiral duct") And (chitiet <> "SE elbow") And (chitiet <> "SE reducer") And (chitiet <> "SE diffuser box") And (chitiet <> "SE air box") And (chitiet <> "SE tee")

Vào đoạn code dưới đây để khai báo mà không được, ACE giúp đỡ

Function S_duct_hh(chitiet As String, a1, b1, a2, b2, l As Double) As Double
If (chitiet <> "SA duct") And (chitiet <> "SA spiral duct") And (chitiet <> "SA elbow") And (chitiet <> "SA reducer") And (chitiet <> "SA diffuser box") And (chitiet <> "SA air box") And (chitiet <> "SA tee") And (chitiet <> "RA duct") And (chitiet <> "RA spiral duct") And (chitiet <> "RA elbow") And (chitiet <> "RA reducer") And (chitiet <> "RA diffuser box") And (chitiet <> "RA air box") And (chitiet <> "RA tee") And (chitiet <> "FA duct") And (chitiet <> "FA spiral duct") And (chitiet <> "FA elbow") And (chitiet <> "FA reducer") And (chitiet <> "FA diffuser box") And (chitiet <> "FA air box") And (chitiet <> "FA tee") And (chitiet <> "EA duct") And (chitiet <> "EA spiral duct") And (chitiet <> "EA elbow") And (chitiet <> "EA reducer") And (chitiet <> "EA diffuser box") And (chitiet <> "EA air box") And (chitiet <> "EA tee") And (chitiet <> "PEA duct") And (chitiet <> "PEA elbow") And (chitiet <> "PEA reducer") And (chitiet <> "PEA air box") And (chitiet <> "PEA diffuser box") Then
S_duct_hh = 0
Else
 
Lần chỉnh sửa cuối:
Chắc VBA cho rằng bạn xài quá nhiều kí tự trong 1 câu lệnh.

Bạn xem câu lệnh dài bao xa thì VBA chấp nhận trước khi bạn muốn thêm kí tự vô nó!
 
Upvote 0
Dear all và thanks có nghĩa là gì? hỏi thăm hay rủa?
Bạn sửa lại thành tiếng Việt rồi chúng ta nói chuyện sửa bài.
 
Upvote 0
1. Tôi thêm vào chả thấy lỗi. Nhưng có lẽ do Excel của bạn đời trước?

2. Chỉ dò có một trị (chitiet). Không lý do gì lại phải dùng IF liên miên như vậy.
Lập một bảng dò là cách tối ưu.
Có nhiều cách để dò bảng:
a - tạo một range gồm các trị để dò, và dùng hàm Application.Match. Nếu giản dị thì mỗi kiểu một ô. Nếu phức tạp hơn thì mảng 2 chiều, cột thứ nhất là từ đầu tiên và cột thứ hai là các từ còn lại.
b - tạo một mảng các trị, và dùng vòng lặp dò mảng
c - tạo một chuõi chứa các trị, và dùng hàm InStr để dò.
Tuỳ theo độ kết nối giữa các trị mà dùng cách nào tốt hơn.
 
Upvote 0
Cám ơn anh/chị VetMini, :D

Em rất gà về VBA nên chỉ biết sử dụng IF như vậy, em gửi anh/chị VetMini file đính kèm .
anh/ chị hướng dẫn em thực hiện theo 3 cách a ,b, c nhé . Coi như em được mở mang tầm mắt luôn. Cám ơn VietMini rất nhiều

Ah nhờ anh/chị Vetmini xem giúp có cách nào cho lệnh ở ô L7 ngắn hơn không ,nhìn rất lằng nhằng khó chịu

a - tạo một range gồm các trị để dò, và dùng hàm Application.Match. Nếu giản dị thì mỗi kiểu một ô. Nếu phức tạp hơn thì mảng 2 chiều, cột thứ nhất là từ đầu tiên và cột thứ hai là các từ còn lại.
b - tạo một mảng các trị, và dùng vòng lặp dò mảng
c - tạo một chuõi chứa các trị, và dùng hàm InStr để dò.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào ACE 4rum,

Hiện tại em muốn thêm

chitiet <> "SE duct") And (chitiet <> "SE spiral duct") And (chitiet <> "SE elbow") And (chitiet <> "SE reducer") And (chitiet <> "SE diffuser box") And (chitiet <> "SE air box") And (chitiet <> "SE tee")

Vào đoạn code dưới đây để khai báo mà không được, ACE giúp đỡ

Function S_duct_hh(chitiet As String, a1, b1, a2, b2, l As Double) As Double
If (chitiet <> "SA duct") And (chitiet <> "SA spiral duct") And (chitiet <> "SA elbow") And (chitiet <> "SA reducer") And (chitiet <> "SA diffuser box") And (chitiet <> "SA air box") And (chitiet <> "SA tee") And (chitiet <> "RA duct") And (chitiet <> "RA spiral duct") And (chitiet <> "RA elbow") And (chitiet <> "RA reducer") And (chitiet <> "RA diffuser box") And (chitiet <> "RA air box") And (chitiet <> "RA tee") And (chitiet <> "FA duct") And (chitiet <> "FA spiral duct") And (chitiet <> "FA elbow") And (chitiet <> "FA reducer") And (chitiet <> "FA diffuser box") And (chitiet <> "FA air box") And (chitiet <> "FA tee") And (chitiet <> "EA duct") And (chitiet <> "EA spiral duct") And (chitiet <> "EA elbow") And (chitiet <> "EA reducer") And (chitiet <> "EA diffuser box") And (chitiet <> "EA air box") And (chitiet <> "EA tee") And (chitiet <> "PEA duct") And (chitiet <> "PEA elbow") And (chitiet <> "PEA reducer") And (chitiet <> "PEA air box") And (chitiet <> "PEA diffuser box") Then
S_duct_hh = 0
Else
Nếu biết sử dụng công cụ Dictionary thì nạp hết cái rừng đó vào Dicionary, sau đó muốn dò kiểu gì mà chẳng được chứ.
 
Upvote 0
Chả biết bạn muốn làm cái gì. Sửa theo hàm:

Mã:
Function S_duct_hh(chitiet As String, a1, b1, a2, b2, l As Double) As Double
' lập 1 array để chứa các trị cần so sánh, và dùng hàm Match để tìm
Dim aChiTiet
aChiTiet = split("SA duct,SA spiral duct,SA elbow,SA reducer, ...", "," ) ' có bao nhiêu trị thì cho vào
If IsError(Application.Match( chitiet, aChiTiet, 0 )) Then
S_duct_hh = 0
Else
 
Lần chỉnh sửa cuối:
Upvote 0
Ý MÌNH LÀ THAY ĐỔI MÀU ĐỎ BẰNG CODE KHÁC TƯƠNG ĐƯƠNG CHO TỐT VÀ HIỆU QUẢ HƠN

Function S_duct_hh(chitiet As String, a1, b1, a2, b2, l As Double) As Double
If (chitiet <> "SA duct") And (chitiet <> "SA spiral duct") And (chitiet <> "SA elbow") And (chitiet <> "SA reducer") And (chitiet <> "SA diffuser box") And (chitiet <> "SA air box") And (chitiet <> "SA tee") And (chitiet <> "RA duct") And (chitiet <> "RA spiral duct") And (chitiet <> "RA elbow") And (chitiet <> "RA reducer") And (chitiet <> "RA diffuser box") And (chitiet <> "RA air box") And (chitiet <> "RA tee") And (chitiet <> "FA duct") And (chitiet <> "FA spiral duct") And (chitiet <> "FA elbow") And (chitiet <> "FA reducer") And (chitiet <> "FA diffuser box") And (chitiet <> "FA air box") And (chitiet <> "FA tee") And (chitiet <> "EA duct") And (chitiet <> "EA spiral duct") And (chitiet <> "EA elbow") And (chitiet <> "EA reducer") And (chitiet <> "EA diffuser box") And (chitiet <> "EA air box") And (chitiet <> "EA tee") And (chitiet <> "PEA duct") And (chitiet <> "PEA elbow") And (chitiet <> "PEA reducer") And (chitiet <> "PEA air box") And (chitiet <> "PEA diffuser box") Then
S_duct_hh = 0
Else
indicator = False
Select Case chitiet
Case "SA duct"
S_duct_hh = 2 * (a1 + b1) * l / 1000000
indicator = True
Case "SA spiral duct"
S_duct_hh = 3.14 * a1 * 0.001 * (l / 1000)
indicator = True

End Select
If indicator = False Then
S_duct_hh = "N#A"
End If
End If
End Function


VÀ ĐOẠN "=IFERROR(IF(OR($C7="SA duct",$C7="SA spiral duct",$C7="SA Flexible",$C7="RA duct",$C7="RA spiral duct",$C7="RA Flexible",$C7="FA duct",$C7="FA spiral duct",$C7="FA Flexible",$C7="EA duct",$C7="EA spiral duct",$C7="EA Flexible",$C7="PEA duct",$C7="PEA spiral duct",$C7="PEA Flexible"),J7*K7,K7),"")"

Ở Ô L7 LÀM THẾ NÀO CHO NGẮN GỌN VÀ TỐT HƠN.
 
Upvote 0
Mình chỉ bạn hướng chia để trị nà:

Bạn khai báo thêm 1 biến, như
Mã:
 [B]Dim Khong As Boolean [/B]

Sau đó ta khảo sát theo từng nhóm, như nhóm 1 (theo mình hiểu)

PHP:
 If (chitiet <> "SA duct") And (chitiet <> "SA spiral duct") And (chitiet <> "SA elbow") And (chitiet <> "SA reducer") _
      And (chitiet <> "SA diffuser box") And (chitiet <> "SA air box") And (chitiet <> "SA tee") then
      Khong = True
 Else
      Khong =False:                      GoTo GPE
 End If
Tiếp sau đó là với các nhóm khác, như RA, FA, EA, PEA & SE của bạn

Chỉ sau đó, ta xét 1 lần biến Khong này
Bằng 1 dòng lệnh ngắn cũn mà thôi.:
GPE: If Khong Then . . . .

Mà bạn cần cắt dòng lệnh quá dài thành nhiều dòng lệnh để dễ bề quản chúng thì hơn.

Chúc thành công.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Lỗi khi thêm vào khai báo

Bạn khai báo thêm 1 biến, như
Mã:
 [B]Dim Khong As Boolean [/B]

Sau đó ta khảo sát theo từng nhóm, như nhóm 1 (theo mình hiểu)

PHP:
 If (chitiet <> "SA duct") And (chitiet <> "SA spiral duct") And (chitiet <> "SA elbow") And (chitiet <> "SA reducer") _
      And (chitiet <> "SA diffuser box") And (chitiet <> "SA air box") And (chitiet <> "SA tee") then
   Khong = True
 End If
Tiếp sau đó là với các nhóm khác, như RA, FA, EA, PEA & SE của bạn

Chỉ sau đó, ta xét 1 lần biến Khong này
Bằng 1 dòng lệnh ngắn cũn mà thôi.

Mà bạn cần cắt dòng lệnh quá dài thành nhiều dòng lệnh để dễ bề quản chúng thì hơn.

Chúc thành công.

Cám ơn để mình thử xem
 
Upvote 0
Bạn khai báo thêm 1 biến, như
Mã:
 [B]Dim Khong As Boolean [/B]

Sau đó ta khảo sát theo từng nhóm, như nhóm 1 (theo mình hiểu)

PHP:
 If (chitiet <> "SA duct") And (chitiet <> "SA spiral duct")  And (chitiet <> "SA elbow") And (chitiet <> "SA reducer") _
      And (chitiet <> "SA diffuser box") And (chitiet <> "SA air box") And (chitiet <> "SA tee") then
   Khong = True
 End If
Tiếp sau đó là với các nhóm khác, như RA, FA, EA, PEA & SE của bạn

Chỉ sau đó, ta xét 1 lần biến Khong này
Bằng 1 dòng lệnh ngắn cũn mà thôi.

Mà bạn cần cắt dòng lệnh quá dài thành nhiều dòng lệnh để dễ bề quản chúng thì hơn.

Chúc thành công.

Theo đúng lý thuyết thì cắt ra nhiều dễ bảo quản hơn.
Nhưng ở đây, bài này chỉ so sánh duy nhất một trị (chitiet). Vì vậy nếu làm đúng đắn thì nó phải là phương pháp dò mảng danh sách.
Nếu chitiet không có trong mảng danh sách thì làm gì đó. Nếu có thì làm cái khác.

Để thực hiện mảng để dò có nhiều cách:
1. lập mảng trên sheet
2. lập mảng bằng hàm Array(...)
3. lập mảng bằng hàm Split(...)
4. lập mảng bằng chuỗi cá dấu ngăn cách (delimiter)
5. lập dictionary (như đề nghị ở bài #7 của quanghai1969)
Cách 1-3 dùng hàm Match của worksheet để dò. Cách 4 dùng InStr để dò. Cách 5 dùng dic để dò.

Trong tất cả các cách trên cách thứ 3 là cách hữu hiệu và dễ chỉnh sửa nhất. Dó đó tôi đã chỉ dẫn ở bài #8.

Tuy nhiên, chủ thớt không chịu đọc, lại còn hằn học đòi "CHO TỐT VÀ HIỆU QUẢ HƠN" cho nên tôi chào thua vậy.
Theo luật trao đổi mạng (netiquette), nói chuyện dùng từ ngữ viết hoa là tương đương với hét vào lỗ tai người ta.
 
Upvote 0
Mình thì lại nghỉ rằng:
Trình độ chủ topic còn chưa biết ngắt dòng lệnh dài, thì kiến thức mảng này nọ có khi chưa thể tiêu hóa ngay được; Vì vậy cho là "KHÓ hiểu & KÉM HIỆU QUẢ ngay lúc này với tác giả"

Những mong là mình hiểu đúng tác giả

Chào thân ái!
 
Upvote 0
Mình thì lại nghỉ rằng:
Trình độ chủ topic còn chưa biết ngắt dòng lệnh dài, thì kiến thức mảng này nọ có khi chưa thể tiêu hóa ngay được; Vì vậy cho là "KHÓ hiểu & KÉM HIỆU QUẢ ngay lúc này với tác giả"

Những mong là mình hiểu đúng tác giả

Chào thân ái!

Đúng vậy, tôi cũng nghĩ thế cho nên ở bài #10 tôi nói thẳng chủ thớt cần học thêm code trước khi nghĩ đến chuyện "TỐT" và "HIỆU QUẢ".

Tôi chỉ quên nhắc là chủ còn phải học cách phân tích vấn đề: chỉ xét một trị, người ta dò bảng, không ai dùng IF dài thậm thượt như vậy. Điều này áp dụng cho cả lô gíc lập trình lẫn lô gic ngoài đời.

Lô gíc đúng: nếu trị không có trong nhóm a,b,c,d,e thì...
Lô gíc lằng ngoằng: nếu trị không phải là a cũng không phải là b cũng không phải là c cũng không phải là d cũng không phải là e thì ...
 
Upvote 0
Lỗi khi thêm vào khai báo

Theo đúng lý thuyết thì cắt ra nhiều dễ bảo quản hơn.
Nhưng ở đây, bài này chỉ so sánh duy nhất một trị (chitiet). Vì vậy nếu làm đúng đắn thì nó phải là phương pháp dò mảng danh sách.
Nếu chitiet không có trong mảng danh sách thì làm gì đó. Nếu có thì làm cái khác.

Để thực hiện mảng để dò có nhiều cách:
1. lập mảng trên sheet
2. lập mảng bằng hàm Array(...)
3. lập mảng bằng hàm Split(...)
4. lập mảng bằng chuỗi cá dấu ngăn cách (delimiter)
5. lập dictionary (như đề nghị ở bài #7 của quanghai1969)
Cách 1-3 dùng hàm Match của worksheet để dò. Cách 4 dùng InStr để dò. Cách 5 dùng dic để dò.

Trong tất cả các cách trên cách thứ 3 là cách hữu hiệu và dễ chỉnh sửa nhất. Dó đó tôi đã chỉ dẫn ở bài #8.

Tuy nhiên, chủ thớt không chịu đọc, lại còn hằn học đòi "CHO TỐT VÀ HIỆU QUẢ HƠN" cho nên tôi chào thua vậy.
Theo luật trao đổi mạng (netiquette), nói chuyện dùng từ ngữ viết hoa là tương đương với hét vào lỗ tai người ta.

Đúng như bác Chanh TQ nói em rất gà , em chỉ là kỹ sư cơ điện không phải là một IT nên mấy việc bác Vetmini nói nó quá cao xa với em. Em có thể đọc nhưng sẽ mất nhiều thời gian nên với trường hợp trong bài toán này em rất mong muốn bác làm luôn trên file em gửi thì là tốt nhất (bác xem file đính kèm, pass VBA 123456) . Rất cảm ơn các bác đã giúp em.
 

File đính kèm

Upvote 0
Nói chuyện ngoài lề một tí. Tôi thắc mắc tại sao có nhiều người (không phải chỉ riêng ở đây, mà nhiều diễn đàn khác nữa) vẫn hay nói rằng "mình là kỹ sư gì gì đó nên không rành lắm về lập trình..."

Theo như tôi biết thì chương trình kỹ sư có dạy sơ qua về lập trình. Không nhiều nhưng cơ bản là có đủ.
 
Upvote 0
Nếu em có thể làm được thì em cần gì phải lên diễn đàn để hỏi. Có ai giúp với
 
Upvote 0
PHP:
Option Explicit
Function S_Duct_HH(ChiTiet As String, a1, b1, a2, b2, l As Double) As Double
 Dim Khong As Boolean
 
 If ChiTiet <> "SA duct" And ChiTiet <> "SA spiral duct" And ChiTiet <> "SA elbow" And ChiTiet <> "SA reducer" And _
    ChiTiet <> "SA diffuser box" And ChiTiet <> "SA air box" And ChiTiet <> "SA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "RA duct" And ChiTiet <> "RA spiral duct" And ChiTiet <> "RA elbow" And ChiTiet <> "RA reducer" And _
    ChiTiet <> "RA diffuser box" And ChiTiet <> "RA air box" And ChiTiet <> "RA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "FA duct" And ChiTiet <> "FA spiral duct" And ChiTiet <> "FA elbow" And ChiTiet <> "FA reducer" And _
    ChiTiet <> "FA diffuser box" And ChiTiet <> "FA air box" And ChiTiet <> "FA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "EA duct" And ChiTiet <> "EA spiral duct" And ChiTiet <> "EA elbow" And ChiTiet <> "EA reducer" And _
    ChiTiet <> "EA diffuser box" And ChiTiet <> "EA air box" And ChiTiet <> "EA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "PEA duct" And ChiTiet <> "PEA elbow" And ChiTiet <> "PEA reducer" And ChiTiet <> "PEA air box" And _
    ChiTiet <> "PEA diffuser box" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "SE duct" And ChiTiet <> "SE spiral duct" And ChiTiet <> "SE elbow" And ChiTiet <> "SE reducer" And _
    ChiTiet <> "SE diffuser box" And ChiTiet <> "SE air box" And ChiTiet <> "SE tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 
GPE:                                If Khong Then S_Duct_HH = 0
End If
End Function
 
Upvote 0
PHP:
Option Explicit
Function S_Duct_HH(ChiTiet As String, a1, b1, a2, b2, l As Double) As Double
 Dim Khong As Boolean
 
 If ChiTiet <> "SA duct" And ChiTiet <> "SA spiral duct" And ChiTiet <> "SA elbow" And ChiTiet <> "SA reducer" And _
    ChiTiet <> "SA diffuser box" And ChiTiet <> "SA air box" And ChiTiet <> "SA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "RA duct" And ChiTiet <> "RA spiral duct" And ChiTiet <> "RA elbow" And ChiTiet <> "RA reducer" And _
    ChiTiet <> "RA diffuser box" And ChiTiet <> "RA air box" And ChiTiet <> "RA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "FA duct" And ChiTiet <> "FA spiral duct" And ChiTiet <> "FA elbow" And ChiTiet <> "FA reducer" And _
    ChiTiet <> "FA diffuser box" And ChiTiet <> "FA air box" And ChiTiet <> "FA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "EA duct" And ChiTiet <> "EA spiral duct" And ChiTiet <> "EA elbow" And ChiTiet <> "EA reducer" And _
    ChiTiet <> "EA diffuser box" And ChiTiet <> "EA air box" And ChiTiet <> "EA tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "PEA duct" And ChiTiet <> "PEA elbow" And ChiTiet <> "PEA reducer" And ChiTiet <> "PEA air box" And _
    ChiTiet <> "PEA diffuser box" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 If ChiTiet <> "SE duct" And ChiTiet <> "SE spiral duct" And ChiTiet <> "SE elbow" And ChiTiet <> "SE reducer" And _
    ChiTiet <> "SE diffuser box" And ChiTiet <> "SE air box" And ChiTiet <> "SE tee" Then
    Khong = True
 Else
    Khong = False:                  GoTo GPE
 End If
 
GPE:                                If Khong Then S_Duct_HH = 0
End If
End Function

Cám ơn bác rất nhiều
 
Upvote 0
Nó báo lỗi ở dòng này nghĩa là sao hả các bác

Option Explicit
=> Function S_Duct_HH(ChiTiet As String, a1, b1, a2, b2, l As Double) As Double
Dim Khong As Boolean

If ChiTiet <> "SA duct" And ChiTiet <> "SA spiral duct" And ChiTiet <> "SA elbow" And ChiTiet <> "SA reducer" And _
ChiTiet <> "SA diffuser box" And ChiTiet <> "SA air box" And ChiTiet <> "SA tee" Then
Khong = True
Else
Khong = False: GoTo GPE
End If
If ChiTiet <> "RA duct" And ChiTiet <> "RA spiral duct" And ChiTiet <> "RA elbow" And ChiTiet <> "RA reducer" And _
ChiTiet <> "RA diffuser box" And ChiTiet <> "RA air box" And ChiTiet <> "RA tee" Then
Khong = True
Else
Khong = False: GoTo GPE
End If
If ChiTiet <> "FA duct" And ChiTiet <> "FA spiral duct" And ChiTiet <> "FA elbow" And ChiTiet <> "FA reducer" And _
ChiTiet <> "FA diffuser box" And ChiTiet <> "FA air box" And ChiTiet <> "FA tee" Then
Khong = True
Else
Khong = False: GoTo GPE
End If
If ChiTiet <> "EA duct" And ChiTiet <> "EA spiral duct" And ChiTiet <> "EA elbow" And ChiTiet <> "EA reducer" And _
ChiTiet <> "EA diffuser box" And ChiTiet <> "EA air box" And ChiTiet <> "EA tee" Then
Khong = True
Else
Khong = False: GoTo GPE
End If
If ChiTiet <> "PEA duct" And ChiTiet <> "PEA elbow" And ChiTiet <> "PEA reducer" And ChiTiet <> "PEA air box" And _
ChiTiet <> "PEA diffuser box" Then
Khong = True
Else
Khong = False: GoTo GPE
End If
If ChiTiet <> "SE duct" And ChiTiet <> "SE spiral duct" And ChiTiet <> "SE elbow" And ChiTiet <> "SE reducer" And _
ChiTiet <> "SE diffuser box" And ChiTiet <> "SE air box" And ChiTiet <> "SE tee" Then
Khong = True
Else
Khong = False: GoTo GPE
End If

GPE: If Khong Then S_Duct_HH = 0
End If
End Function

Else
indicator = False
Select Case ChiTiet
Case "SA duct"
S_Duct_HH = 2 * (a1 + b1) * l / 1000000
indicator = True
Case "SA spiral duct"
S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
indicator = True
Case "SA reducer"
S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
indicator = True
Case "SA elbow"
S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
indicator = True
Case "SA diffuser box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
indicator = True
Case "SA air box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
indicator = True
Case "SA tee"
S_Duct_HH = 1.8 * 3.14 * b1 * (a1 + b1) / 1000000
indicator = True

Case "RA duct"
S_Duct_HH = 2 * (a1 + b1) * l / 1000000
indicator = True
Case "RA spiral duct"
S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
indicator = True
Case "RA reducer"
S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
indicator = True
Case "RA elbow"
S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
indicator = True
Case "RA diffuser box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
indicator = True
Case "RA air box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
indicator = True
Case "RA tee"
S_Duct_HH = 1.8 * 3.14 * b1 * (a1 + b1) / 1000000
indicator = True

Case "FA duct"
S_Duct_HH = 2 * (a1 + b1) * l / 1000000
indicator = True
Case "FA spiral duct"
S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
indicator = True
Case "FA reducer"
S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
indicator = True
Case "FA elbow"
S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
indicator = True
Case "FA diffuser box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
indicator = True
Case "FA air box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
indicator = True
Case "FA tee"
S_Duct_HH = 1.8 * 3.14 * b1 * (a1 + b1) / 1000000
indicator = True

Case "EA duct"
S_Duct_HH = 2 * (a1 + b1) * l / 1000000
indicator = True
Case "EA spiral duct"
S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
indicator = True
Case "EA reducer"
S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
indicator = True
Case "EA elbow"
S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
indicator = True
Case "EA diffuser box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
indicator = True
Case "EA air box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
indicator = True
Case "EA tee"
S_Duct_HH = 1.8 * 3.14 * b1 * (a1 + b1) / 1000000
indicator = True

Case "SE duct"
S_Duct_HH = 2 * (a1 + b1) * l / 1000000
indicator = True
Case "SE spiral duct"
S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
indicator = True
Case "SE reducer"
S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
indicator = True
Case "SE elbow"
S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
indicator = True
Case "SE diffuser box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
indicator = True
Case "SE air box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
indicator = True
Case "SE tee"
S_Duct_HH = 1.8 * 3.14 * b1 * (a1 + b1) / 1000000
indicator = True

Case "PEA duct"
S_Duct_HH = 2 * (a1 + b1) * l / 1000000
indicator = True
Case "PEA spiral duct"
S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
indicator = True
Case "PEA reducer"
S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
indicator = True
Case "PEA elbow"
S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
indicator = True
Case "PEA diffuser box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
indicator = True
Case "PEA air box"
S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
indicator = True

End Select
If indicator = False Then
S_Duct_HH = "N#A"
End If
End If
End Function
 
Upvote 0
Nó báo lỗi ở dòng này nghĩa là sao hả các bác

Option Explicit
=> Function S_Duct_HH(ChiTiet As String, a1, b1, a2, b2, l As Double) As Double
Dim Khong As Boolean
. . . . .
End Function

Bạn đưa 1 rừng code lên nhưng không đưa file lên thì chỉ có thánh mới chỉ ra cho bạn chổ sai mà thôi!

Ở khía cạnh khác, như là mình thì các tham biến a1, b1, a2, . . . I kia mình sẽ thay bằng những từ ngữ khả dĩ gợi nhớ hơn, như

A1 => Bạn
B1 => Bồ
A2 => Người_Thương
B2 => Vợ (hay Chồng)
I => SốTiềnThuĐược
. . .
Vậy mà cũng lắm lúc còn sai tơi bời nữa là đằng khác;
Nên mình khuyên bạn khoan bắt chước mấy ông/bà "Hàn lâm" làm gì cho sớm; Hãy tường minh mọi thứ; Hãy trực quan mọi thứ, hãy cố gọi đúng tên cúng cơm của chúng, nếu được!


 
Upvote 0
Bạn đưa 1 rừng code lên nhưng không đưa file lên thì chỉ có thánh mới chỉ ra cho bạn chổ sai mà thôi!

Ở khía cạnh khác, như là mình thì các tham biến a1, b1, a2, . . . I kia mình sẽ thay bằng những từ ngữ khả dĩ gợi nhớ hơn, như

A1 => Bạn
B1 => Bồ
A2 => Người_Thương
B2 => Vợ (hay Chồng)
I => SốTiềnThuĐược
. . .
Vậy mà cũng lắm lúc còn sai tơi bời nữa là đằng khác;
Nên mình khuyên bạn khoan bắt chước mấy ông/bà "Hàn lâm" làm gì cho sớm; Hãy tường minh mọi thứ; Hãy trực quan mọi thứ, hãy cố gọi đúng tên cúng cơm của chúng, nếu được!



Bạn xem file đính kèm nhé, pass 123456
 

File đính kèm

Upvote 0
Tôi không thích tải file có code sẵn. Lỡ code nó sửa gì trong máy thì mất công reset lại lắm.

Nhìn theo code trên của bạn thì sai cả đống, không còn chỗ nào để sửa nữa. Cho nên tôi chỉ đọc code và đoán bạn muốn làm gì.
Theo chỗ tôi đoán thì bạn chỉ làm một con toán tính một trị thông gió gì đó tuỳ theo loại dạng của đường ống.

Và dạng thiết kế của bạn chỉ có mấy loại: chúng thuộc loại "SA, RA, FA, EA, SE, PEA", và dạng "duct, sprial duct, reducer, elbow, diffuser box, air box, tee" - trừ loại PEA thì không có tee. Và theo như tôi nhìn thì nếu thiết kế cùng dạng thì con toán in hệt nhau.

Nếu đúng như vậy thì bài bạn làm sai tét bét. Là dân kỹ thuật mà bạn không chịu chia loại trước khi làm.

1. Block Select Case đã phân các kiểu loại rồi, các block if để dò chủng loại hoàn toàn dư thừa.

2. Các kiểu giống nhau tính giống nhau, bạn gõ lại mỗi con toán 5 lần ==> số gõ lai là 35 lần. Không bị lỗi cũng uổng.

Mã:
Option Explicit

Function S_Duct_HH(ChiTiet As String, a1, b1, a2, b2, l As Double) As Double
Dim pFix As String
S_Duct_HH = 0
pFix = Split(ChiTiet, " ")(0)
Select Case pFix
Case "SA", "RA", "FA", "EA", "SE", "PEA"
    Select Case Trim(Replace(ChiTiet, pFix, ""))
    Case "duct"
        S_Duct_HH = 2 * (a1 + b1) * l / 1000000
    Case "spiral duct"
        S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
    Case "reducer"
        S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) _
                    + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
    Case "elbow"
        S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
    Case "diffuser box"
        S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
    Case "air box"
        S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
    Case "tee"
        If pFix <> "PEA" Then _
            S_Duct_HH = 1.8 * 3.14 * b1 * (a1 + b1) / 1000000
    End Select
Case Else
End Select
End Function
 
Upvote 0
Tôi không thích tải file có code sẵn. Lỡ code nó sửa gì trong máy thì mất công reset lại lắm.

Nhìn theo code trên của bạn thì sai cả đống, không còn chỗ nào để sửa nữa. Cho nên tôi chỉ đọc code và đoán bạn muốn làm gì.
Theo chỗ tôi đoán thì bạn chỉ làm một con toán tính một trị thông gió gì đó tuỳ theo loại dạng của đường ống.

Và dạng thiết kế của bạn chỉ có mấy loại: chúng thuộc loại "SA, RA, FA, EA, SE, PEA", và dạng "duct, sprial duct, reducer, elbow, diffuser box, air box, tee" - trừ loại PEA thì không có tee. Và theo như tôi nhìn thì nếu thiết kế cùng dạng thì con toán in hệt nhau.

Nếu đúng như vậy thì bài bạn làm sai tét bét. Là dân kỹ thuật mà bạn không chịu chia loại trước khi làm.

1. Block Select Case đã phân các kiểu loại rồi, các block if để dò chủng loại hoàn toàn dư thừa.

2. Các kiểu giống nhau tính giống nhau, bạn gõ lại mỗi con toán 5 lần ==> số gõ lai là 35 lần. Không bị lỗi cũng uổng.

Mã:
Option Explicit

Function S_Duct_HH(ChiTiet As String, a1, b1, a2, b2, l As Double) As Double
Dim pFix As String
S_Duct_HH = 0
pFix = Split(ChiTiet, " ")(0)
Select Case pFix
Case "SA", "RA", "FA", "EA", "SE", "PEA"
    Select Case Trim(Replace(ChiTiet, pFix, ""))
    Case "duct"
        S_Duct_HH = 2 * (a1 + b1) * l / 1000000
    Case "spiral duct"
        S_Duct_HH = 3.14 * a1 * 0.001 * (l / 1000)
    Case "reducer"
        S_Duct_HH = ((a1 + a2) * Sqr((b1 - b2) * (b1 - b2) / 4 + l * l) _
                    + (b1 + b2) * Sqr((a1 - a2) * (a1 - a2) / 4 + l * l)) / 1000000
    Case "elbow"
        S_Duct_HH = 3.14 * b1 * (a1 + b1) / 1000000
    Case "diffuser box"
        S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1 + 3.14 * (l - 50) * 100) / 1000000
    Case "air box"
        S_Duct_HH = (2 * (a1 + b1) * l + a1 * b1) / 1000000
    Case "tee"
        If pFix <> "PEA" Then _
            S_Duct_HH = 1.8 * 3.14 * b1 * (a1 + b1) / 1000000
    End Select
Case Else
End Select
End Function

Cám ơn bác Vetmini , đúng là cao nhân chỉ bảo có khác :D
 
Upvote 0

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

Back
Top Bottom