Đọc và ghi dữ liệu vào file excel khác mà không cần mở file đó lên

Liên hệ QC

duyamadet

Thành viên mới
Tham gia
16/3/07
Bài viết
24
Được thích
3
Em chào các bác,
Nhờ các bác giúp em trường hợp này:
Ví dụ em có 2 file:
- File Report.xlsm có UserForm (lưu ở Desktop)
- File D:\Data.xlsx có dữ liệu (như hình)
1647170040411.png
A) Đọc file không cần mở file
Trong Userform, nhập textbox1: Mon
Thì Label1 sẽ lookup ở cột B trong file Data.xls và hiển thị ra 'Phở' mà không cần mở file Data.xlsx

B) Ghi file không cần mở file
Trong Useform, Textbox2 nhập chữ 'ngon quá' --> thì ghi chữ 'ngon quá' vào ô C1 của file Data.xlsx (mà không cần mở file Data.xlsx)

Note: Nếu cách 'không mở file' không khả thì thì giúp em code có mở file cho 2 chức năng trên cũng được.
Em cảm ơn các bác nhiều.
 
Biết nhiều và chi tiết thế này thì chắc lười không tự làm rồi.
 
Upvote 0
Biết nhiều và chi tiết thế này thì chắc lười không tự làm rồi.
Chào bác,
Nếu em biết làm thì em đâu có nhọc công lên đây nhờ trợ giúp bác. Biết thì ngồi viết lẹ hơn đăng hỏi vào ngồi chờ.
Em có thể mở file Data lên copy dữ liệu sang file Report và dán dữ liệu mới vào file Data rồi lưu lại, đóng file Data. Nhưng như thế không chuyên nghiệp lắm, nên em mới tìm giải pháp tốt hơn.
 
Upvote 0
Em có thể mở file Data lên copy dữ liệu sang file Report và dán dữ liệu mới vào file Data rồi lưu lại, đóng file Data. Nhưng như thế không chuyên nghiệp lắm, nên em mới tìm giải pháp tốt hơn.
người ta không biết mới hỏi ai mà biết lại hỏi.
Mình chỉ đoán vậy thôi, nếu không đúng thì vui lòng bỏ qua nhé.
 
Upvote 0
Chào bác,
Nếu em biết làm thì em đâu có nhọc công lên đây nhờ trợ giúp bác. Biết thì ngồi viết lẹ hơn đăng hỏi vào ngồi chờ.
Em có thể mở file Data lên copy dữ liệu sang file Report và dán dữ liệu mới vào file Data rồi lưu lại, đóng file Data. Nhưng như thế không chuyên nghiệp lắm, nên em mới tìm giải pháp tốt hơn.
Có duy nhất một cách mà tôi thấy nó thực sự không mở File đó là trên File Report bạn tạo một Sheet phụ đặt công thức excel để lấy dữ liệu từ File Data (công thức Excel thông thường thôi), sau đó lưu lại ở dạng giá trị, sau đó xử lý tiếp, cái dở của cách này là File Data không được di chuyển đi chỗ khác, còn tất cả các cách khác, kể cả ADO thì bản chất nó vẫn mở ngầm File Excel ra thôi
 
Upvote 0
Em chào các bác,
Nhờ các bác giúp em trường hợp này:
Ví dụ em có 2 file:
- File Report.xlsm có UserForm (lưu ở Desktop)
- File D:\Data.xlsx có dữ liệu (như hình)
View attachment 273069
A) Đọc file không cần mở file
Trong Userform, nhập textbox1: Mon
Thì Label1 sẽ lookup ở cột B trong file Data.xls và hiển thị ra 'Phở' mà không cần mở file Data.xlsx

B) Ghi file không cần mở file
Trong Useform, Textbox2 nhập chữ 'ngon quá' --> thì ghi chữ 'ngon quá' vào ô C1 của file Data.xlsx (mà không cần mở file Data.xlsx)

Note: Nếu cách 'không mở file' không khả thì thì giúp em code có mở file cho 2 chức năng trên cũng được.
Em cảm ơn các bác nhiều.
Mất công giải thích tỉ mỉ vậy mà không gửi file lên bạn?
 
Upvote 0
Đọc file: cách tân tiến nhất là dùng Power Query để đọc file Data, ghi vào một sheet ẩn.
Lúc mở Form lên, refresh query. Set rgData = vùng tham chiếu trong sheet ẩn.
Dùng kỹ thuật lookup quen thuộc để Mon -> Phở.

Ghi file thì hơi rắc rối. ADO hay DAO có thể ghi được nhưng có nhiều ràng buộc. Tốt hơn hết là mở file lên rồi ghi vào.

Code để mở, ghi, và đóng file sau khi ghi:

Sub OpenWBook(byRef wb As Workbook, byVal wbName As String)
' mở workbook
Set wb = Workbooks.Open(wbName)
End Sub

Sub WData(rg As Range, dat As Variant)
rg.Value = dat
End Sub

Sub CloseWBook(wbName As String)
' đóng workbook
Dim alertState
alertState = Application.DisplayAlerts
Application.DisplayAlerts = False
For Each wb In Application.Workbooks
If wb.Name = wbName Then wb.Close SaveChanges:=True
Next wb
Application.DisplayAlerts = alertState
End Sub

