Chạy hai hoặc nhiều hơn 2 maccro cùng một lúc

Liên hệ QC

quanglenb

Thành viên hoạt động
Tham gia
2/11/19
Bài viết
136
Được thích
25
Giả sử em có 2 maccro là SubA() và SubB()
Giờ có cách nào để có thể chạy SubA() và SubB() cùng một lúc (nhấn phím tắt nào đã quy định để tác 2 maccro đều có tác dụng cùng lúc)
Nếu có phải gộp lại thành một maccro có tên là SubC() thì gộp thế nào ạ?
Xin nhờ anh chị hướng dẫn giúp em.
Em xin cảm ơn!
 
Giả sử em có 2 maccro là SubA() và SubB()
Giờ có cách nào để có thể chạy SubA() và SubB() cùng một lúc (nhấn phím tắt nào đã quy định để tác 2 maccro đều có tác dụng cùng lúc)
Nếu có phải gộp lại thành một maccro có tên là SubC() thì gộp thế nào ạ?
Xin nhờ anh chị hướng dẫn giúp em.
Em xin cảm ơn!
Chạy cùng 1 lúc thì không được
Chạy A xong thì chạy B hoặc ngược lại thì được
mà tác dụng gì để chạy cùng 1 lúc?
 
Giả sử em có 2 maccro là SubA() và SubB()
Giờ có cách nào để có thể chạy SubA() và SubB() cùng một lúc (nhấn phím tắt nào đã quy định để tác 2 maccro đều có tác dụng cùng lúc)
Nếu có phải gộp lại thành một maccro có tên là SubC() thì gộp thế nào ạ?
Xin nhờ anh chị hướng dẫn giúp em.
Em xin cảm ơn!
Trong 1 sub có thể gọi để chạy nhiều Macro thì được.
Còn chạy nhiều Macro cùng lúc thì không được.
 
100% tôi nói với bạn là được. Nhưng bạn có đủ "trình hữu học" để kiểm soát những gì sẽ diễn ra hay không.

Nếu bạn không đủ "trình" để kiểm soát thì "1 + 8 ~ 5" bạn có chịu không.

Những gì bạn đang mong muốn đó là ở cấp bậc lập trình chuyên sâu. Vì vậy nếu bạn không đi theo hướng chuyên sâu thì nên từ bỏ ngay từ bước đầu tiên. Lúc này chắc chắn "1+8 = 9"
 
Giả sử em có 2 maccro là SubA() và SubB()
Giờ có cách nào để có thể chạy SubA() và SubB() cùng một lúc (nhấn phím tắt nào đã quy định để tác 2 maccro đều có tác dụng cùng lúc)
Nếu có phải gộp lại thành một maccro có tên là SubC() thì gộp thế nào ạ?
Xin nhờ anh chị hướng dẫn giúp em.
Em xin cảm ơn!
Thời gian là khái niệm tương đối, "cùng lúc" chỉ mang ý nghĩa diễn đạt tương đối với sai số quá bé nhỏ không trọng yếu
Sub C()
Call A
Call B
end Sub
 
Ý chủ topic muốn nhắc đến lập trình đa luồng (multi threading), vba không hỗ trợ. Có thể có giải pháp khắc phục, Google là ra nhưng là lập trình chuyên sâu rồi.
 
100% tôi nói với bạn là được. Nhưng bạn có đủ "trình hữu học" để kiểm soát những gì sẽ diễn ra hay không.

Nếu bạn không đủ "trình" để kiểm soát thì "1 + 8 ~ 5" bạn có chịu không.

Những gì bạn đang mong muốn đó là ở cấp bậc lập trình chuyên sâu. Vì vậy nếu bạn không đi theo hướng chuyên sâu thì nên từ bỏ ngay từ bước đầu tiên. Lúc này chắc chắn "1+8 = 9"
Xin cám ơn ý kiến của các thầy, các anh!
Ý em là chạy lần lượt thôi
Cụ thể là khi nhấn Sub tổng hợp (hay cách nào đó) sẽ chạy lần lượt hai SubA() và SubB().
 
