Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
như vậy để phân biệt cũng hợp lí, ta cũng có thể nắm được số đơn hàng trùng nhau là bao nhiêu khi hiển thị số thứ tự luôn. Nhưng mình vừa thử hình như vẫn vậy, chon dòng 2,3 thì dữ liệu vẫn đổ vào dòng 1

Vẫn như cũ do macro mà bạn đang xài để cập nhật hay thay đổi gì đó đã viết lại đâu. Nó chưa xử với tham số dòng cần sửa mà!

Bạn thử viết bổ sung xem sao.
 
Upvote 0
Vẫn như cũ do macro mà bạn đang xài để cập nhật hay thay đổi gì đó đã viết lại đâu. Nó chưa xử với tham số dòng cần sửa mà!

Bạn thử viết bổ sung xem sao.
hi, mình không biết bổ sung như thế nào cho đúng. Bạn xem và sửa giúp mình với, vì mình chưa hiểu cách dùng table để áp dụng lên VBA, bạn viết và chú thích bên cạnh giúp để mình học hỏi với nhé.
 
Upvote 0
Em có 1 file như đính kèm. File đơn giản chỉ là trích xuất dữ liệu thắng thua của VĐV từ form vào trong sheets.
Ở file sử dụng hàm ghi dữ liệu vào dòng trống tiếp theo của cột đã chỉ định, nói chung có vẻ đã tạm ổn nếu như ta cho các cặp thi đấu theo số trận lần lượt từ 1 đến hết, như vậy Kết quả và Tỷ số sẽ kèm theo không lệch với số trận. Nhưng vấn đề xảy ra là nếu như chọn 1 trận đấu số thứ tự bất kỳ để hiện form và thi đấu thì khi nhấn nút VĐV1 hoặc VĐV 2 để trích xuất dữ liệu kết quả thì Kết quả và Tỷ số của trận đó không còn theo dòng của số trận đó nữa.
---> giải pháp nào để trích xuất dữ liệu kết quả và tỷ số theo số trận đã chọn ạ?
Cảm ơn mọi người!
 

File đính kèm

  • Book1.xlsm
    30.9 KB · Đọc: 9
Upvote 0
Em có 1 file như đính kèm. File đơn giản chỉ là trích xuất dữ liệu thắng thua của VĐV từ form vào trong sheets.
Ở file sử dụng hàm ghi dữ liệu vào dòng trống tiếp theo của cột đã chỉ định, nói chung có vẻ đã tạm ổn nếu như ta cho các cặp thi đấu theo số trận lần lượt từ 1 đến hết, như vậy Kết quả và Tỷ số sẽ kèm theo không lệch với số trận. Nhưng vấn đề xảy ra là nếu như chọn 1 trận đấu số thứ tự bất kỳ để hiện form và thi đấu thì khi nhấn nút VĐV1 hoặc VĐV 2 để trích xuất dữ liệu kết quả thì Kết quả và Tỷ số của trận đó không còn theo dòng của số trận đó nữa.
---> giải pháp nào để trích xuất dữ liệu kết quả và tỷ số theo số trận đã chọn ạ?
Cảm ơn mọi người!
1> Đây là mục giải đáp về code, vướng chỗ code nào thì nêu chỗ đó thôi. Bê cả chương trình lên hỏi.
Như thành viên @HoangHieuxx ở trên, mang cả Form/ dự án lên hỏi, chiếm hơn 1 trang... Tại sao không lập một chủ đề riêng để hỏi?

2> Với trường hợp trong file chỉ là lựa chọn trận đấu, ghi kết quả tỉ số rồi nhập lại bảng lưu trữ thì tốn công vẽ cái Form đó làm gì. Làm luôn ngay trên bảng tính - sheet "Main" đó.
Chỉ cần một ô ghi tỉ số của trận đấu, ô kết quả vận động viên nào thắng thì phải căn cứ vào tỉ số chứ (ai to điểm hơn thì thắng chẳng hạn). Làm 2 cái nút VĐV thắng, click nhầm thì tính sao?
Căn cứ vào số "Trận" mà nhập kết qủa tương ứng với dòng đó bên sheet "DSThiDau".
 
