Lấy dữ liệu từ 1 file đang đóng định sẵn (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tuan206791

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
29/4/08
Bài viết
95
Được thích
-2
Mọi người sửa giúp em đoạn code này không cần phải chọn file mà vẫn lấy được dữ liệu với ạ. Em cám ơn
 

File đính kèm

Chạy thử sub report, sửa đường dẫn nếu file đóng lưu nơi khác.

Mã:
Sub Report()
 '1. Tao doi tuong muon lay du lieu
 
 Dim cn As Object
 Set cn = CreateObject("ADODB.connection")
 
 '2. Tui chua du lieu
 
 Dim rst As Object
 Set rst = CreateObject("ADODB.recordset")
 
 '3. Tao duong dan
 Dim address As String
 address = "C:\Users\Administrator\Downloads\dang_dong.xlsm"

 '4.Mo ket noi
 cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & address & ";Extended Properties=""Excel 12.0 Xml;HDR=No""")
 
 '5. Cho du lieu vao tui va loc
 rst.Open ("SELECT * FROM [sheet1$A2:I] WHERE f1 is not Null"), cn
 
 '6. Xoa Du lieu cu va gan du lieu moi
 Sheet1.Range("a1:i1000").ClearContents
 Sheet1.Range("a3").CopyFromRecordset rst
 Sheet1.Range("a3").CurrentRegion.EntireColumn.AutoFit

End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xem và tải lại #2
 
Upvote 0
Control + S (lưu file trước khi chạy code không cần đóng file)

Chụp lại thông báo lỗi thế nào ?
 
Upvote 0
Xin hỏi anh nếu File dang_mo có chứa dữ liệu khi nhập mà không đè dữ liệu củ thì code sửa sao vậy chủ thớt
 

File đính kèm

  • 2022-07-10_170512.jpg
    2022-07-10_170512.jpg
    189.9 KB · Đọc: 15
Upvote 0
Chạy thử sub report, sửa đường dẫn nếu file đóng lưu nơi khác.

Mã:
Sub Report()
 '1. Tao doi tuong muon lay du lieu
 
 Dim cn As Object
 Set cn = CreateObject("ADODB.connection")
 
 '2. Tui chua du lieu
 
 Dim rst As Object
 Set rst = CreateObject("ADODB.recordset")
 
 '3. Tao duong dan
 Dim address As String
 address = "C:\Users\Administrator\Downloads\dang_dong.xlsm"

 '4.Mo ket noi
 cn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & address & ";Extended Properties=""Excel 12.0 Xml;HDR=No""")
 
 '5. Cho du lieu vao tui va loc
 rst.Open ("SELECT * FROM [sheet1$A2:I] WHERE f1 is not Null"), cn
 
 '6. Xoa Du lieu cu va gan du lieu moi
 Sheet1.Range("a1:i1000").ClearContents
 Sheet1.Range("a3").CopyFromRecordset rst
 Sheet1.Range("a3").CurrentRegion.EntireColumn.AutoFit

End Sub
Được rồi anh ạ, e cám ơn nhiều, nếu không muốn ghi ra sheet mà em muốn đưa vào mảng để xử lý tiếp thì sửa sao bác chỉ giúp em thêm tí nhé
 
Upvote 0
Code nhập vào mà không đè vào dữ liệu cũ thì code sửa sao vậy chủ thớt
 
Upvote 0
không muốn ghi ra sheet mà em muốn đưa vào mảng để xử lý tiếp thì sửa sao bác chỉ giúp em thêm tí nhé
Nghiên cứu file này nha.
Xử lý ngay tại file nhưng tại sheet khác.
Chọn số xe tại cell J1.
Bài đã được tự động gộp:

không đè vào dữ liệu cũ
Xác định dòng cuối trước khi ghi.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ý em là thực hiện trên file của bài 1 anh ạ
 
Upvote 0
Thay đoạn '6 bằng doạn này.
Mã:
 '6. Tim dong cuoi gan du lieu moi
 DongCuoi = Sheet1.Range("c1000").End(xlUp).Row
 Sheet1.Range("a" & DongCuoi + 2).CopyFromRecordset rst
 