Xin cám ơn ý kiến của các thầy, các anh!
Ý em là chạy lần lượt thôi
Cụ thể là khi nhấn Sub tổng hợp (hay cách nào đó) sẽ chạy lần lượt hai SubA() và SubB().
Cách làm như đã nêu ở bài 5, Tạo một Sub dùng chung và muốn Sub nào chạy thì Call Sub đó.
 
Giả sử em có 2 maccro là SubA() và SubB()
Giờ có cách nào để có thể chạy SubA() và SubB() cùng một lúc (nhấn phím tắt nào đã quy định để tác 2 maccro đều có tác dụng cùng lúc)
...
Xem bài #5
Tuy nhiên, trước khi làm, cần phải lưu ý:
1. các biến toàn cục
2. các trường hợp môi trường mặc định bị thay đổi
ví dụ trong code A chuyển activesheet thành sheet2, có thể qua B nó vẫn tưởng activesheet là sheet1.

...Nếu có phải gộp lại thành một maccro có tên là SubC() thì gộp thế nào ạ?
...
Châm ngôn chung: "if it ain't broke, don't fix it"
Gộp để làm chi vậy?
Nếu A và B đã chạy tốt rồi thì để yên nó. Chỉ nên gộp khi chúng là 2 công đoạn không thể tách rời - có A thì phải có B, và ngược lại.

Gộp tương đối dễ, nhưng không giản dị. Nếu chỉ copy và paste hai sub kế tiếp nhau thì hai điểm quan trọng nhất cần phải lưu ý là:
1. Các biến có thể bị trùng tên nhau nhưng lại được khai báo và sử dụng cho kiểu khác nhau.
Ví dụ biến x trong A được khai báo là Integer nhưng qua B thì khai là String
2. Các trường hợp mặc định.
Ví dụ biến x cùng là Integer trong A và B; nhưng trong cả A và B lúc bắt đầu sử dụng, chúng được mặc định là 0. Khi chạy code A trước thì qua B có thể x không còn mang trị mặc định là 0 nữa.

Nếu code bạn copy từ diễn đàn này thì 99% là chúng dựa vào mặc định.
 
Xem bài #5
Tuy nhiên, trước khi làm, cần phải lưu ý:
1. các biến toàn cục
2. các trường hợp môi trường mặc định bị thay đổi
ví dụ trong code A chuyển activesheet thành sheet2, có thể qua B nó vẫn tưởng activesheet là sheet1.


Châm ngôn chung: "if it ain't broke, don't fix it"
Gộp để làm chi vậy?
Nếu A và B đã chạy tốt rồi thì để yên nó. Chỉ nên gộp khi chúng là 2 công đoạn không thể tách rời - có A thì phải có B, và ngược lại.

Gộp tương đối dễ, nhưng không giản dị. Nếu chỉ copy và paste hai sub kế tiếp nhau thì hai điểm quan trọng nhất cần phải lưu ý là:
1. Các biến có thể bị trùng tên nhau nhưng lại được khai báo và sử dụng cho kiểu khác nhau.
Ví dụ biến x trong A được khai báo là Integer nhưng qua B thì khai là String
2. Các trường hợp mặc định.
Ví dụ biến x cùng là Integer trong A và B; nhưng trong cả A và B lúc bắt đầu sử dụng, chúng được mặc định là 0. Khi chạy code A trước thì qua B có thể x không còn mang trị mặc định là 0 nữa.

