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:
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

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
Mình không đủ khả năng giải thích cho bạn rồi;

Hay bạn thử thế này đi:
Thay vì
MsgBox sRng.Row
Bạn biến thành
MsgBox Me!TB_TS1.Parent.Name, , Me.TB_TS1.Parent.Name

Xem VBE trả lời sao?
 
Upvote 0
Mình không đủ khả năng giải thích cho bạn rồi;

Hay bạn thử thế này đi:
Thay vì
MsgBox sRng.Row
Bạn biến thành
MsgBox Me!TB_TS1.Parent.Name, , Me.TB_TS1.Parent.Name

Xem VBE trả lời sao?
Đoạn MsgBox sRng.Row e edit lại cho phù hợp với công việc là:
MsgBox chrW(..)..... & sRng.Row, đại khái là có thêm tý nội dung thông báo đã trích xuất kết quả trận đấu thành công cho nó có vẻ chuyên nghiệp.
Nhưng MsgBox lại hạn chế unicode quá, nên không hiển thị chuẩn được tiếng việt có dấu.
 
Upvote 0
ActiveCell.Offset(0, 0).Range("A1").Select: ActiveCell.Value = XDate
ActiveCell.Offset(0, 1).Range("A1").Select: ActiveCell.Value = XSo
ActiveCell.Offset(0, 1).Range("A1").Select: ActiveCell.Value = XLoai


-Các bạn cho mình hỏi. Đoạn code này trong một cuốn sách, có nghĩa là nhảy ngang 1 ô sau đó gán cho ô đó một biến, sau đó nhảy ngang lại gán 1 biến nữa. Chỉ là mình không hiểu lệnh Range("A1") để làm gì, mình bỏ đi thì nó vẫn chạy như bình thường không có gì sai cả. Vậy ý nghĩa của nó là gì ?
 
Upvote 0
Mình không đủ khả năng giải thích cho bạn rồi;

Hay bạn thử thế này đi:
Thay vì
MsgBox sRng.Row
Bạn biến thành
MsgBox Me!TB_TS1.Parent.Name, , Me.TB_TS1.Parent.Name

Xem VBE trả lời sao?
1. Cách viết Me.{Method | Property}: Gọi phương thức | thuộc tính của đối tượng.

2. Cách gọi tới một Item của đối tượng (ở đây là UserForm):
PHP:
object.Item({Index | Key})

Index: là chỉ số thứ tự của Item trên object.

Key: Khóa tương ứng với Item trên object.

Nếu đã xác định được Key của Item, thì cũng có thể sử dụng toán tử truy cập từ điển (!) ("the dictionary access operator") để truy cập vào một phần tử của object mà không kèm theo dấu ngoặc đơn.
PHP:
MsgBox Me("TextBox1").Value

'Tương đương với:'

MsgBox Me!TextBox1.Value
 
Upvote 0
1. Cách viết Me.{Method | Property}: Gọi phương thức | thuộc tính của đối tượng.

2. Cách gọi tới một Item của đối tượng (ở đây là UserForm):
PHP:
object.Item({Index | Key})

Index: là chỉ số thứ tự của Item trên object.

Key: Khóa tương ứng với Item trên object.

Nếu đã xác định được Key của Item, thì cũng có thể sử dụng toán tử truy cập từ điển (!) ("the dictionary access operator") để truy cập vào một phần tử của object mà không kèm theo dấu ngoặc đơn.
PHP:
MsgBox Me("TextBox1").Value

'Tương đương với:'

MsgBox Me!TextBox1.Value
Vâng, cũng tàm tạm hiểu rồi ạ. Cảm ơn anh ạ.
 
Upvote 0
Vâng, cũng tàm tạm hiểu rồi ạ. Cảm ơn anh ạ.

Mọi người càng nói càng làm cho bạn ý khó hiểu.

Cái thứ nhất không nhất thiết phải dùng "me.", vì ta đang đứng trong nó, mặc định mọi thành viên của nó đều được ưu tiên. gõ là TB_TS2.Value là đủ.

Các form có một thuộc tính controls trả lại một tập các control đang có trên form. Thuộc tính này lại là mặc định. Nên gõ là me.controls("TB_TS2"), controls("TB_TS2") , me!TB_TS2 là cùng gọi một thuộc tính, lấy tham chiếu đến control có tên là TB_TS2, nhưng chú ý nó trả lại kiểu Object.

Nói chung là đối với những control đã có sẵn trong lúc thiết kế thì cứ gọi trực tiếp tên nó ra, không cần phải thông qua controls làm gì cho mệt
 
Upvote 0
Web KT

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

Back
Top Bottom