Upvote 0
Do hàng ngày em phải nhập liệu và phải sao lưu nên nhờ anh viết em code sao lưu vào file đang đóng nếu có dữ liệu cũ rồi thì lưu vào dòng tiếp theo anh ạ. em xin cảm ơn anh nhiều
 

File đính kèm

Upvote 0
Vậy làm sao kiểm tra được dữ liệu nhập vào.
Đầu giờ mở file , mở sheet NhapLieu, Nhập thông tin từ E4,F4,G4, click ThemMoi, check lại thông tin, click Luu
Cuối giờ Control S, control F4 ...
 

File đính kèm

Upvote 0
Vậy làm sao kiểm tra được dữ liệu nhập vào.
...
Sao lưu gọi là để ăn tiền cơ quan.
Tự dưng rồi đè cái file ra, chép cả đống vào đó và tự mãn là đã sao lưu chỗ hiện tại vào nó.
Không một dấu hiệu phân biệt, không ngày tháng, tên tuổi dữ liệu gốc. Lấy gì tìm lại mà bảo là đã sao lưu.
 
Upvote 0
Cảm ơn các anh. Anh Tống Văn Đệ có thể nếu bổ sung thêm chức năng tạo 1 thông báo có muốn ghi đè dữ liệu dữ nếu sheet nhap lieu có tên Nguyễn Văn A, sheet1 cũng có tên Nguyễn Văn A (dựa vào cột họ tên thì sẽ ghi đè vào không anh)

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

Anh việt ơi 2 file này em bố trí các cột giống nhau mà anh. em chỉ cần khi nhập thông tin vào file du lieu nhap hang ngay thì khi luu nó sẽ lưu vào dòng cuối cùng có dữ liệu của file du lieu can sao luu thôi anh ạ
 

File đính kèm

  • luu.jpg
    luu.jpg
    105.3 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
Nếu 3 người trùng tên thì sao ?
Trong cty cũ của tôi có đến 3 cặp trùng cả tên và họ đấy
 
Upvote 0
Upvote 0
Tên mình gắn với mã cột căn cước công dân để không thể trùng được anh à
Nhờ anh viết cho em code tra cứu theo cột họ tên lấy ngược lại dữ liệu từ sheet1 đã lưu thông tin sang NhapLieu không anh (Mục đích cập nhật sửa thông tin) sau đó lại lưu đè lai sheet1
 
Upvote 0
Tên mình gắn với mã cột căn cước công dân để không thể trùng được anh à
Nhờ anh viết cho em code tra cứu theo cột họ tên lấy ngược lại dữ liệu từ sheet1 đã lưu thông tin sang NhapLieu không anh (Mục đích cập nhật sửa thông tin) sau đó lại lưu đè lai sheet1
Bạn xem bài này: Link
Trong file tôi có code cho việc Thêm, Xóa, Sửa dữ liệu rồi lưu xuống Sheet đó. Bạn ngâm cứu rồi tùy biến lại cho file của mình.

CleanShot 2022-07-14 at 17.46.24@2x.jpg
 
Upvote 0
Type vài kí tự trong textbox để tìm tên ngay trong sheet1.
Sửa trực tiếp trong cell cần sửa.
Control S lưu lại
 

File đính kèm

Upvote 0
Dạ em cảm ơớin các anh. em m sửa lại file nhờ anh chị bổ sung code khi lưu nếu trùng thì lưu đè dữ liệu cũ luôn. em cảm ơn các anh
 

File đính kèm

Upvote 0
Dạ em cảm ơớin các anh. em m sửa lại file nhờ anh chị bổ sung code khi lưu nếu trùng thì lưu đè dữ liệu cũ luôn. em cảm ơn các anh
Thử xem, biết đâu đúng ý.
Nhấn nút Them mới===>Bản ghi cuối cùng của sh Nhập Liệu sẽ được ghi và sh Data, nếu là mã số CC mới ghi vào dòng cuối, nếu là mã đã có trong Sh Data ghi đè lên dòng đó.
Nhấn nút Save===> các bản ghi sẽ được ghi và Sh Data, nếu có mã CC trùng thì ghi đè.
Vẫn code cũ tôi chỉ sửa thêm chút ít. Nếu có mạo phạm xin được tác giả cảm thông.
 

File đính kèm

Upvote 0
Dạ Đúng ý rồi anh à có cách nào mà vẫn code đó có thể lưu vào một file excel đang đóng không anh. Vì nếu lưu vào sheet Data cũng nguy hiểm anh à vì khi cùng file đó nếu mất dữ liệu thì cũng sẽ mất hết anh à
 
Upvote 0
Dạ Đúng ý rồi anh à có cách nào mà vẫn code đó có thể lưu vào một file excel đang đóng không anh. Vì nếu lưu vào sheet Data cũng nguy hiểm anh à vì khi cùng file đó nếu mất dữ liệu thì cũng sẽ mất hết anh à
Hoàn toàn có thể được , code sẽ tìm đến file (mà bạn gọi là đang đóng ấy), mở ra (có hoặc không hiển thị lên màn hình), ghi dữ liệu vào, Save, close, và trở về file đang mở. quá trình ấy nếu có thêm các điều kiện khác ( ghi trùng, ghi đè, ghi theo 1 tiêu chí nào đó- ví dụ : mã CC có địa chỉ là Hoàng Mai- ghi vào Sheet HoangMai, Mã CC có địa chỉ là Quỳnh lưu ghi vào Sh QuynhLuu.....), hoặc xử lý thêm các yêu cầu khác (vi dụ ghi vào rồi , lấy cột gì đó (vừa mói ghi) +-*/ với Cột nào đó (dữ liệu cũ) để ghi vào cột mới) . nhưng yêu cầu Dữ liệu phải chuẩn Ví dụ Ngày tháng năm phải theo đúng chuẩn của excel,...).
Muốn Vẫn code đó vẫn ghi vào Sh Data ở một folder đang đóng nào đó thì phải sửa code thôi để cho code tìm đến folder đó đã chứ.Mà tại sao bạn lại muốn ghi vào 1 file khác?
 
Upvote 0
Chỉ cần khi file excel đang mở và nhập dữ liệu xong thì ghi vào excel đang đóng anh à. Điều kiện khi ghi dữ liệu là phải ghi dòng tiếp theo của excel đang đóng, nếu 1 chủ sử dụng có số căn cước trùng nhau thì tạo hộp thoại có ghi đè không vào thông tin chủ củ không. Hàng ngày em nhập dữ liệu liên nên sợ file nhập hỏng là mất hết a à. Excel nhập có bao cột thì ghi vào file đang đóng bấy nhiêu cột anh à. Xin nhờ anh viết giùm em với
Bài đã được tự động gộp:

Cách thức lưu giống như code a viết chỉ khác là lưu vào 1 file excel đang đóng anh à
 
Upvote 0
Dạ em chưa viết được anh à .em chỉ đọc và sửa code phù hợp với dữ liệu làm hàng ngày anh ạ. Mong anh cố gắng hoàn thiện code lưu vào sheet đang đóng như e trình bày trên à cho e với ạ em xin cảm ơn anh
 
Upvote 0
Dạ em chưa viết được anh à .em chỉ đọc và sửa code phù hợp với dữ liệu làm hàng ngày anh ạ. Mong anh cố gắng hoàn thiện code lưu vào sheet đang đóng như e trình bày trên à cho e với ạ em xin cảm ơn anh
Xem file. Đưa chuột vào cột G/Sh Nhaplieu và Enter===> xem điều gì diễn ra.
Nhập tên folder và tên file cần lưu dữ liệu vào ô I2 và J2.
Lưu ý đường dẫn của tôi có thể khác bạn.
 

File đính kèm

Upvote 0
Anh xem em với em đã đặt thông tin như anh mà không thấy cập nhật được sang sheet đang đóng anh à
 

File đính kèm

  • 1.jpg
    1.jpg
    48 KB · Đọc: 15
  • 2.jpg
    2.jpg
    117.1 KB · Đọc: 15
Upvote 0
Anh xem em với em đã đặt thông tin như anh mà không thấy cập nhật được sang sheet đang đóng anh à
Tôi đã nói trước rồi, đường dẫn của tôi có thể khác của bạn.
File Nhap Lieu (2) của tôi đặt ở "C:...Download. Folder HUONG cũng có địa chỉ là :"C: ....Download\HUONG"
Trong Folder HUONG chỉ có 1 file TongHop.xlsm.
Bạn mở modul 2/Sub SaveNew và nhấn F8. tìm đến dòng Path = ThisWorkbook.Path & "\" & Sh.[I2] để xem dòng đó cho ra path= gì? Tiếp tục f8 đến dòng
If FSO.FolderExists(Path) = True Then
Set Fold = FSO.GetFolder(Path)
For Each file In Fold.Files
If file.Name Like TenFile Then

và xem các dòng này là gì? từ đó cần làm gì thì tự bạn hiểu.
Bạn tạm thời vô hiệu 2 dòng lệnh sau:
Application.ScreenUpdating = False và dòng
WbMoi.Close SaveChanges:=True và chạy thử xem File TongHop.xlsm có được mở ra không? có được cập nhật không?
Phải làm gì tiếp theo , bạn thừa sức làm được.
 
Upvote 0
Chỉ cần khi file excel đang mở và nhập dữ liệu xong thì ghi vào excel đang đóng anh à. Điều kiện khi ghi dữ liệu là phải ghi dòng tiếp theo của excel đang đóng, nếu 1 chủ sử dụng có số căn cước trùng nhau thì tạo hộp thoại có ghi đè không vào thông tin chủ củ không. Hàng ngày em nhập dữ liệu liên nên sợ file nhập hỏng là mất hết a à. Excel nhập có bao cột thì ghi vào file đang đóng bấy nhiêu cột anh à. Xin nhờ anh viết giùm em với
Bài đã được tự động gộp:

Cách thức lưu giống như code a viết chỉ khác là lưu vào 1 file excel đang đóng anh à

Nói thực đây là giải thuật sao lưu dữ liệu song song mà bạn nghĩ ra chứ tôi chưa thấy phần mềm nào được viết như vậy cả.
- Nhập liệu là chỉ lưu xuống 1 cơ sở dữ liệu (CSDL) duy nhất, có thể là Excel sheet, Access table, SQL Server table...
- Việc sao lưu dự phòng sẽ dùng code khác, định kỳ sao lưu toàn bộ CSDL thành một file riêng và có đánh dấu ngày giờ lưu. Sau này có thể dựa vào mốc thời gian để phục hồi dữ liệu về hiện trạng ban đầu trước thời điểm xảy ra sự cố.
Giải thuật của bạn làm tốn tài nguyên nhập liệu cùng lúc đến 2 lần, mỗi khi Sửa/ Xóa cũng phải chạy 2 nơi mà mục đích giải thuật này không khác việc sao lưu định kỳ. Muốn an toàn thì sao lưu mỗi ngày mà loại dữ liệu của bạn có quan trọng đến mức phải sao lưu mỗi lần nhập liệu? Còn muốn hình thức nhập liệu xong nhưng muốn quay đầu về như cũ thì nên dùng các ngôn ngữ có hỗ trợ: Begin Transaction, Cancel transaction, Commit transaction (tương tự như bắt đầu chuyển tác, hủy chuyển tác, xác nhận chuyển tác)
 
Lần chỉnh sửa cuối:
Upvote 0
Quá ngon rồi anh à anh có thể bổ sung thay vì Đưa chuột vào cột G/Sh Nhaplieu mình làm 1. cái selcet chọn từng dòng như hình sau
2. Câu lệnh lưu toàn bộ các dòng nữa là quá tuyệt anh à
 

File đính kèm

  • select.jpg
    select.jpg
    13.7 KB · Đọc: 10
  • toan bo.jpg
    toan bo.jpg
    6.2 KB · Đọc: 10
Upvote 0
Quá ngon rồi anh à anh có thể bổ sung thay vì Đưa chuột vào cột G/Sh Nhaplieu mình làm 1. cái selcet chọn từng dòng như hình sau
2. Câu lệnh lưu toàn bộ các dòng nữa là quá tuyệt anh à
1. Làm như cũ nó phù hợp với việc nhập liệu hơn. Bạn nhập liệu cho 1 người từ cột A lần lượt các thông tin đến cột G, nhập xong bạn phải Enter xuống dòng để nhập người tiếp theo, lúc này code sẽ nhập các thông tin mà bạn vừa nhập vào CSDL để lưu rồi còn gì. Theo tôi nếu làm theo hình tức là làm cái inputbox để nhập ấy đâm rườm rà hơn và không cần thiết
2.Bạn dùng vòng lặp For i = 1 to Ubound(arr) với mảng Arr =Sheets("nhapLieu").range("A3:G"& dòng cuối).value
Xét Arr(i,1) trong Vùng (Rng)=Sheets("Data").range("A2:A"& dongcuoi) xem đã có chưa bằng 2 cách:
+1. Dùng Countif. k=Application.Countif(Rng,Arr(i,1)) nếu k=0 thì lấy mới, nếu >0 thì lấy trùng.
+2. Dùng phương thức Find; Set eRng= Rng.Find(Arr(i,1)), nếu eRng is nothing thì lấy mới, nếu không thì lấy trùng.
Mà cho hỏi nhỏ chút, bạn làm ở cơ quan nào vậy? Ở Nghệ An à? Chức vụ của bạn ở cơ quan đó là gì? Tài sao tôi lại hỏi thế vì tôi cũng ở Nghệ An, và tôi thấy vẫn thiếu thiếu cái gì đó ở bạn (đa phần người xứ Nghệ đều có cái này-họ không có phần thiêu thiếu đó- còn bạn thì khác)
 
Lần chỉnh sửa cuối:
Upvote 0
Hì. Dạ em ở Nghệ An anh à. Công việc em làm bên Thống kê anh à. hàng ngày phải nhập nhiều chủ quá anh à
Nếu làm được cái inputbox vẫn hay hơn anh à. vì trong quá trình nhập xong rồi có 1 ông sai thông tin hay sửa thông tin ta chọn thửa đó và cập nhật lại chủ đó anh à.
Thật sự Em chưa viết được code chỉ mong anh viết cho rồi em ứng dụng vào thực tế công việc anh à
 
Upvote 0
Qua em bận quá chưa kịp hoi anh hướng anh ở huyện mô nghệ an đó anh.
 
Upvote 0
Mấy hôm lu bu quá anh à . em chưa nt lại cho a được. Em ở quỳnh lưu a à. Khi nào có dịp rảnh mời qua quỳnh lưu quê e chơi a à
 
Upvote 0
Mấy hôm lu bu quá anh à . em chưa nt lại cho a được. Em ở quỳnh lưu a à. Khi nào có dịp rảnh mời qua quỳnh lưu quê e chơi a à
Cảm ơn bạn. Tôi có rất nhiều bạn ở Quỳnh lưu (Ngọc Sơn, Quỳnh Mỹ, Quỳnh Thuận, Quỳnh Thiện, Quỳnh Hồng, Quỳnh Lập, Giát...), Có cả Ông Chú ở Quỳnh Lập nữa cơ. Mà theo dõi trên diễn đàn thấy bạn đăng cũng hay có mặt trên diễn đàn này và ở diễn đàn "Tự học VBA" (nick khác) nữa mà, mà là ở nhiều vấn đề không liên quan nhau. Cứ tự hỏi hay bạn làm nghề khác không phải là thống kê, các vấn đề bạn hỏi là hỏi giúp người khác cơ chứ không phải hỏi cho bạn.
P/S: bạn đăng bài trả lời ai hoặc nhờ ai giúp thì nên trích dẫn bài của họ (dễ theo dõi và cũng để đúng trọng tâm....), Chỉ cần nhấn vào nút trích dẫn và trả lời của bài đó là được chứ có khó khăn gì đâu.
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ cảm ơn anh. Lúc nào rảnh anh nhắn tin trước Em mời anh xuống biển quỳnh nghĩa tắm biển anh nhé.
Dạ. bạn đăng bài trả lời ai hoặc nhờ ai giúp thì nên trích dẫn bài của họ (dễ theo dõi và cũng để đúng trọng tâm....), Chỉ cần nhấn vào nút trích dẫn và trả lời của bài đó là được chứ có khó khăn gì đâu. cái này em rút kinh nghiệm ạ
 
Upvote 0

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

Back
Top Bottom