Tại file đang mở thực thi các Sub có trong file đang đóng mà không cần mở file đang đóng!Xin giúp đỡ!

Liên hệ QC

Thư Sinh Áo Trắng

Thành viên hoạt động
Tham gia
26/3/21
Bài viết
160
Được thích
31
dang_mo.jpg
dang_dong.jpg
Xin giúp đỡ cho em trường hợp này với ạ! Em chân thành cảm ơn!
File đính kèm
 

File đính kèm

  • dang_mo.xlsm
    18.1 KB · Đọc: 8
  • dang_dong.xlsm
    21.4 KB · Đọc: 8
Nếu chủ thớt chạy theo vết thì sẽ thấy code này mở file "dang_dong" để chạy code trong "dang_dong", đúng theo gợi ý của tôi là file đang là của mình thì cứ mở ra mà chạy code.

Coi rằng "ngon" cũng được.

Chú ý các câu lệnh trong code trên được trích như sau
Mã:
10    CloseIt = True
20    Application.Run (wbTarget.Name & "!run_sheet1")
30    If CloseIt = True Then ...
dường như vô nghĩa: biến CloseIt có thay đổi gì đâu khi chạy câu lệnh 20. Nên ở dòng 30 , lệnh If luôn chạy lệnh sau Then.

Thêm nữa, câu lệnh 30 chỉ cần viết
Mã:
30    If CloseIt Then ...
Vâng bác!
Code bài 39 sẽ hữu ích trong trường hợp dữ liệu quá lớn mà buộc phải tách nhỏ ra để giảm dung lượng phải không ạ!
 
