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ưng mà phải là ^p chứ ^P thì cũng ko mở lệnh in được
Mấu chốt là Ctrl + ... chứ không phải là Alt + ... như bạn tưởng.

Còn chuyện viết Ctrl + P là tôi viết chuẩn đấy bạn ạ. Bạn vào các menu thì sẽ thấy: Ctrl + P: print, Ctrl + A, Ctrl + H, Ctrl + F, Ctrl + V, Ctrl + C ... chứ người ta không viết Ctrl + p: print, Ctrl + a, Ctrl + h, Ctrl + f, Ctrl + v, Ctrl + c ... bạn ạ.

Viết thế nhưng luôn phải hiểu là chỉ nhấn phím p, a, h, f, v, c. Còn khi phải nhấn chữ hoa thì bao giờ người ta cũng viết Ctrl + Shift + ... bạn ạ.
 
Upvote 0
Mấu chốt là Ctrl + ... chứ không phải là Alt + ... như bạn tưởng.
Còn chuyện viết Ctrl + P là tôi viết chuẩn đấy bạn ạ. ....
Cái tội hay tự chế cách viết tắt. Dần rồi quen, muốn tắt kiểu nào thì tắt, và nghĩ rằng máy có bổn phận phải hiểu.
 
Upvote 0
Chào mọi người.
E đang có làm một file quản lý mã hàng theo kho. đang demo đơn giản như file đính kèm.
nhờ mọi người giúp, vd e muốn tìm kiếm một mã hàng.
e di chuyển đến từng kệ và dùng phương thức Find rồi hiển thị nó bằng Msgbox
Tuy nhiên, giả sử mã hàng nằm ở nhiều chỗ và mỗi khi nó di chuyển qua một Sheet thì msgbox lại hiển thị 1 lần.
Có cách nào để nó chạy hết 1 lúc và thông báo tổng thể 1 lần trên msgbox hoặc phương thức hiển thị gì đó khác không ạ.
Xin cám ơn mn nhiều.!
 

File đính kèm

  • QUAN LY HANG.xlsm
    27.2 KB · Đọc: 7
Upvote 0
Cái tội hay tự chế cách viết tắt. Dần rồi quen, muốn tắt kiểu nào thì tắt, và nghĩ rằng máy có bổn phận phải hiểu.
hí lúc đầu cái dòng này là % {Tab} để chuyển qua ứng dụng khác nhưng vì nó ko hoạt động nên em chuyển qua dùng AppActivate rồi sửa lại nó thành {Tab} thành P để gọi PrintPreview mà quên mất cái % ^_^
 
Upvote 0
Có cách nào để nó chạy hết 1 lúc và thông báo tổng thể 1 lần trên msgbox hoặc phương thức hiển thị gì đó khác không ạ.
Thấy bạn đã có Form; vậy ta nên cho nó hiện lên ListBox hay bao nhiêu!
Nếu bạn không đủ lực, sáng mai mình sẽ giúp!
Các tên trang tính nên là Kho_01, Kho_02,. . . . . Kho_11,. . .
(Thậm chí có thể chỉ là: K01, K02, . . . . ,K11,. . . )
 
Lần chỉnh sửa cuối:
Upvote 0
Thấy bạn đã có Form; vậy ta nên cho nó hiện lên ListBox hay bao nhiêu!
Nếu bạn không đủ lực, sáng mai mình sẽ giúp!
Các tên trang tính nên là Kho_01, Kho_02,. . . . . Kho_11,. . .
(Thậm chí có thể chỉ là: K01, K02, . . . . ,K11,. . . )
Dạ. Nhờ bác ngày mai bớt chút tgian giúp với ạ.
Còn tên các trang tính do e đặt nó theo biến i, nên có số 0 phía trước như K01 thì k biết ntn nên để đại nó K1 hoặc KHO_SO1 cho nó dễ :p
 
Upvote 0
Bạn xem file & chúc buổi sáng tốt lành!
 

File đính kèm

  • Form.rar
    20.9 KB · Đọc: 8
Upvote 0
Bạn xem file & chúc buổi sáng tốt lành!
Chào Bác. Giả sử trong một trang tính đó. Tồn tại cùng một mã hàng nhưng khác số lượng và ngày nhập, phương thức find chỉ hiển thị được 1 ạ. Có cách nào để nó hiển thị trên listbox hết không ?
 
Upvote 0
Mã:
Private Sub txtBOOK_Change()
Dim Rws As Long
Dim Rng As Range, sRng As Range
With TONGHOP
    Rws = .Range("B" & Rows.Count).End(xlUp).Row
    Set Rng = .[F2].Resize(Rws)
    Set sRng = Rng.Find(Me!txtBOOK.Value, , xlValues, xlWhole)
    If sRng Is Nothing Then
   .Range("f" & Rws) = Me!txtBOOK.Text
    Else
        MsgBox "So book vua nhap da co!": Exit Sub
        End If
  End With
End Sub

Chào ACE GPE

Mình có cái code này, nó sẽ báo trùng dữ liệu khi ta nhập vào textbox.

Giờ mình muốn viết nó sang mảng thì làm sao vậy mọi người! chỉ giúp mình với (dữ liệu nằm cột F)
 
