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:
Em chào các Admin và các anh chị!
Em không biết đăng bài vào đây có đúng chuyên mục không, có gì sai mong anh chị thông cảm giúp đỡ em ạ!
Em có 1 file Đơn hàng cần dùng vba để tìm lọc dữ liệu của 2 hoặc nhiều sheet về 1 sheet theo như các yêu cầu có ghi chú trong file đính kèm. Em mới biết sơ xài về VBA nên mong các anh chị giúp đỡ ạ!
 

File đính kèm

  • DON HANg.xlsm
    331 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
Em cần gửi lệnh in tới cửa sổ ứng dụng khác thông qua VBA. Code em viết
Sub Text()
AppActivate("Filetext")
Application.Wait Now + TimeValue("0:00:01")
Application.SendKeys "%P"
Application.Wait Now + TimeValue("0:00:01")
Application.SendKeys "~"
End Sub
Code chạy nhưng dòng
Application.SendKeys "%P"
Không thấy bật PrintPreview
Các bác giúp em với
Nếu không cần bí mật thì tôi tò mò muốn biết, ứng dụng kia thế nào, tên nó là gì, tôi có không.
 
Upvote 0
Nếu không cần bí mật thì tôi tò mò muốn biết, ứng dụng kia thế nào, tên nó là gì, tôi có không.
Ứng dụng đó là Bar Tender (in mã vạch)
Bài đã được tự động gộp:

Cho những thứ là code, là công thức vào chỗ chuyên chứa nó. Thấy người ta làm được thì mình cố làm cho giống vậy.

View attachment 209337

"Ko" là ứng dụng gì?

"Ko" hoạt động rồi thì hỏi làm gì nữa?
Nó hoạt động nhưng hình như nó ko sendkeys tổ hợp phím được ko biết là có cách nào khác để gọi lệnh in của ứng dụng này ko?
Ứng dung in mã vạch Bar Tender
 
Upvote 0
Em chào các Admin và các anh chị!
Em không biết đăng bài vào đây có đúng chuyên mục không, có gì sai mong anh chị thông cảm giúp đỡ em ạ!
Em có 1 file Đơn hàng cần dùng vba để tìm lọc dữ liệu của 2 hoặc nhiều sheet về 1 sheet theo như các yêu cầu có ghi chú trong file đính kèm. Em mới biết sơ xài về VBA nên mong các anh chị giúp đỡ ạ!
Hic hic có bác nào help em với ạ!
Bài đã được tự động gộp:

Hic hic có bác nào help em với ạ!
Hay là em đăng vào chưa đúng chuyên mục thì các bác chỉ giúp để em đăng lại ạ
Bài đã được tự động gộp:

Hic hic có bác nào help em với ạ!
Hay là em đăng vào chưa đúng chuyên mục thì các bác chỉ giúp để em đăng lại ạ
 
Upvote 0
Chào mọi người.
Em muốn thêm 1 cột STT ngay ở đầu, thì code không chạy được nữa.
Em không biết mình phải chỉnh chỗ nào để nếu chèn thêm cột vẫn không ảnh hưởng.
Mong cả nhà giúp đỡ.
Em có để file đính kèm ở dưới ạ.
Trân trọng.

Sub HienNgay()
On Error Resume Next
Application.ScreenUpdating = False
Dim Sh As Worksheet
Set Sh = Sheet1
n = Sh.Range("A65000").End(xlUp).Row
Sh.Range("A1:Q" & n).Copy Destination:=Sh.Range("AA1")
For i = n To 3 Step -1
If Format(Sh.Range("AM" & i), "dd/mm") = Format(Date, "dd/mm") And Sh.Range("AQ" & i) = "" Then
'
Else
Sh.Range("AA" & i & ":AQ" & i).Delete Shift:=xlUp
End If
Next
Sh.Columns("AE:AQ").Delete
Sh.Columns("AC:AC").Delete
ActiveWorkbook.Names.Add Name:="Danhsach", RefersToR1C1:= _
"=OFFSET(Sheet1!R3C27,,,COUNTA(Sheet1!R3C27:R500C27),4)"
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Copy Hien thong bao ngay sinh nhat.xls
    59 KB · Đọc: 3
Upvote 0
Gửi ACE GPE

Nhờ thêm code bên dưới giúp ạ!

Mã:
Private Sub cmdEdit_Click()



