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

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

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
Web KT

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

Back
Top Bottom