Thủ tục Sub sử dụng nhiều biến, khai báo ntn?

  • Thread starter adam_tran
  • Ngày gửi
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#1
Khi tớ viết thủ tục sử dụng hơn 1 biến, nó báo lỗi "Expect :=", xin hỏi tại sao và cách khắc phục.
Thí dụ:
Sub Tinh(a As Long)
Selection = a
For i = 1 To 10
Selection.Offset(1, 0).Select
Selection = a
Next
End Sub
_________________
Sub Chaythu()
Tinh (15)
End Sub

Khi tớ chạy Macro "Chaythu" thì nó sẽ đưa 1 vùng gồm 11 dòng và 1 cột có giá trị là 15. Thủ tục này chạy tốt không có vấn đề gì. Nhưng khi khai báo 2 biến cho thủ tục "Tinh", nó báo lỗi.
Thí dụ:
Sub Tinhtoan(a As Long, b As Long)
Selection = a + b
For i = 1 To 10
Selection.Offset(1, 0).Select
Selection = a + b
Next
End Sub
__________________
Sub Chaythu2()
Tinhtoan (15, 20) 'Nó báo lỗi ở chỗ này.
End Sub

Lẽ ra khi chạy macro "Chaythu2), thì nó sẽ đưa 1 vùng gồm 11 dòng và 1 cột có giá trị là 15 + 20 = 35!
Nếu hàm Function dùng hơn 1 biến thì OK, không có vấn đề gì!
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#2
adam_tran nói:
Khi tớ viết thủ tục sử dụng hơn 1 biến, nó báo lỗi "Expect :=", xin hỏi tại sao và cách khắc phục.
Thí dụ:
Sub Tinh(a As Long)
Selection = a
For i = 1 To 10
Selection.Offset(1, 0).Select
Selection = a
Next
End Sub
_________________
Sub Chaythu()
Tinh (15)
End Sub

Khi tớ chạy Macro "Chaythu" thì nó sẽ đưa 1 vùng gồm 11 dòng và 1 cột có giá trị là 15. Thủ tục này chạy tốt không có vấn đề gì. Nhưng khi khai báo 2 biến cho thủ tục "Tinh", nó báo lỗi.
Thí dụ:
Sub Tinhtoan(a As Long, b As Long)
Selection = a + b
For i = 1 To 10
Selection.Offset(1, 0).Select
Selection = a + b
Next
End Sub
__________________
Sub Chaythu2()
Tinhtoan (15, 20) 'Nó báo lỗi ở chỗ này.
End Sub

Lẽ ra khi chạy macro "Chaythu2), thì nó sẽ đưa 1 vùng gồm 11 dòng và 1 cột có giá trị là 15 + 20 = 35!
Nếu hàm Function dùng hơn 1 biến thì OK, không có vấn đề gì!
Xin bạn xem lại:
Sub Tinh(a As Long)
Selection = a
'Đây là biến kiểu gì?
For i = 1 To 10
'Tại sao lại như thế này?
Selection.Offset(1, 0).Select
Selection = a
Next
End Sub
Vâng nói chung là bạn nên khai báo biến lại, đồng thời phải hiểu được ý đồ của mình. Theo tôi nghĩ bạn nên dùng biến kiểu range.
Chúc bạn khỏe.
Lê Văn Duyệt
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#3
levanduyet nói:
Vâng nói chung là bạn nên khai báo biến lại, đồng thời phải hiểu được ý đồ của mình. Theo tôi nghĩ bạn nên dùng biến kiểu range.
Chúc bạn khỏe.
Lê Văn Duyệt
Cám ơn anh Duyệt, híc, em cũng mò ra được rồi.
Ý của em là, khi coding 1 thủ tục ThutucA có gọi thủ tục ThutucB, mà ThutucB có hơn 1 tham số thì ThutucA báo lỗi.
Thí dụ:
Sub ThutucB(a as long, b as long)
""""""""
Endsub
Sub ThuctucA()
ThuctucB (5, 10) '<= Lỗi ngay chỗ này!
End Sub

Trong code trên, ThutucA sẽ gọi ThutucB với 2 tham số a = 5, b = 10! Nó lỗi ở chỗ khi gọi thủ tục có nhiều hơn 1 tham số, ta phải dùng lệnh Call! Híc, thế đấy! Đoạn mã trên thêm chữ Call là ngon lành;
Sub ThuctucA()
Call ThuctucB (5, 10) '<= Không báo lỗi nữa!
End Sub
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#4
Như thế này có được không các Bác thân mến?!

Sub ThTucA(ii as integer, ij as integer)
msgbox str(ii + ij)
end sub


Sau đó viết thủ tục gọi nó như sau:
Sub GoiCong
ThTucA 9, 13

end Sub