If Me!txtSTT.Value = "" Then

      

    MsgBox "Kh«ng cã d÷ liÖu ®Ó söa", , " Th«ng b¸o": Exit Sub

End If

Dim suanhaplieu As Long

Const TD As String = "cha nhËp d÷ liÖu!"

 

If Me!cbTinhTrang.Text = "" Then

    Msg = "T×nh tr¹ng"

ElseIf Me!txtKhachHang.Text = "" Then

    Msg = "Kh¸ch hµng"

ElseIf Me!txtVHC.Text = "" Then

    Msg = "VHC"

ElseIf Me!txtBOOK.Text = "" Then

    Msg = "Sè BOOKING"

ElseIf Me!txtGioCutOff.Text = "" Then

    Msg = "Giê Cut off"

ElseIf Me!txtngayCutOff.Text = "" Then

    Msg = "Ngµy Cut off"

ElseIf Me!cbNhaXe.Text = "" Then

    Msg = "Nhµ xe"

ElseIf Me!txtHangTau.Text = "" Then

    Msg = "H·ng tµu"

ElseIf Me!cbcangha.Text = "" Then

    Msg = "C¶ng h¹"

ElseIf Me!txtTauChuyen.Text = "" Then

    Msg = "tµu chuyÕn"

ElseIf Me!cbTuan.Text = "" Then

    Msg = "Tuan"

End If

If Msg <> "" Then

    MsgBox Msg & TD:                       Exit Sub

End If



Dim Rws As Long

Dim Rng As Range, sRng As Range

With TONGHOP

    Rws = .[A2].CurrentRegion.Rows.Count

    Set Rng = .[A2].Resize(Rws)

    Set sRng = Rng.Find(Me!txtSTT.Value, , xlValues, xlWhole)

    If Not sRng Is Nothing Then

  

    Rws = sRng.Row

    .Cells(Rws, "B").Value = Me!cbTuan.Text

    .Cells(Rws, "C").Value = Me!cbTinhTrang.Text

    .Cells(Rws, "D").Value = Me!txtKhachHang.Text

    .Cells(Rws, "E").Value = Me!txtVHC.Text

    .Cells(Rws, "F").Value = Me!txtBOOK.Text

    .Cells(Rws, "G").Value = Me!txtSoCont.Text

    .Cells(Rws, "H").Value = Me!txtDL.Text

    .Cells(Rws, "I").Value = Me!txtNW.Text

    .Cells(Rws, "J").Value = Me!txtngaydongcont.Text

    .Cells(Rws, "K").Value = Me!txtGioCutOff.Text

    .Cells(Rws, "L").Value = Me!txtngayCutOff.Text

    .Cells(Rws, "M").Value = Me!cbNhaXe.Text

    .Cells(Rws, "N").Value = Me!txtHangTau.Text

    .Cells(Rws, "O").Value = Me!cbcangha.Text

    .Cells(Rws, "P").Value = Me!txtTauChuyen.Text

    .Cells(Rws, "Q").Value = Me!txtETD.Text

    '.Cells(Rws, "P").Value = Me!txtETD.Text

    '.Cells(Rws, "P").Value = Me!txtETD.Text

    '.Cells(Rws, "P").Value = Me!txtETD.Text

    '.Cells(Rws, "P").Value = Me!txtETD.Text

    .Cells(Rws, "V").Value = Me!txtghichu.Text

    .Cells(Rws, "W").Value = Me!txtDienGiai.Text

    End If

End With

   MsgBox "Söa xong!", , " Th«ng b¸o"



End Sub

code này tìm ngay STT đó và ghi dè dữ liệu lên ngay dòng tìm đc, bây giờ mình muốn nó chèn thêm dòng bên dưới dòng tìm đc và dữ liệu sẽ đc ghi ngay dòng vùa chèn đó!

Cảm ơn ạ!
 
Upvote 0
Ứng dụng đó là Bar Tender (in mã vạch)
Bài đã được tự động gộp:


Nó hoạt động nhưng hình như nó ko sendkeys tổ hợp phím được ko biết là có cách nào khác để gọi lệnh in của ứng dụng này ko?
Ứng dung in mã vạch Bar Tender
Lập trình Python.
 
