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

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi adam_tran, 11 Tháng tám 2005.

3,082 lượt xem

  1. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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ì!
     
    #1
  2. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #2
  3. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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
     
    #3
  4. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    431
    Đã được thích:
    37
    Nơi ở:
    HCM city
    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:
     
    #4
  5. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Bác thử thay chữ Sub bằng Function xem sao
     
    #5
  6. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #6
  7. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #7
  8. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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!
     
    #8
  9. luongvanluyen

    luongvanluyen Thành viên hoạt động

    Bài viết:
    27
    Đã được thích:
    0
    Nơi ở:
    HCM CITY
    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
     
    #9
  10. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    431
    Đã được thích:
    37
    Nơi ở:
    HCM city
    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!
     
    Last edited: 9 Tháng chín 2005
    #10
  11. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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.
     
    #11

Chia sẻ trang này