Upvote 0
Giả sử trong một trang tính đó. Tồn tại cùng một mã hàng nhưng khác số lượng và ngày nhập, với phương thức find có cách nào để nó hiển thị trên listbox hết không ?
PHP:
Private Sub CommandButton1_Click()
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim Rws As Long, W As Integer, Col As Byte
Dim MyAdd As String
ReDim Arr(1 To 35, 1 To 6)
Arr(1, 1) = "STT":                             Arr(1, 2) = "Ngày Tháng"
Arr(1, 3) = "Mã Hàng":                     Arr(1, 4) = "Sô Luong"
Arr(1, 5) = "Kê Sô":                           Arr(1, 6) = "Trang tính"
W = 1
For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 3) = "Kho" Then
        Rws = Sh.[B1].CurrentRegion.Rows.Count
        Set Rng = Sh.[B1].Resize(Rws)
        Set sRng = Rng.Find(Me!Txt_MH.Text, , xlFormulas, xlWhole)
        If Not sRng Is Nothing Then
            MyAdd = sRng.Address
            Do
                W = W + 1:                          Arr(W, 1) = W - 1
                Arr(W, 6) = Sh.Name
                For Col = 1 To 4
                    Arr(W, Col + 1) = Sh.Cells(sRng.Row, Col).Value
                Next Col
3               Set sRng = Rng.FindNext(sRng)   '<=|    '
            Loop While sRng.Address <> MyAdd
        End If
    End If
Next Sh
Me!lbDS.List = Arr()
End Sub
 
Upvote 0
PHP:
Private Sub CommandButton1_Click()
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim Rws As Long, W As Integer, Col As Byte
Dim MyAdd As String
ReDim Arr(1 To 35, 1 To 6)
Arr(1, 1) = "STT":                             Arr(1, 2) = "Ngày Tháng"
Arr(1, 3) = "Mã Hàng":                     Arr(1, 4) = "Sô Luong"
Arr(1, 5) = "Kê Sô":                           Arr(1, 6) = "Trang tính"
W = 1
For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 3) = "Kho" Then
        Rws = Sh.[B1].CurrentRegion.Rows.Count
        Set Rng = Sh.[B1].Resize(Rws)
        Set sRng = Rng.Find(Me!Txt_MH.Text, , xlFormulas, xlWhole)
        If Not sRng Is Nothing Then
            MyAdd = sRng.Address
            Do
                W = W + 1:                          Arr(W, 1) = W - 1
                Arr(W, 6) = Sh.Name
                For Col = 1 To 4
                    Arr(W, Col + 1) = Sh.Cells(sRng.Row, Col).Value
                Next Col
3               Set sRng = Rng.FindNext(sRng)   '<=|    '
            Loop While sRng.Address <> MyAdd
        End If
    End If
Next Sh
Me!lbDS.List = Arr()
End Sub
Cám ơn bác. nhân tiện Bác cho e hỏi thêm chỗ này :
3 Set sRng = Rng.FindNext(sRng) '<=| ' Loop While sRng.Address <> MyAdd
thấy khi Set sRng = findNext rồi thì điều kiện đúng, vậy sao nó vẫn Do được các vòng tiếp theo nhỉ.?
 
Upvote 0
Cám ơn bác. nhân tiện Bác cho e hỏi thêm chỗ này :
3 Set sRng = Rng.FindNext(sRng) '<=| ' Loop While sRng.Address <> MyAdd
thấy khi Set sRng = findNext rồi thì điều kiện đúng, vậy sao nó vẫn Do được các vòng tiếp theo nhỉ.?
Thì nó cũng giống như:
k = k + 1
Debug.Print k
------------------------
Debug.Print k
k = k + 1

Điều kiện đúng ở While cuối dòng sẽ lặp 1 lần cuối
 
Upvote 0
CHO MÌNH HỎI CODE NÀY SAI Ở ĐÂU Ạ? SAO NÓ K CHẠY!

Mã:
Private Sub txtBOOK_Change()
Dim vung(), dongcuoi As Long
Dim i As Long
    dongcuoi = Range("f" & Rows.Count).End(xlUp).Row
    vung = Range("a2:w" & dongcuoi).Value
  
    For i = LBound(vung, 1) To UBound(vung, 1) Step 1
    If vung(i, 6) = Me!txtBOOK.Value Then
    MsgBox "trung": Exit For
    End If
    Next i
End Sub
 
Upvote 0
Cám ơn bác. nhân tiện Bác cho e hỏi thêm chỗ này :
3 Set sRng = Rng.FindNext(sRng) '<=| ' Loop While sRng.Address <> MyAdd
thấy khi Set sRng = findNext rồi thì điều kiện đúng, vậy sao nó vẫn Do được các vòng tiếp theo nhỉ.?
hiểu
While = trong khi
trong khi điều kiện còn ĐÚNG thì tiếp tục LẶP
 
Upvote 0
Chắc nó là cái này
https://www.seagullscientific.com/label-software/barcode-label-design-and-printing/

Tôi thì nghĩ , người dùng nên chịu khó bấm in đi, sao tự động với VBA có nhanh hơn không, số lượng in nhiều không?
Bên mình scan vào excel đối chiếu có phải đúng thứ mình cần ko sau đó sẽ chia số lượng ra theo đơn hàng. Thường là chia làm 2 hoặc 3. Một ngày scan khoảng 1k lần
 
Upvote 0
Upvote 0
Các anh chị có thể cho em hỏi là sao cho em hỏi là tại sao code vlookup của em nó cứ bắt update file mới chạy nhỉ mọi người
Code như sao :

Cells("CS1"). FormulaR2C1 = Vlookup(Q2, '[data.xlxs]12.14.18$A:$L',2,0)

Trong khi đó file data vẫn nằm cố định ở chỗ cũ, em đã thử thêm vào đường dẫn link nhưng kết quả lại ra toàn #N/A
 
Upvote 0
Các thầy cùng mn cho e hỏi.
Có sự kiện nào trên From giống before_close không ạ.
Nghĩa là nếu đóng from thì file sẽ đóng luôn và tự động lưu file ạ.
Do gán nút lên From thì cài nút đc, nhưng nó lại còn có nút tắt trên góc phải nữa. Nên k biết làm sao
 
Upvote 0
Web KT
Back
Top Bottom