Upvote 0
1> Đây là mục giải đáp về code, vướng chỗ code nào thì nêu chỗ đó thôi. Bê cả chương trình lên hỏi.
Như thành viên @HoangHieuxx ở trên, mang cả Form/ dự án lên hỏi, chiếm hơn 1 trang... Tại sao không lập một chủ đề riêng để hỏi?

2> Với trường hợp trong file chỉ là lựa chọn trận đấu, ghi kết quả tỉ số rồi nhập lại bảng lưu trữ thì tốn công vẽ cái Form đó làm gì. Làm luôn ngay trên bảng tính - sheet "Main" đó.
Chỉ cần một ô ghi tỉ số của trận đấu, ô kết quả vận động viên nào thắng thì phải căn cứ vào tỉ số chứ (ai to điểm hơn thì thắng chẳng hạn). Làm 2 cái nút VĐV thắng, click nhầm thì tính sao?
Căn cứ vào số "Trận" mà nhập kết qủa tương ứng với dòng đó bên sheet "DSThiDau".
Cảm ơn ạ. Mục đích là tìm giải pháp về code nên e hỏi ở đây đâu có gì sai, còn rõ ràng làm trực tiếp trên sheets thì không phải mục đích của em ạ. Ngoài ra file đơn giản, không mang tầm dự án, chỉ nói đến duy nhất mục trích xuất dữ liệu từ nút VĐV1 và VĐV2 nên chỉ cần ALT+F11 là có thể thấy ngay. Đem 1 đoạn code lên hỏi thì lại có ý kiến rằng không kèm file sao mà rõ được...
Mục đích công việc của e cần làm vậy, không cần thiết phải nói rõ vì sao mà mất công tạo form.
Mong a thông cảm nếu làm phiền và khó chịu cho a.
 
Upvote 0
1> Đây là mục giải đáp về code, vướng chỗ code nào thì nêu chỗ đó thôi. Bê cả chương trình lên hỏi.
Như thành viên @HoangHieuxx ở trên, mang cả Form/ dự án lên hỏi, chiếm hơn 1 trang... Tại sao không lập một chủ đề riêng để hỏi?
Thôi thì cho mình trả lời lần cuối:
PHP:
Private Sub cmdxuat_Click()
 Dim Sh As Worksheet, Arr()
 Dim J As Long, Rws As Long

 Set Sh = ThisWorkbook.Worksheets("CSDL")
 Arr() = Sh.[B2].CurrentRegion.Offset(1).Value
 For J = 1 To UBound(Arr())
    If Arr(J, 1) = Me!cblenh.Value And J = Me!tbDg.Value - 1 Then
        Sh.Cells(J + 1, 5).Value = Me!slnhap.Value
        Sh.Cells(J + 1, 6).Value = Me!slxuat.Value
        Sh.Cells(J + 1, 7).Value = Me!nguoixuat.Text
        Sh.Cells(J + 1, 8).Value = Me!nguoinhap.Text
        Exit For
    End If
 Next J
End Sub
Mình sẽ không tiếp tục trả lời loạt bài này nữa ở đây; Sẽ trả lời ở nơi khác thích hợp hơn!.
 
Upvote 0
Thôi thì cho mình trả lời lần cuối:
PHP:
Private Sub cmdxuat_Click()
 Dim Sh As Worksheet, Arr()
 Dim J As Long, Rws As Long

 Set Sh = ThisWorkbook.Worksheets("CSDL")
 Arr() = Sh.[B2].CurrentRegion.Offset(1).Value
 For J = 1 To UBound(Arr())
    If Arr(J, 1) = Me!cblenh.Value And J = Me!tbDg.Value - 1 Then
        Sh.Cells(J + 1, 5).Value = Me!slnhap.Value
        Sh.Cells(J + 1, 6).Value = Me!slxuat.Value
        Sh.Cells(J + 1, 7).Value = Me!nguoixuat.Text
        Sh.Cells(J + 1, 8).Value = Me!nguoinhap.Text
        Exit For
    End If
 Next J