Upvote 0
Em cần gửi lệnh in tới cửa sổ ứng dụng khác thông qua VBA. Code em viết
Sub Text()
AppActivate("Filetext")
Application.Wait Now + TimeValue("0:00:01")
Application.SendKeys "%P"
Application.Wait Now + TimeValue("0:00:01")
Application.SendKeys "~"
End Sub
Code chạy nhưng dòng
Application.SendKeys "%P"
Không thấy bật PrintPreview
Các bác giúp em với
Phải hiểu Code nó như thế nào thì mới biết nó có Hoạt động không:
1.AppActivate (<Tiêu đề>): Tìm kiếm Tiêu đề ứng dụng đang hoạt động nếu đúng các ký tự tính từ trước ra sau.
nếu tìm thấy 2 ứng dụng trở lên thì sẽ Chọn ưu tiên
2. Sendkeys: Con trỏ chuột đang đứng ở ứng dụng nào thì Lệnh Sendkeys sẽ gửi key đến ứng dụng đó.
Tiêu đề ứng dụng bao gồm: tên Ứng dụng + / Tên tệp đang mở +/ một tiêu đề.

Làm sao AppActivate hiểu "Filetext" là Ứng dụng của bạn được đây
 
Upvote 0
Hic hic có bác nào help em với ạ!
Bài đã được tự động gộp:


Hay là em đăng vào chưa đúng chuyên mục thì các bác chỉ giúp để em đăng lại ạ
Bài đã được tự động gộp:


Hay là em đăng vào chưa đúng chuyên mục thì các bác chỉ giúp để em đăng lại ạ
Anh chị ơi! Em có đăng đúng chuyên mục ko ạ? Có ai giúp dùm em với!
 
Upvote 0
Ứng dụng đó là Bar Tender (in mã vạch)

Nó hoạt động nhưng hình như nó ko sendkeys tổ hợp phím được ko biết là có cách nào khác để gọi lệnh in của ứng dụng này ko?
Ứng dung in mã vạch Bar Tender
Bạn không nên viết tắt.

Tôi hiểu là bạn đã có Bar Tender mở và có dữ liệu. Vào một thời điểm thích hợp bạn muốn kích hoạt lệnh in.

1. Bạn đã kích hoạt Bar Tender như thế nào? Bạn có thể cho xem code kích hoạt đó không?

2. Bạn có chắc chắn là sau khi chạy dòng AppActivate("Filetext") thì Bar Tender là Active không? Căn cứ vào đâu bạn có chắc chắn đó?

3. Tôi không có Bar Tender nên không biết mặt mũi thế nào. Nếu SendKeys không được thì có thể sẽ phải tìm cách khác.

Bar Tender có ribbon như Excel, Word hay có menu như notepad? Nếu có menu như notepad thì Print nó ở mục menu chính thứ mấy tính từ trái qua phải, và trong mục menu chính đó nó ở mục menu con thứ mấy? Tốt nhất là bạn click vào menu chính có chứa Print để nó mở ra rồi chụp màn hình cho tôi xem. Trong trường hợp menu như notepad ta sẽ tìm cách kích hoạt Print bằng code.
 
Upvote 0
Bạn không nên viết tắt.

Tôi hiểu là bạn đã có Bar Tender mở và có dữ liệu. Vào một thời điểm thích hợp bạn muốn kích hoạt lệnh in.

1. Bạn đã kích hoạt Bar Tender như thế nào? Bạn có thể cho xem code kích hoạt đó không?

2. Bạn có chắc chắn là sau khi chạy dòng AppActivate("Filetext") thì Bar Tender là Active không? Căn cứ vào đâu bạn có chắc chắn đó?

3. Tôi không có Bar Tender nên không biết mặt mũi thế nào. Nếu SendKeys không được thì có thể sẽ phải tìm cách khác.

Bar Tender có ribbon như Excel, Word hay có menu như notepad? Nếu có menu như notepad thì Print nó ở mục menu chính thứ mấy tính từ trái qua phải, và trong mục menu chính đó nó ở mục menu con thứ mấy? Tốt nhất là bạn click vào menu chính có chứa Print để nó mở ra rồi chụp màn hình cho tôi xem. Trong trường hợp menu như notepad ta sẽ tìm cách kích hoạt Print bằng code.
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?
 
Upvote 0
"ko" là ứng dụng gì?

"ko" là phần mềm gì?