Nếu code bạn copy từ diễn đàn này thì 99% là chúng dựa vào mặc định.
Em biết đến 1 code trên diễn đàn để in.
và khi in thì có vấn đề như sau: những dữ liệu dòng trống em cần ẩn nó đi.
Em thực hiện ghi Maccro và lắp vào Form in đó để khi in thì thực hiện ẩn những dòng không có dữ liệu đó được.
Em đã ghép thử ví dụ nếu code đều ở module thì ghép được, nhưng đây là code trong Form em ghép mấy cách mà vẫn không được.
Xem bài #5
Tuy nhiên, trước khi làm, cần phải lưu ý:
1. các biến toàn cục
2. các trường hợp môi trường mặc định bị thay đổi
ví dụ trong code A chuyển activesheet thành sheet2, có thể qua B nó vẫn tưởng activesheet là sheet1.


Châm ngôn chung: "if it ain't broke, don't fix it"
Gộp để làm chi vậy?
Nếu A và B đã chạy tốt rồi thì để yên nó. Chỉ nên gộp khi chúng là 2 công đoạn không thể tách rời - có A thì phải có B, và ngược lại.

Gộp tương đối dễ, nhưng không giản dị. Nếu chỉ copy và paste hai sub kế tiếp nhau thì hai điểm quan trọng nhất cần phải lưu ý là:
1. Các biến có thể bị trùng tên nhau nhưng lại được khai báo và sử dụng cho kiểu khác nhau.
Ví dụ biến x trong A được khai báo là Integer nhưng qua B thì khai là String
2. Các trường hợp mặc định.
Ví dụ biến x cùng là Integer trong A và B; nhưng trong cả A và B lúc bắt đầu sử dụng, chúng được mặc định là 0. Khi chạy code A trước thì qua B có thể x không còn mang trị mặc định là 0 nữa.

Nếu code bạn copy từ diễn đàn này thì 99% là chúng dựa vào mặc định.
Em biết đến 1 code trên diễn đàn để in.
và khi in thì có vấn đề như sau: những dữ liệu dòng trống em cần ẩn nó đi.
Em thực hiện ghi Maccro và lắp vào Form in đó để khi in thì thực hiện ẩn những dòng không có dữ liệu đó được.
Em đã ghép thử ví dụ nếu code đều ở module thì ghép được, nhưng đây là code trong Form em ghép mấy cách mà vẫn không được.
 
Em biết đến 1 code trên diễn đàn để in.
và khi in thì có vấn đề như sau: những dữ liệu dòng trống em cần ẩn nó đi.
Em thực hiện ghi Maccro và lắp vào Form in đó để khi in thì thực hiện ẩn những dòng không có dữ liệu đó được.
Em đã ghép thử ví dụ nếu code đều ở module thì ghép được, nhưng đây là code trong Form em ghép mấy cách mà vẫn không được.

Em biết đến 1 code trên diễn đàn để in.
và khi in thì có vấn đề như sau: những dữ liệu dòng trống em cần ẩn nó đi.
Em thực hiện ghi Maccro và lắp vào Form in đó để khi in thì thực hiện ẩn những dòng không có dữ liệu đó được.
Em đã ghép thử ví dụ nếu code đều ở module thì ghép được, nhưng đây là code trong Form em ghép mấy cách mà vẫn không được.
Cắt Sub trong Form và dán vào Module: sub abc(), trong Form thay bằng Sub mới chỉ có 1 dòng lệnh Call abc, chú ý khi lấy dữ liệu cần có Sheets("...").Range("...")
 
Em biết đến 1 code trên diễn đàn để in.
và khi in thì có vấn đề như sau: những dữ liệu dòng trống em cần ẩn nó đi.
Em thực hiện ghi Maccro và lắp vào Form in đó để khi in thì thực hiện ẩn những dòng không có dữ liệu đó được.
Em đã ghép thử ví dụ nếu code đều ở module thì ghép được, nhưng đây là code trong Form em ghép mấy cách mà vẫn không được.