End Sub
Mình sẽ không tiếp tục trả lời loạt bài này nữa ở đây; Sẽ trả lời ở nơi khác thích hợp hơn!.
Vẫn đúng nơi mà anh. Sao phải đi nơi khác!
 
Upvote 0
Thôi thì cho mình trả lời lần cuối:
PHP:
Private Sub cmdxuat_Click()
 Dim Sh As Worksheet, Arr()
 Dim J As Long, Rws As Long

 Set Sh = ThisWorkbook.Worksheets("CSDL")
 Arr() = Sh.[B2].CurrentRegion.Offset(1).Value
 For J = 1 To UBound(Arr())
    If Arr(J, 1) = Me!cblenh.Value And J = Me!tbDg.Value - 1 Then
        Sh.Cells(J + 1, 5).Value = Me!slnhap.Value
        Sh.Cells(J + 1, 6).Value = Me!slxuat.Value
        Sh.Cells(J + 1, 7).Value = Me!nguoixuat.Text
        Sh.Cells(J + 1, 8).Value = Me!nguoinhap.Text
        Exit For
    End If
 Next J
End Sub
Mình sẽ không tiếp tục trả lời loạt bài này nữa ở đây; Sẽ trả lời ở nơi khác thích hợp hơn!.
Lần nữa cảm ơn bạn Hoang2013, mình cũng mới biết đến GPE, cũng đăng bài nhiều lần nhưng luôn bị cho là không hợp lệ và bị nhắc nhở, dù đăng riêng hay đăng lẫn vào đây thì cũng kết quả như vậy. Mình nhận ra có những người luôn giúp đỡ mình ở bất cứ đâu, nhưng có những người hình như "quá tài giỏi" nên họ quên mục đích tạo ra trang này để làm gì, để hỗ trợ, cùng nhau học hỏi hay để chờ bắt bẻ. Đây là lần cuối mình tham gia GPE, cảm ơn bạn Hoang2013 vì chí ít mình còn biết sẽ có những người tốt như bạn giúp những người khác không biết như mình. Thân !
 
Upvote 0
Lần nữa cảm ơn bạn Hoang2013, mình cũng mới biết đến GPE
Chưa biết tuổi của người người đang giao thiệp mà xưng hô "mình với bạn" có phần hơi khiếm nhã.
Nếu ai đó có số tuổi là 37, thì "bạn" Hoang2013 có tuổi ~ gấp đôi số tuổi đó.
đăng bài nhiều lần nhưng luôn bị cho là không hợp lệ và bị nhắc nhở,
Nội quy thì không đọc. Viết tắt tùm lum, viết kiểu teencode, gửi nhiều bài cùng nội dung. Người nhắc nhở nêu rõ là vi phạm nội quy vậy mà không thay đổi?
http://www.giaiphapexcel.com/diendan/threads/nhờ-viết-code-tìm-kiếm-và-chỉnh-sửa.129094/
http://www.giaiphapexcel.com/diendan/threads/nhờ-chỉnh-sửa-code.129183/
Đây là lần cuối mình tham gia GPE, cảm ơn bạn Hoang2013 vì chí ít mình còn biết sẽ có những người tốt như bạn giúp những người khác không biết như mình.
Sau khi đăng bài #1176, chưa chắc người giúp sẽ hứng thú giúp tiếp.
Và chào tạm biệt thôi!
 