Upvote 0
Rõ ràng viết If closeIt = True then... thì 20 năm sau đọc phát hiểu ngay.
If x Then
Khong hẳn 100% tương đương với
If x = true
VBA theo luật cũ xưa (trước 70's), xét lô gic của lệnh If theo 0 và <>0
Trong câu lệnh thứ nhất, VBA chỉ xét xem x có khác 0
Trong câu lệnh thứ hai, VBA sẽ ép kiểu x hoặc True để có thể so sánh với nhau. Nếu x là integer thì True sẽ ép thành -1.

Chú cho người viết cái code mở file trên :
Theo tôi đọc thì code ấy tự động đóng và save file vô điều kiện. Nếu file ấy đang chỉnh sửa thì ô là la :p. Thớt chưa thấy quan tài nên chưa đổ lệ.
 
Upvote 0
If x Then
Khong hẳn 100% tương đương với
If x = true
VBA theo luật cũ xưa (trước 70's), xét lô gic của lệnh If theo 0 và <>0
Trong câu lệnh thứ nhất, VBA chỉ xét xem x có khác 0
Trong câu lệnh thứ hai, VBA sẽ ép kiểu x hoặc True để có thể so sánh với nhau. Nếu x là integer thì True sẽ ép thành -1.

Chú cho người viết cái code mở file trên :
Theo tôi đọc thì code ấy tự động đóng và save file vô điều kiện. Nếu file ấy đang chỉnh sửa thì ô là la :p. Thớt chưa thấy quan tài nên chưa đổ lệ.
Những cái bác bổ sung rất "bổ". Do file xài một mình nên chỉ code vậy cũng được phải không ạ
 
Upvote 0
Những cái bác bổ sung rất "bổ". Do file xài một mình nên chỉ code vậy cũng được phải không ạ
Code không phải của tôi . Tôi chỉ phê đến thế thôi.
Nếu bạn hỏi câu ấy thì bạn chỉ nói "bổ" cho có lệ chứ bạn chả hiểu tôi nói gì.
Những gì tôi nói là thuộc về kinh nghiệm lập trình. Tôi nêu ra những hầm hố cần tránh. Nhưng nếu tự tin mình mắt 20/20 dò đường cẩn thận thì cần gì phải biết trước những đoạn đường hầm hố.
 
Upvote 0
Code không phải của tôi . Tôi chỉ phê đến thế thôi.
Nếu bạn hỏi câu ấy thì bạn chỉ nói "bổ" cho có lệ chứ bạn chả hiểu tôi nói gì.
Những gì tôi nói là thuộc về kinh nghiệm lập trình. Tôi nêu ra những hầm hố cần tránh. Nhưng nếu tự tin mình mắt 20/20 dò đường cẩn thận thì cần gì phải biết trước những đoạn đường hầm hố.
Bổ chỗ bác dẫn ra câu lệnh "If x Then" ấy bác, gặp nhiều dạng "If x Then" đến câu dẫn của bác giờ mới hiểu ra là nó mặc định True nếu ép kiểu là Boolean, mặc định là = -1 nếu ép kiểu là Integer thay vì mình phải "If x = True(-1) Then..."
 
Upvote 0
Bổ chỗ bác dẫn ra câu lệnh "If x Then" ấy bác, gặp nhiều dạng "If x Then" đến câu dẫn của bác giờ mới hiểu ra là nó mặc định True nếu ép kiểu là Boolean, mặc định là = -1 nếu ép kiểu là Integer thay vì mình phải "If x = True(-1) Then..."
Có hiểu đúng đâu.

Bạn khai báo rõ ràng là Boolean rồi, còn ép đi đâu nữa?

1623308839711.png
 
Upvote 0
Upvote 0
Em có gặp một số câu If x Then... đến câu dẫn của bác @VetMini mới hiểu, chứ phải nói code trong Top này bác!
Cách viết tắt đó là đối chiếu với giá trị mặc định của biến, nếu khác thì thỏa.
Tùy theo biến đó được khai báo theo kiểu dữ liệu nào: Number, string, boolean, object... thì có giá trị mặc định tương ứng.
Và việc nhớ giá trị mặc định của mỗi kiểu dữ liệu tốn não, vậy nên viết luôn nó đối chiếu với giá trị nào thì đọc phát hiểu ngay.
 
Upvote 0
Cách viết tắt đó là đối chiếu với giá trị mặc định của biến, nếu khác thì thỏa.
Tùy theo biến đó được khai báo theo kiểu dữ liệu nào: Number, string, boolean, object... thì có giá trị mặc định tương ứng.
Và việc nhớ giá trị mặc định của mỗi kiểu dữ liệu tốn não, vậy nên viết luôn nó đối chiếu với giá trị nào thì đọc phát hiểu ngay.
Vâng bác. Em hay đi ăn mót các code nên em cũng hay gặp kiểu viết tắt mà không hiểu tại sao lại thế.
 
Upvote 0
Cảm ơn bác cho hướng làm ạ. Cảm ơn bác @haog . Xin bác cho thêm "chữ" ạ.

- Vẫn là do dữ liệu quá lớn phải chia nhỏ ra nhiều file. Mỗi file như vậy cũng có các Sub phải chạy để có dữ liệu( file đính kèm là ví dụ vài Sub, nếu chạy được thì kết luận chạy nhiều sub được) rồi chuyển về file đang mở.
- Vấn đề này với em mới mẻ mà quá là khó. Nếu không chạy được các sub ở file đóng thì sức lực bào mòn (mỗi lần mở máy tính rất ngán, do nhiều file quá) và cảm giác mênh mông quá.
- Thực ra em không biết VBA có thể có làm được việc này không và lần nữa cầu may có bác nào từng làm qua thì xin phần code này.
Xin trợ giúp ạ.
Đang đóng với chả đang mở gì bạn, dữ liệu quá lớn và không có thạo VBA thì coi sử dụng Power Query hay Power Bi đi. Nó thiết kế nhằm hỗ trợ cho người chả thạo lập trình gì, dữ liệu lớn mà cứ bám vào VBA làm gì.
 
Upvote 0
Đang đóng với chả đang mở gì bạn, dữ liệu quá lớn và không có thạo VBA thì coi sử dụng Power Query hay Power Bi đi. Nó thiết kế nhằm hỗ trợ cho người chả thạo lập trình gì, dữ liệu lớn mà cứ bám vào VBA làm gì.
100G dữ liệu nhồi vào 1 file trong Power Query hay Power Bi được à bạn?
 
Upvote 0
Tôi có viết
Chú ý các câu lệnh trong code trên được trích như sau
Mã:
10    CloseIt = True
20    Application.Run (wbTarget.Name & "!run_sheet1")
30      If CloseIt = True Then ...
dường như vô nghĩa: biến CloseIt có thay đổi gì đâu khi chạy câu lệnh 20. Nên ở dòng 30 , lệnh If luôn chạy lệnh sau Then.

Trích dẫn cho đủ là
Mã:
10    CloseIt = True
    'On Error GoTo 0
20    Application.Run (wbTarget.Name & "!run_sheet1") 'run_sheet1 là tên Marco của cần chạy của file đóng
30    If CloseIt = True Then
40        wbTarget.Close savechanges:=True
50    Else
60        ThisWorkbook.Activate
70    End If
Tức là lệnh Application.Run (wbTarget.Name & "!run_sheet1") không hề có tác động gì làm thay đổi biến CloseIt (luôn =True). Cho nên các lệnh từ 30 đến 70 chỉ là lệnh 40 mà thôi.
 
Upvote 0
100G dữ liệu nhồi vào 1 file trong Power Query hay Power Bi được à bạn?
Tôi chưa từng xử lý nhiều dữ liệu như vậy, vì 100gb nó có tương đương với hàng tỷ dòng dữ liệu rồi. Tôi từng nạp dữ liệu gần 10gb, tuy nhiên refresh nó quả thực là vấn đề không nhỏ . Theo ý kiến chủ quan của tôi thì 100gb bản power bi premium có thể chơi được. Dữ liệu lớn như vậy mà bạn chạy excel với VBA tôi thấy hơi ngạc nhiên.
 
Upvote 0
Tôi chưa từng xử lý nhiều dữ liệu như vậy, vì 100gb nó có tương đương với hàng tỷ dòng dữ liệu rồi. Tôi từng nạp dữ liệu gần 10gb, tuy nhiên refresh nó quả thực là vấn đề không nhỏ . Theo ý kiến chủ quan của tôi thì 100gb bản power bi premium có thể chơi được. Dữ liệu lớn như vậy mà bạn chạy excel với VBA tôi thấy hơi ngạc nhiên.
Của mình thì khoảng 100.000.000 (100 triệu dòng). Các file của mình chia ra dưới 200M thì thấy khi chạy code không đơ lâu lắm. Vẫn muốn sử dụng VBA vì dễ code để tính toán trên các file. Giờ mình có code của top này cũng không vất vả quá để chạy code.
Ý định của mình hoàn thiện quy trình tính bằng VBA sau đó học qua ngôn ngữ Python. Mình biết dữ liệu lớn VBA nó ì ạch nhưng code cho việc tính toán dễ dàng.
 
Upvote 0
Của mình thì khoảng 100.000.000 (100 triệu dòng). Các file của mình chia ra dưới 200M thì thấy khi chạy code không đơ lâu lắm. Vẫn muốn sử dụng VBA vì dễ code để tính toán trên các file. Giờ mình có code của top này cũng không vất vả quá để chạy code.
Ý định của mình hoàn thiện quy trình tính bằng VBA sau đó học qua ngôn ngữ Python. Mình biết dữ liệu lớn VBA nó ì ạch nhưng code cho việc tính toán dễ dàng.
100tr dòng thì làm gì đến 100gb bạn. 100tr dòng thì cùng lắm 10gb và power bi bản free hoặc bản pro nó chạy trong một nốt nhạc, cần gì mà phải tách cho mất công. Power bi có thể kết hợp với R hay Python nhé!
 
Upvote 0
100tr dòng thì làm gì đến 100gb bạn. 100tr dòng thì cùng lắm 10gb và power bi bản free hoặc bản pro nó chạy trong một nốt nhạc, cần gì mà phải tách cho mất công. Power bi có thể kết hợp với R hay Python nhé!
Dòng x cột mới ra được dung lượng file. Cụ thể 1 file của mình hơn 20 triệu cell. Chắc mình dung luôn Python sợ sức học không cho phép học nhiều ngôn ngữ hay công cụ được.
 
Lần chỉnh sửa cuối:
Upvote 0
100tr dòng thì làm gì đến 100gb bạn. 100tr dòng thì cùng lắm 10gb và power bi bản free hoặc bản pro nó chạy trong một nốt nhạc, cần gì mà phải tách cho mất công. Power bi có thể kết hợp với R hay Python nhé!
Cỡ có thể phân tích hàng chục triệu mẩu dữ liệu là bậc thầy của tôi rồi. Bạn lý luận chi cho tổn hơi.
Vả lại:
1. Khi người ta vào GPE là đã có định kiến "VBA số một" rồi, khó mà thay đổi.
2. VBA mới có người code cho a đến z chứ mấy ngón khác bắt buộc phải làm, chỉ hỏi được chỗ bí.
 
Upvote 0
Web KT

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

Back
Top Bottom