Em biết đến 1 code trên diễn đàn để in.
và khi in thì có vấn đề như sau: những dữ liệu dòng trống em cần ẩn nó đi.
Em thực hiện ghi Maccro và lắp vào Form in đó để khi in thì thực hiện ẩn những dòng không có dữ liệu đó được.
Em đã ghép thử ví dụ nếu code đều ở module thì ghép được, nhưng đây là code trong Form em ghép mấy cách mà vẫn không được.
Bài 1 bạn không nêu rỏ mục đích của công việc bạn cần mà chỉ nêu chung chung muốn gộp SubA() và SubB() lại thành một là SubC(). Vì vậy, các thành viên cũng trả lời chung chung.

Đúng ra bạn phải hỏi thế này:
1/ Về tiêu đề bài viết nêu: Tôi muốn lấy dữ liệu sheet1 qua sheet2 để in hàng loạt và ẩn dòng trống.
2/ Nội dung bên dưới phải cụ thể là, Ví dụ: Tôi có 3 Sub:
- Sub A() dùng co giản dòng theo dữ liệu.
- Sub B() dùng in ấn hàng loạt.
- Và 1 Sub là Worksheet_Change:

Tôi muốn khi Cell G8 của sheet2 chứa Sub Worksheet_Change có thay đổi giá trị tại Cell G8 thì gọi Sub A() và Sub B, đồng thời ẩn những dòng trống (không có dữ liệu).
 
Bài 1 bạn không nêu rỏ mục đích của công việc bạn cần mà chỉ nêu chung chung muốn gộp SubA() và SubB() lại thành một là SubC(). Vì vậy, các thành viên cũng trả lời chung chung.

Đúng ra bạn phải hỏi thế này:
1/ Về tiêu đề bài viết nêu: Tôi muốn lấy dữ liệu sheet1 qua sheet2 để in hàng loạt và ẩn dòng trống.
2/ Nội dung bên dưới phải cụ thể là, Ví dụ: Tôi có 3 Sub:
- Sub A() dùng co giản dòng theo dữ liệu.
- Sub B() dùng in ấn hàng loạt.
- Và 1 Sub là Worksheet_Change:

Tôi muốn khi Cell G8 của sheet2 chứa Sub Worksheet_Change có thay đổi giá trị tại Cell G8 thì gọi Sub A() và Sub B, đồng thời ẩn những dòng trống (không có dữ liệu).
Dạ vâng. Anh xem giúp em ạ! em cứ nghĩ là gộp vào là chạy được nhưng không phải vậy!
 
Dạ vâng. Anh xem giúp em ạ! em cứ nghĩ là gộp vào là chạy được nhưng không phải vậy!
Bạn cứ nghĩ nó đơn giản, nhưng đối nhiều thành viên thì không nhất là cái vụ gộp nhiều Cell (Merge And Center) và co giản dòng thì nó không đơn giản chút nào, vào mục tìm kiếm gõ từ khóa (click vào link này) Co giản dòng để hiểu cặn kẻ hơn.

Bạn muốn nhiều thành viên giúp thì nên đăng bài mới trong Box Lập trình với Excel. tiêu đề và nội dung như tôi nêu ở bài 13.

Vì lấy dữ liệu, co giản dòng và in hàng loạt là cần cụ thể. Vì vậy khi đăng bài bạn nên đính kèm File, còn nêu vấn đề chung chung thì chẳng ai hiểu để giúp.
 
Lần chỉnh sửa cuối:
Xem bài #5
Tuy nhiên, trước khi làm, cần phải lưu ý:
1. các biến toàn cục
2. các trường hợp môi trường mặc định bị thay đổi
ví dụ trong code A chuyển activesheet thành sheet2, có thể qua B nó vẫn tưởng activesheet là sheet1.


Châm ngôn chung: "if it ain't broke, don't fix it"
Gộp để làm chi vậy?
Nếu A và B đã chạy tốt rồi thì để yên nó. Chỉ nên gộp khi chúng là 2 công đoạn không thể tách rời - có A thì phải có B, và ngược lại.

Gộp tương đối dễ, nhưng không giản dị. Nếu chỉ copy và paste hai sub kế tiếp nhau thì hai điểm quan trọng nhất cần phải lưu ý là:
1. Các biến có thể bị trùng tên nhau nhưng lại được khai báo và sử dụng cho kiểu khác nhau.
Ví dụ biến x trong A được khai báo là Integer nhưng qua B thì khai là String
2. Các trường hợp mặc định.
Ví dụ biến x cùng là Integer trong A và B; nhưng trong cả A và B lúc bắt đầu sử dụng, chúng được mặc định là 0. Khi chạy code A trước thì qua B có thể x không còn mang trị mặc định là 0 nữa.

Nếu code bạn copy từ diễn đàn này thì 99% là chúng dựa vào mặc định.
Bài đã được tự động gộp:

Bạn cứ nghĩ nó đơn giản, nhưng đối nhiều thành viên thì không nhất là cái vụ gộp nhiều Cell (Merge And Center) và co giản dòng thì nó không đơn giản chút nào, vào mục tìm kiếm gõ từ khóa (click vào link này) Co giản dòng để hiểu cặn kẻ hơn.

Bạn muốn nhiều thành viên giúp thì nên đăng bài mới trong Box Lập trình với Excel. tiêu đề và nội dung như tôi nêu ở bài 13.

Vì lấy dữ liệu, co giản dòng và in hàng loạt là cần cụ thể. Vì vậy khi đăng bài bạn nên đính kèm File, còn nêu vấn đề chung chung thì chẳng ai hiểu để giúp.
Em đã tải file lên, anh giúp em mới ạ!
Bài đã được tự động gộp:

Cắt Sub trong Form và dán vào Module: sub abc(), trong Form thay bằng Sub mới chỉ có 1 dòng lệnh Call abc, chú ý khi lấy dữ liệu cần có Sheets("...").Range("...")
Vâng, cám ơn anh. Em vừa tải file lên, anh xem giúp em ạ!
 
Lần chỉnh sửa cuối:
Sau 15 bài khởi động thì bài #16 bắt đầu vào đề. :D
 
Vâng, em tải file lên anh giúp em mới nhé!
Sub Sub Anhien_dong() em tạo.
Mã:
Sub Anhien_dong()
    Sheets("BK").Range("$E$8:$E$10").AutoFilter Field:=1, Criteria1:="H"
End Sub
Mục đích là để ẩn dòng trống từ A8:C10 của sheet"BK" Khi in theo thứ tự:
Code in em tham khảo trên diễn đàn có như file kèm:
Nhờ Bác giúp em để lắp đoạn code em tạo trên khi in có thể tự động ẩn dòng trống giống như khi Run Sub Anhien_dong()
Nếu Bác có cách hay hơn cho em xin ý kiến mới nhé! mục đích của em chỉ là khi in ra những dòng trống bị ẩn đi.
Cảm ơn Bác nhiều!
op.png


Bài đã được tự động gộp:


Em đã tải file lên, anh giúp em mới ạ!
Bài đã được tự động gộp:


Vâng, cám ơn anh. Em vừa tải file lên, anh xem giúp em ạ!
Pass:1
 

File đính kèm

  • Nho bac.rar
    74 KB · Đọc: 2
  • Nho bac.xlsm
    79 KB · Đọc: 2
Lần chỉnh sửa cuối:
Sau 15 bài khởi động thì bài #16 bắt đầu vào đề. :D
Hi, em vừa bị loạn, em mới Tham gia diễn đàn nên chưa thao tác được chỉnh chu.
Mong các bác thứ lỗi, em rút kinh nghiệm.
Bài đã được tự động gộp:

File hình như có chứa virus nên không tải được.
Em đã giải nén file đính kèm bài #18, phiền bác xem giúp!
 
Web KT
Back
Top Bottom