----

Dim wbData As Workbook
OpenWBook wbData, "C:\thư mục gì đó\Data.xlsx" ' mở file
...
WData wbData.Sheet1.Range("C1"), TextBox2.Text ' ghi dữ liệu
...
CloseWBook wbData.Name

không giúp được họ thì cũng không nên nói vậy chứ bạn, người ta không biết mới hỏi ai mà biết lại hỏi.
Việc ghi và đọc dữ liệu không cần mở file; hoặc mở file, ghi dữ liệu, và đóng lại ở đây có cả đống bài, cả đống code.
Thành viên đã 15 năm rồi. Không lẽ không biết cách tìm.
Lấy cớ "không biết mới hỏi" là phương cách của kẻ làm biếng.
 
Upvote 0
Em chào các bác,
Nhờ các bác giúp em trường hợp này:
Ví dụ em có 2 file:
- File Report.xlsm có UserForm (lưu ở Desktop)
- File D:\Data.xlsx có dữ liệu (như hình)
View attachment 273069
A) Đọc file không cần mở file
Trong Userform, nhập textbox1: Mon
Thì Label1 sẽ lookup ở cột B trong file Data.xls và hiển thị ra 'Phở' mà không cần mở file Data.xlsx

B) Ghi file không cần mở file
Trong Useform, Textbox2 nhập chữ 'ngon quá' --> thì ghi chữ 'ngon quá' vào ô C1 của file Data.xlsx (mà không cần mở file Data.xlsx)

Note: Nếu cách 'không mở file' không khả thì thì giúp em code có mở file cho 2 chức năng trên cũng được.
Em cảm ơn các bác nhiều.
OT không rành về form nên làm thử trên sheet bạn có thể tùy biến vào form.
Câu truy vấn trong trường hợp này không quá khó đối với OT nên OT thử sử dụng ADO,bạn tham khảo nhé.
 

File đính kèm

  • ADO.xlsx
    175.2 KB · Đọc: 34
Upvote 0
Đọc file: cách tân tiến nhất là dùng Power Query để đọc file Data, ghi vào một sheet ẩn.
Lúc mở Form lên, refresh query. Set rgData = vùng tham chiếu trong sheet ẩn.
Dùng kỹ thuật lookup quen thuộc để Mon -> Phở.

Ghi file thì hơi rắc rối. ADO hay DAO có thể ghi được nhưng có nhiều ràng buộc. Tốt hơn hết là mở file lên rồi ghi vào.

Code để mở, ghi, và đóng file sau khi ghi:

Sub OpenWBook(byRef wb As Workbook, byVal wbName As String)
' mở workbook
Set wb = Workbooks.Open(wbName)
End Sub

Sub WData(rg As Range, dat As Variant)
rg.Value = dat
End Sub

Sub CloseWBook(wbName As String)
' đóng workbook
Dim alertState
alertState = Application.DisplayAlerts
Application.DisplayAlerts = False
For Each wb In Application.Workbooks
If wb.Name = wbName Then wb.Close SaveChanges:=True
Next wb
Application.DisplayAlerts = alertState
End Sub

----

Dim wbData As Workbook
OpenWBook wbData, "C:\thư mục gì đó\Data.xlsx" ' mở file
...
WData wbData.Sheet1.Range("C1"), TextBox2.Text ' ghi dữ liệu
...
CloseWBook wbData.Name


Việc ghi và đọc dữ liệu không cần mở file; hoặc mở file, ghi dữ liệu, và đóng lại ở đây có cả đống bài, cả đống code.
Thành viên đã 15 năm rồi. Không lẽ không biết cách tìm.
Lấy cớ "không biết mới hỏi" là phương cách của kẻ làm biếng.
Thay vì ghi vào Excel thì ghi dữ liệu vào Access có vẻ đơn giản hơn mà nó còn tiện nữa.
 
Upvote 0
Em cảm ơn bác VetMini và chị Hoàng Nhật Phương rất nhiều, và cảm ơn tất cả các bạn đã góp ý, chỉ bảo em.

Thiệt tình là trước khi đăng câu hỏi em đã tìm trên GPE 3 4 ngày rồi, nhưng chưa tìm được cái mình cần, mà thấy nhiều bài hay rồi cứ bị cuốn vào đấy, em mở một dọc tab để dành đó đọc từ từ không đành tắt đi. Cứ đọc rồi bị cuốn theo vì toàn những thứ mình chưa biết, rồi quên đi file mình đang làm.
Tối hôm qua em đã làm được chức năng mình cần rồi, dùng cách phổ thông mở file ra copy rồi đóng lại. Chức năng ghi em định sẽ tiếp tục làm theo cách đó luôn.

Một chức năng gì đó mà em biết tên thì em sẽ tìm nhanh hơn (ví dụ: FSO), gõ trên Google rồi đọc trong nhiều trang kết quả hiện ra, tìm ví dụ đọc rồi chế biến thêm.
Còn cái em đang cần do không biết tìm theo từ khóa gì nên vẫn chưa tìm ra.

Chúc mọi người sức khỏe và đam mê Excel để tiếp tục hỗ trợ các thành viên trên GPE.
 
Upvote 0
Web KT

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

Back
Top Bottom