"ko" là ứng dụng gì? là phần mềm gì?
Mình k hiểu ý bạn. File đó chỉ là theo dõi kiểu nhập xuất thôi ạ. Mình muốn dùng vba để cho nhanh gọn và chính xác.
Bài đã được tự động gộp:

Không xem đươc file của bạn, thật tiếc.
Em gửi lại anh xem giúp em ạ. Thank you
 

File đính kèm

  • DON HANg.xlsm
    331 KB · Đọc: 7
Upvote 0
Phải hiểu Code nó như thế nào thì mới biết nó có Hoạt động không:
1.AppActivate (<Tiêu đề>): Tìm kiếm Tiêu đề ứng dụng đang hoạt động nếu đúng các ký tự tính từ trước ra sau.
nếu tìm thấy 2 ứng dụng trở lên thì sẽ Chọn ưu tiên
2. Sendkeys: Con trỏ chuột đang đứng ở ứng dụng nào thì Lệnh Sendkeys sẽ gửi key đến ứng dụng đó.
Tiêu đề ứng dụng bao gồm: tên Ứng dụng + / Tên tệp đang mở +/ một tiêu đề.

Làm sao AppActivate hiểu "Filetext" là Ứng dụng của bạn được đây
Vì %P trong ứng dụng đó ko được nên em đã thử %P = tay sau đó chạy code thì nó vẫn ~ được.
Em đã thử Code với 1 file Text, %P nó cũng ko PrintPreview nhưng nếu
Application.SendKeys "123456789"
Thì lại chuyền được.
-> Hình như khi chuyền tổ hợp phím qua ứng dụng khác thì vba ko chuyền được theo cách thông thường.
Ko biết là ngoài cách này bác nào có cách chuyền khác ko ?
Em viết vba trong FILE excel.
 
Upvote 0
Tôi nhắc lại
2. Bạn có chắc chắn là sau khi chạy dòng AppActivate("Filetext") thì Bar Tender là Active không?
Căn cứ vào đâu bạn có chắc chắn đó?
Tôi nghĩ "Filetext" chỉ là ví dụ, vậy thực thế nó là thế nào?
Vd. nếu bạn mở "lay so cuoi.xls" thì trên thanh tiêu đề của Excel không phải có "lay so cuoi.xls" mà là "lay so cuoi.xls - Microsoft Excel". Cũng có thể là "lay so cuoi.xls [Compatibility Mode] - Microsoft Excel"

Ở chỗ "Filetext" bạn phải nhập đúng những gì nhìn thấy trên thanh tiêu đề của Bar Tender. Biết đâu nó còn có cả dấu cách trắng thừa. Tự thử thôi.
Vì %P trong ứng dụng đó ko được nên em đã thử %P = tay sau đó chạy code thì nó vẫn ~ được.
Bạn có chắc Print là Alt + P chứ không phải Ctrl + P?

Tôi mở Delphi 5, Notepad hay Firefox thì Print đều là Ctrl + P. Trong khi bạn viết thì Print lại là Alt + P

Khi bạn thao tác bằng tay thì bạn nhấn Alt + P?

Tôi hỏi vì thấy bạn viết %P
 
Upvote 0
Tôi nhắc lại

Tôi nghĩ "Filetext" chỉ là ví dụ, vậy thực thế nó là thế nào?
Vd. nếu bạn mở "lay so cuoi.xls" thì trên thanh tiêu đề của Excel không phải có "lay so cuoi.xls" mà là "lay so cuoi.xls - Microsoft Excel". Cũng có thể là "lay so cuoi.xls [Compatibility Mode] - Microsoft Excel"

Ở chỗ "Filetext" bạn phải nhập đúng những gì nhìn thấy trên thanh tiêu đề của Bar Tender. Biết đâu nó còn có cả dấu cách trắng thừa. Tự thử thôi.

Bạn có chắc Print là Alt + P chứ không phải Ctrl + P?

Tôi mở Delphi 5, Notepad hay Firefox thì Print đều là Ctrl + P. Trong khi bạn viết thì Print lại là Alt + P

Khi bạn thao tác bằng tay thì bạn nhấn Alt + P?

Tôi hỏi vì thấy bạn viết %P
I sorry
Code em viết ko đúng.
Thay vì ^P em lại viết %P
Thank các bác nhiều ạ
 
Upvote 0
Web KT
Back
Top Bottom