Giúp sửa lỗi VBA với câu lệnh if và chương trình con (2 người xem)

Liên hệ QC

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

jackinchun123

Thành viên mới
Tham gia
14/3/15
Bài viết
4
Được thích
1
Mình có lập 1 chương trình con đơn giản như sau, nhưng khi chạy bị lỗi Else without if và lỗi khi gọi chương trình con. Mong được giúp sửa lỗi và giải thích vì sao sai. Thank
 

File đính kèm

Mình có lập 1 chương trình con đơn giản như sau, nhưng khi chạy bị lỗi Else without if và lỗi khi gọi chương trình con. Mong được giúp sửa lỗi và giải thích vì sao sai. Thank

Nên sửa lại thành

trong sub buoc1

PHP:
       If a(i, j) > 0 Then
            k = k + 1
            If k < M Then
                Debug.Print "chua tim duoc nghiem"
            Else
                Debug.Print "nghiem la Z= " & Str(a(i, M))
            End If
       End If

Thay vì thế này như cũ
PHP:
       If a(i, j) > 0 Then k = k + 1
         If k < M Then Debug.Print "chua tim duoc nghiem"
           Else: Debug.Print "nghiem la Z= " & Str(a(i, M))
         End If
       End If

Tại sao?, vì khi viết lệnh IF nếu viết ngay sau then có lệnh (ví dụ k= k+1) như
If a(i, j) > 0 Then k = k + 1
thì VBA hiểu là IF đã kết thúc không có Else hay lệnh nào khác kèm với IF này cả
(chỉ khi 1 lệnh duy nhất ng ta mới viết thế, hoặc nếu có thì phải nối dấu ":" song hạn chế sử dụng)

còn các cái lỗi sub sau tương tự, bạn tự làm nốt tốt?
 
Lần chỉnh sửa cuối:
Từ bài trên thấy rằng

Tốt hơn hết, đặc biệt mới làm quen, khi viết VBA nên viết 1 cách bài bản theo mẫu lệnh theo đúng ngôn ngữ lập trình, thay vì học theo kiểu viết ngắn ngắn (rút ngắn dòng) , rất khó kiểm soát

Khi lập trình nhiều sẽ thấy, càng chuyên nghiệp thì càng cần viết đúng mẫu, không lo việc dài ngắn số dòng. Chỉ chăm chăm lo thi ngắn dòng đó là tâm lý của người chưa chuyên nghiệp.
 
Cảm ơn bạn rất nhiều. Cho mình hỏi sao khi chạy mình vẫn mắc lỗi này dù đã sửa lại câu lệnh như trên.
 

File đính kèm

  • 2.jpg
    2.jpg
    17.2 KB · Đọc: 34
Cảm ơn bạn rất nhiều. Cho mình hỏi sao khi chạy mình vẫn mắc lỗi này dù đã sửa lại câu lệnh như trên.

Vì buoc1 là SUB nên khi gọi buoc1 và truyên tham số thì có 2 kiểu gọi sub như sau
PHP:
buoc1 a

hoặc

PHP:
Call buoc1(a)

Trường hợp của bạn đang nhầm lẫn giữa 2 cái đó, nên sai là chắc,


--------------------
thêm vào đó theo tôi thì nên thống nhất cả chỗ

sửa
PHP:
ReDim a(1 To N, 1 To M)
thành
PHP:
ReDim a(1 To N, 1 To M) As Double
dù chưa kiểm tra xem cái này có ảnh hưởng không, nhưng nên thông nhất cả kiểu dữ liệu truyền
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom