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
Cảm ơn bác cho hướng làm ạ. Cảm ơn bác @haog . Xin bác cho thêm "chữ" ạ.Tôi đồng ý với Maika8008. Dữ liệu và chương trình đang trong tay ta. Sao không mở ra mà chạy.
Tuy nhiên, nếu muốn "tự động hóa cao độ" một cách giả tạo, tôi đề xuất:
1. Trong file dang_dong, bạn nên thêm code vào ThisWorkbook sự kiện Open, như sau
Private Sub Workbook_Open()
Debug.Assert 0
run_sheet1
'Lệnh save file đang hoạt động. (Hai lệnh này tôi không nhớ nên bạn tự viết)
'Lệnh đóng file đang hoạt động. (Muộn rồi nên không muốn lục tìm)
End Sub
- 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ở.Tôi không đồng tình với cách nghĩ của bạn chút nào. Bạn muốn làm gì thì cứ code từ file đang mở. Nếu bạn biết 1 sub từ file đang đóng có công dụng gì thì tại sao bạn không viết nó từ file đang mở để tác động đến file đang đóng, hay tác động đến 1 thứ gì đó mà file đang mở hoàn toàn có thể tùy ý?
Bạn cần giả lập 1 sub (chạy được) ở file đang đóng mà file đang mở muốn gọi. Tình huống thì yêu cầu phải có thật. Bạn đưa 2 file đó lên đây.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 ạ.
File đính kèm dang_dong em có các Sub đang chạy được ở đang đóng rồi bác ạBạn cần giả lập 1 sub (chạy được) ở file đang đóng mà file đang mở muốn gọi. Tình huống thì yêu cầu phải có thật. Bạn đưa 2 file đó lên đây.
File vba với dung lượng 12M cảm thấy mở nên chậm chậm, của em thì toàn những file gần 200M mở nên rất đơ. Giờ có rất nhiều file 200M không thể gộp vào mà xử dụng bình thường được bác ạ.Tôi không tin là chỉ có thể chạy từ file đang đóng mới nhẹ chứ không phải từ file đang mở!!!
Vâng bác.Dần dà đòi hỏi càng lúc càng phi lý.
Nói chuyện toàn hàng khủng mà cứ bám vào Excel?
Công ty muốn xử lý thứ hàng khủng ấy thì cũng phải có đầu tư vào các phần mềm chuyên xử ý hàng khủng. Không thể nào "thường xuyên" lãnh hợp đồng vận chuyển hàng trăm tấn hàng mà không có lấy một chiếc xe tải.
Thay vì chúi đầu vào cái giải pháp điên rồ VBA thì nên đầu tư chất xám vào việc tìm hiểu thêm về những công nghệ của thập niên 20's, những công nghệ xử lý hàng khủng.
Chú: hằng trăm Giga dữ liệu thì máy database server với Oracle còn phải chới với nữa là nói chuyện đồ dỏm. Để làm việc được với cỡ dữ liệu này, cần chuyên viên xịn về data nói chuyện với bên bán máy để thiết kế máy cấu hình đủ xài.
Sub run_sheet1()
Call lay_data_file_mrMaika8008
Call Copy_giatri
Call Noisuytuyentinh_mrHieuCD
End Sub
strPath = ThisWorkbook.Path & "\" & "dang_mo.xlsm" 'Duong dan co dinh
On Error Resume Next
Set cn = CreateObject("adodb.connection")
cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & strPath & _
";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
Sql = "SELECT * FROM [$A2:D] WHERE f1 is not Null"
Set rs = cn.Execute(Sql)
If Not rs.EOF Then Sheet1.Range("I2").CopyFromRecordset rs
- Cảm ơn bác quan tâm tới bài của em.Hỏi vài câu
1. Code của bạn trong "dang_dong", Sub run_sheet1
Sao lại có Maika8008. Vô tình hay quen biết nhau.Mã:Sub run_sheet1() Call lay_data_file_mrMaika8008 Call Copy_giatri Call Noisuytuyentinh_mrHieuCD End Sub
2. Trong Sub lay_data_file_mrMaika8008 có đoạn
Là chép từ file có tên "dang_mo" (đang đóng) vô file "dang_dong" (lại đạng mở). Không hiểu có "ẩn khuất" gì đây.Mã:strPath = ThisWorkbook.Path & "\" & "dang_mo.xlsm" 'Duong dan co dinh On Error Resume Next Set cn = CreateObject("adodb.connection") cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & strPath & _ ";mode=Read;extended properties=""Excel 12.0;hdr=no"";") Sql = "SELECT * FROM [$A2:D] WHERE f1 is not Null" Set rs = cn.Execute(Sql) If Not rs.EOF Then Sheet1.Range("I2").CopyFromRecordset rs
Tạm trao đổi (tuy còn nhiều câu hỏi). Nếu thấy cần trao đổi thêm có thể làm tiếp ở đây hoặc gửi tôi Zalo hay Facebook của bạn.
3 - file mở và đóng cùng tromg Folder(thư mục window)Thì tôi cũng cảm ơn bạn vì đoạn code của câu hỏi 2 làm tôi có thể đọc được dữ liệu của file đang đóng, qua đó gián tiếp cảm ơn @Maika8008 .
Hỏi tiếp mấy câu
3. Các file đóng đều đã biết tên và nằm trong thư mục nào cũng đã biết tên, phải không?
4. Dữ liệu trên các file đang đóng đều có chung cấu trúc (số cột) không, có cùng số hàng không?.
5. Xử lý của bạn chủ yếu là lấy từ file dang_mo và chép vô file dang_dong hay còn gì nữa.
Tiếp các câu hỏi:Đc đến đây là được rồi ạ.
6 - Đc là được. Mong muốn mở một file gọi được Sub file đang đóng. Được như vậy là đúng mong muốn bác ạTiếp các câu hỏi:
6. "Đc" viết ở trên là "được" phải không? Nếu là "được" thì chỉ mong bạn nêu cách giải quyết để "được" bằng cách nào, cho mọi người có thêm kinh nghiệm.
7. Bạn đã cài các code vào các file có tên "dang_dong" bằng cách nào? Có khoảng 200 file. Bạn phải mở từng file và mở edit code và dán nó vào hay làm cách gì?
Python chỉ là một trong những giải pháp. Tôi không hề nói nó là giải pháp toàn hảo.Vâng bác.
Chủ đề này nhu cầu cá nhân bác. Như bác khuyên python là giải pháp. Em cố thêm chủ đề này nữa do không biết VBA có làm được việc này không.
Ở trên bác @haog có gợi ý nhưng mò cũng chưa được ạ.
Xin các bác phần code hoặc từ khóa tiếng Anh của chủ đề này giúp em với!
Giờ quay sang cái khác thấy tiếc bác ạ! Cố thêm chủ đề này nữa thôi ạ!Python chỉ là một trong những giải pháp. Tôi không hề nói nó là giải pháp toàn hảo.
Tôi đã từng nói là cái nhìn về công nghệ của bạn quá hẹp. Nhưng lúc đó tôi không tưởng là nó hẹp đến vậy.
Vấn đề trước mắt của bạn là ăn phải cái gân gà, miệng nhai không nổi mà bỏ đi thì tiếc.
Bạn mở miệng ra nghe "dữ liệu khủng", đóng miệng lại cũng "dữ liệu khủng". Thì đáng lẽ với mục đích ấy, bạn phải mở mắt ra mà tìm hiểu các công cụ chuyên về dữ liệu khủng.
Tôi không hoàn toàn nói VBA là vô vọng. Nếu bạn đã giỏi VBA rồi thì trong hiện tại (chỉ trong hiện tại thôi, chứ lâu dài vẫn phải tìm cách cải tiến) cũng có thể miễn cưỡng tiếp tục dùng code VBA. Nhưng thực tế ở đây, kiến thức VBA của bạn gần như con số không, tất cả vấn đề đều nhờ người khác viết giúp.
Gợi ý: Microsoft là môi trường của công việc thương mãi. Unix mới là nơi để chơi với dạng vấn đề toán và khoa học kỹ thuật. Nếu còn khong tách rời nổi Microsòt thì đi tìm tài liệu về Power BI mà đọc. Trước khi bạn có đủ khái niệm căn bản về Power BI thì các vấn đề hiện tại của bạn chỉ có đem lên GPE nhờ người ta code giùm. Một lần nhờ code giùm thì nhìn được một mặt của một cụm dữ liệu. Nếu bạn hiểu Power BI là cái gì thì bạn sẽ biết rằng có những cách thức để bạn có thể nhìn được vài mặt của cụm dữ liệu ấy.
một mặt với vài mặt là gì? ví dụ điển hình là con số 6 lật ngược lại thành con số 9. Theo văn chương thì Sâm Thương hai đường, không bao giờ gặp nhau, nhưng theo khoa học thì cả hai là một (Kim tinh). Tuy nhiên, kết luận rằng văn chương sai là cái nhìn một chiều.
Kiểu của thớt là gánh nước tưới vườn rau bằng lọ bixilin rồi anh.Bạn mở miệng ra nghe "dữ liệu khủng", đóng miệng lại cũng "dữ liệu khủng". Thì đáng lẽ với mục đích ấy, bạn phải mở mắt ra mà tìm hiểu các công cụ chuyên về dữ liệu khủng.
Đã nói là mớ kiến thức VBA của bạn đem bỏ đi chả có gì để tiếc cả. Các vấn đề của bạn đưa ra nào giờ toàn là những vấn đề có thể giải quyết được với tầm nhìn xa. Do bạn tự chọn VBA để giới hạn tầm của mình. Có lẽ là do nhờ code ở GPE dễ quá cho nên nhiều người đâm tính ỷ lại.Giờ quay sang cái khác thấy tiếc bác ạ! Cố thêm chủ đề này nữa thôi ạ!
Chạy được Marco có trong trang tính khác, tại file đang mở được bác ạ!Vấn đề vẫn phải mở cả 2 file nên.Kiểu của thớt là gánh nước tưới vườn rau bằng lọ bixilin rồi anh.
Đã nói là mớ kiến thức VBA của bạn đem bỏ đi chả có gì để tiếc cả. Các vấn đề của bạn đưa ra nào giờ toàn là những vấn đề có thể giải quyết được với tầm nhìn xa. Do bạn tự chọn VBA để giới hạn tầm của mình. Có lẽ là do nhờ code ở GPE dễ quá cho nên nhiều người đâm tính ỷ lại.
Không biết dứt khoát với cái dây dưa thì nó sẽ bám chân mình mãi, khó mà tiến.
Sub chay_marco_file_khacdangmo()
Dim WorkbookName As String
Dim MacroName As String
WorkbookName = "dang_dong.xlsm"
MacroName = "run_sheet1"
Run "'" & WorkbookName & "'!" & MacroName
End Sub
Muốn vậy phải Set Wb = Workbooks.Open(tên file xlsm) trước dòng Run "'" & Wb.Name & "'!" & MacroName.Chạy được Marco có trong trang tính khác, tại file đang mở được bác ạ!Vấn đề vẫn phải mở cả 2 file nên.
Code này chạy được, các bác xem chế thêm được không cho trường hợp marco file đang đóng!PHP:Sub chay_marco_file_khacdangmo() Dim WorkbookName As String Dim MacroName As String WorkbookName = "dang_dong.xlsm" MacroName = "run_sheet1" Run "'" & WorkbookName & "'!" & MacroName End Sub
Bác @Maika8008 ới xem qua cho em chút!