Upvote 0
. . . . Đây là lần cuối mình tham gia GPE, cảm ơn bạn Hoang2013 vì . . . bạn giúp những người khác không biết như mình.
Nếu biết trước bạn sẽ viết vầy thì bạn không thể đã, đang & sẽ trông mong vào mình được đâu.
Nhưng nếu bạn cho rằng bạn đã đủ sức làm chủ VBA & không cần đến GPE.COM thì bạn lầm to rồi đó.

Nhìn vô Code của bạn đã viết trong các file thì mình cho rằng bạn sẽ còn nhờ đến GPE.COM chán!

Dù sao cũng chúc bạn may mắn nhiều trong công việc với VBA & Form!
 
Upvote 0
Thế mới thấy, làm một điều tốt thực sự còn khó hơn gấp ngàn lần việc ăn cơm hàng ngày.
Người khi cần giúp đỡ phần nhiều khi ấy họ chỉ trông mong vấn đề được giúp đỡ cho mình ra sao mà khó để ý đến vấn đề điều kiện mình phải làm sao để được giúp đỡ đúng quy trình (cái này có thể gọi là thủ tục hành chính). Thử hỏi khi dân bị lũ lụt, liệu dân còn có thể đi đọc hàng loạt mục được hỗ trợ xem mình được hỗ trợ ở mục nào, xem mình được viện trợ 1 hay 2 gòi mì tôm để được nhận đúng quyền lợi của mình. Thật ra so sánh vậy là khập khiễng, nhưng để thấy rằng cuộc sống này chẳng bao giờ là dễ chịu, điều trông mong của người cần được giúp đỡ là nhận được sự giúp đỡ của những người với tấm lòng rộng mở mà chả cần phải lý do gì mà thôi(nhiều khi họ nói đúng nguyên tắc, đúng quy định là phải làm như thế nhưng cũng đâu đến phần của họ phải nói, vì người cầm quyền còn chưa lên tiếng cơ mà...).
Cuộc sống là cho đi mà, rộng lượng hơn, cởi mở hơn, chấp nhặt nhỏ làm gì để thấy khó thở. Tin tôi đi, khi bạn giúp đỡ được 1 điều tốt mà không cần lý do gì bạn sẽ thấy cuộc sống này tốt đẹp gấp 10 lần và quan trọng hơn người được nhận sự giúp đỡ còn thấy ý nghĩa gấp trăm ngàn lần.
Thân!
 
Upvote 0
Đúng là cuộc sống thì nên cho đi!

Nhưng cho ai cơ chứ đó là 1 việc;

Dứt khoát không nên cho kẻ ăn cháo xong hất mâm!
 
Upvote 0
Quay lại bài #1171, nhờ mọi người xem qua và cho giải pháp giải quyết vấn đề với ạ.
 
Upvote 0
Thế mới thấy, làm một điều tốt thực sự còn khó hơn gấp ngàn lần việc ăn cơm hàng ngày.

Đối với người chật vật kiếm miếng cơm manh áo như tôi, ăn cơm hàng ngày là việc khó khăn nhất. Làm điều tốt là chuyện chưa dám nghĩ tới.

Người khi cần giúp đỡ phần nhiều khi ấy họ chỉ trông mong vấn đề được giúp đỡ cho mình ra sao mà khó để ý đến vấn đề điều kiện mình phải làm sao để được giúp đỡ đúng quy trình (cái này có thể gọi là thủ tục hành chính). Thử hỏi khi dân bị lũ lụt, liệu dân còn có thể đi đọc hàng loạt mục được hỗ trợ xem mình được hỗ trợ ở mục nào, xem mình được viện trợ 1 hay 2 gòi mì tôm để được nhận đúng quyền lợi của mình. Thật ra so sánh vậy là khập khiễng, nhưng để thấy rằng cuộc sống này chẳng bao giờ là dễ chịu, điều trông mong của người cần được giúp đỡ là nhận được sự giúp đỡ của những người với tấm lòng rộng mở mà chả cần phải lý do gì mà thôi(nhiều khi họ nói đúng nguyên tắc, đúng quy định là phải làm như thế nhưng cũng đâu đến phần của họ phải nói, vì người cầm quyền còn chưa lên tiếng cơ mà...).