Kết quả sẽ là phép cộng trên Msgbox/Báo lỗi?; Xin các Bác giúp! :two:
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#6
workman nói:
Bác thử thay chữ Sub bằng Function xem sao
To: workman,
Tại sao lại thay chữ Sub bằng Function? Do yêu cầu của công việc mà bạn quyết định dùng Sub hay Function chứ? Chứ đâu có thể thay đổi tùy tiện được?
To: adam_tran,
Em nhận được sách từ OverAC chưa? Sách đầy đủ từ A-ZZZ.
To: OverAC,
Sao lâu thế em, em bận lắm hả? Nếu có gì thì anh có thể help.

Chúc mọi người vui vẻ
Lê Văn Duyệt
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#7
adam_tran nói:
Khi tớ viết thủ tục sử dụng hơn 1 biến, nó báo lỗi "Expect :=", xin hỏi tại sao và cách khắc phục.
Thí dụ:
Sub Tinh(a As Long)
Selection = a
For i = 1 To 10
Selection.Offset(1, 0).Select
Selection = a
Next
End Sub
_________________
Sub Chaythu()
Tinh (15)
End Sub

Khi tớ chạy Macro "Chaythu" thì nó sẽ đưa 1 vùng gồm 11 dòng và 1 cột có giá trị là 15. Thủ tục này chạy tốt không có vấn đề gì. Nhưng khi khai báo 2 biến cho thủ tục "Tinh", nó báo lỗi.
Thí dụ:
Sub Tinhtoan(a As Long, b As Long)
Selection = a + b
For i = 1 To 10
Selection.Offset(1, 0).Select
Selection = a + b
Next
End Sub
__________________
Sub Chaythu2()
Tinhtoan (15, 20) 'Nó báo lỗi ở chỗ này.
End Sub

Lẽ ra khi chạy macro "Chaythu2), thì nó sẽ đưa 1 vùng gồm 11 dòng và 1 cột có giá trị là 15 + 20 = 35!
Nếu hàm Function dùng hơn 1 biến thì OK, không có vấn đề gì!
To:adam_tran,
Em phải đọc sách thôi ! Bởi vì em hỏi là các điều căn bản trong sách nói rất rỏ (Đảm bảo không bị dấu nghề, giống như một số Thầy mà anh từng tiếp xúc).
Chúc em khỏe.

Lê Văn Duyệt
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#8
levanduyet nói:
To:adam_tran,
Em phải đọc sách thôi ! Bởi vì em hỏi là các điều căn bản trong sách nói rất rỏ (Đảm bảo không bị dấu nghề, giống như một số Thầy mà anh từng tiếp xúc).
Vâng, em đã có sách nhưng chưa có thời gian đọc.
Mò một hồi cũng biết được khi gọi 1 thủ tục có sử dụng biến... thì dùng lệnh Call, nó sẽ không báo lỗi.
Thí dụ:

Call mySub(a, b)
Nếu chỉ gõ là mySub(a, b) thì nó báo lỗi, thế đấy!
 
L

luongvanluyen

Sơ cấp
2/9/05
27
0
0
HCM CITY
#9
Sách VBA Power Programming 2002 tôi download về hay quá!
Mọi người nên đọc thử xem sao. Và còn vài E-Book của SHM nữa.

Lương Văn Luyện
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#10
SA_DQ nói:
Sub ThTucA(ii as integer, ij as integer)
msgbox str(ii + ij)
end sub


Sau đó viết thủ tục gọi nó như sau:
Sub GoiCong
ThTucA 9, 13

end Sub

Kết quả sẽ là phép cộng trên Msgbox/Báo lỗi?; Xin các Bác giúp! :two:
Ngày: 09/09 Bác W. nên xoá bớt một số tin trong DS lưu đi nha; muốn gởi tin đến cho Bác mà không được; buồn!
 
Sửa lần cuối:
W

workman

Cao cấp
22/7/05
372
0
0
46
Ho Chi Minh
#11
levanduyet nói:
To: workman,
Tại sao lại thay chữ Sub bằng Function? Do yêu cầu của công việc mà bạn quyết định dùng Sub hay Function chứ? Chứ đâu có thể thay đổi tùy tiện được?
To: adam_tran,
Em nhận được sách từ OverAC chưa? Sách đầy đủ từ A-ZZZ.
To: OverAC,
Sao lâu thế em, em bận lắm hả? Nếu có gì thì anh có thể help.

Chúc mọi người vui vẻ
Lê Văn Duyệt
To bác duyet: mình là dân nghiệp dư mà, thông cảm nhé.
SA DQ: tôi xóa bớt msg rồi. Bác gởi lại xem sao.
 

Thành viên trực tuyến

  • daongocnam0603
  • DOTUANTRONG



Xem nhiều