Có lẽ bạn chọn nhầm nghề rồi. Lý luận giỏi đến trình độ này thì đi làm nghề báo, học Luật hoặc Chính Trị thì chả cần ai giúp đỡ đâu.

Cuộc sống là cho đi mà, rộng lượng hơn, cởi mở hơn, chấp nhặt nhỏ làm gì để thấy khó thở. Tin tôi đi, khi bạn giúp đỡ được 1 điều tốt mà không cần lý do gì bạn sẽ thấy cuộc sống này tốt đẹp gấp 10 lần và quan trọng hơn người được nhận sự giúp đỡ còn thấy ý nghĩa gấp trăm ngàn lần.

Tin hổng nổi rồi. Nếu tôi đã đạt cảnh giới "giúp đỡ được 1 điều tốt mà không cần lý do gì" thì một đống hứa hẹn "bạn sẽ thấy ..." của bạn có phải là kéo tôi trở về cái vị trí ham muốn không?
 
Upvote 0
Quay lại bài #1171, nhờ mọi người xem qua và cho giải pháp giải quyết vấn đề với ạ.
PHP:
Private Sub CM_VDV1_Click()
 Dim Sh As Worksheet, Rng As Range, sRng As Range
 Set Sh = ThisWorkbook.Worksheets("DSThiDau")
 Set Rng = Sh.Range(Sh.[A1], Sh.[A1].End(xlDown))
 Set sRng = Rng.Find(Me!TB_TranSo.Value, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    MsgBox sRng.Row
    Sh.Cells(sRng.Row, "H").Value = Me!TB_TS1.Value
    Sh.Cells(sRng.Row, "I").Value = Me!TB_TS2.Value
 End If
End Sub
 
Upvote 0
Các bác ơi cho em hỏi chút, em muốn làm như trong file, bác nào giúp em được không ạ? Cám ơn các bác.
 

File đính kèm

  • Chen anh.xls
    2.2 MB · Đọc: 10
Upvote 0
Đối với người chật vật kiếm miếng cơm manh áo như tôi, ăn cơm hàng ngày là việc khó khăn nhất. Làm điều tốt là chuyện chưa dám nghĩ tới.



Có lẽ bạn chọn nhầm nghề rồi. Lý luận giỏi đến trình độ này thì đi làm nghề báo, học Luật hoặc Chính Trị thì chả cần ai giúp đỡ đâu.



Tin hổng nổi rồi. Nếu tôi đã đạt cảnh giới "giúp đỡ được 1 điều tốt mà không cần lý do gì" thì một đống hứa hẹn "bạn sẽ thấy ..." của bạn có phải là kéo tôi trở về cái vị trí ham muốn không?
Hihi. Tuỳ anh hiểu thôi ạ.
 
Upvote 0
PHP:
Private Sub CM_VDV1_Click()
 Dim Sh As Worksheet, Rng As Range, sRng As Range
 Set Sh = ThisWorkbook.Worksheets("DSThiDau")
 Set Rng = Sh.Range(Sh.[A1], Sh.[A1].End(xlDown))
 Set sRng = Rng.Find(Me!TB_TranSo.Value, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    MsgBox sRng.Row
    Sh.Cells(sRng.Row, "H").Value = Me!TB_TS1.Value
    Sh.Cells(sRng.Row, "I").Value = Me!TB_TS2.Value
 End If
End Sub
Cảm ơn anh, code chạy khá ổn rồi ạ. Em xin hỏi chút ạ: Ở đây sao lại là Me! mà không phải là Me. ạ?
 
Upvote 0
Web KT
Back
Top Bottom