Chia sẻ Code Import/Export Data từ Excel đến Excel

Liên hệ QC

BigBang007

Thành viên mới
Tham gia
29/5/14
Bài viết
17
Được thích
9
Hi Các Bác,
Sau khi sưu tầm và chỉnh sửa code, hôm nay mình xin tổng hợp lại code dùng để Nhập và Xuất (Import / Export) dữ liệu từ 1 Excel đến file Excel khác.

1. Code Nhập dữ liệu từ file excel khác, không cần mở file.

Code này sưu tầm từ Bác nmhung49:

Chú ý: nếu file bạn liên kết đến mà không đặt Password thì phần Password trong code để trống nha.

Mã:
Sub connect_file()
Dim fname
On Error Resume Next
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
fname = Application.GetOpenFilename("Excel Files (*.xls*), *.xls")
With Workbooks.Open(fname, , , , "password") ' PW can dat trong dau ngoac kep, neu ko co password thi de trong
    Sheets("Sheet1").Range("A4:D20000").Copy ThisWorkbook.Sheets("Sheet2").Range("A4")
    .Close False
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

2. Code Xuất dữ liệu từ ra file excel khác.

Code này mình tham khảo nhiều nơi và viết lại, do trình độ VBA yếu kém, nên chỉ viết cho nó chạy thôi, không phải là Code hay.

Mã:
Sub ExportRangetoFile()
Dim wb As Workbook
Dim saveFile As String
Dim WorkRng As Range
On Error Resume Next
xTitleId = "ExportDataExcelToExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = Application.Workbooks.Add
WorkRng.Copy
wb.Worksheets("Sheet1").Paste
saveFile = Application.GetSaveAsFilename(fileFilter:="Excel files (*.xls*),*.xls")
wb.SaveAs Filename:=saveFile, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
wb.Close
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

2 code này bạn bỏ vào Module và chạy nhé.

Nếu các Bác có code hay hơn thì chia sẽ để mình học hỏi thêm nha.
 
Thực sự là bây giờ không biết là nên hay không việc sử dụng application.sreenupdating. Mình có đọc cuốn vba trong excel cải thiện và tăng tốc của tác giả Kyo thì thấy tác giả khuyên nên sử dụng. Giờ đọc bài của anh vietMini lại bảo đây là code nguy hiểm.
Vậy mong anh VietMini và các bạn trên gpe cho biết là có nên sử dụng application.sreenupdating hay không ạ? Trong trường hợp nào thì nên dùng? Th nào thì không nên dùng.

Khi tôi nhắc tới vấn đề, tôi đã có gợi ý trong câu "Lúc vừa mượn tại sao cậu không xem trước?"
Rất đơn giản. Trước khi đụng chạm đến nó, chỉ việc dùng một biến copy lại trị của Application.ScreenUpdating, xài xong rồi trả về đúng trị ấy. Hết.

Cách thức và quy luật nằm trong những luật căn bản khi viết hàm/phương thức. Đáng ra những cái căn bản này các bạn phải tìm hiểu trong giai đoạn "căn bản cho người mới học VBA". Nhưng hình như các bạn lại thich học những cái công việc văn vẻ như tô màu, kẻ hàng, ... hơn.

Code có 2 giai đoạn thử trước khi được chấp nhận. Giai đoạn thứ nhất là thử nó một mình - tức là cho nó chạy độc lập trong điều kiện không liên quan gì đến những code khác. Và giai đoạn thứ hai là thử nó trong mõi trường chung với những thức khác - tức là ở trong trường hợp có những điều kiện rắc rối khác, vì dụ như file đang bị người khác mở, vân vân.

Trong trường hợp của đề bài này, hàm sửa bất kỳ một thuộc tính nào của Application thì cũng phải đề phòng trường hợp code gọi nó cũng cần thuộc tính ấy.

Loại code chỉ viết chạy một lần cho xong công việc rồi thôi thì chỉ cần đạt giai đoạn đầu mà không cần giai đoạn thứ hai. Tôi không có đọc tài liệu gì đó bạn đề cập ở trên cho nên không biết tác giả nói những gì, và tác giả có phải chỉ nói chuyện trong phạm vi của loại code "chạy một lần" này hay không. Tuy nhiên nếu tác giả nói về việc chỉnh thuộc tính của Application để tăng tốc mà không nhắc đến việc bảo vệ các thuộc tính này thì đó là một điều thiếu sót trầm trọng.

Trong đề bài này, chủ thớt đem hàm lên gọi là "chia sẻ" thì code phải được coi là loại hoàn chỉnh, bắt buộc phải thử trong mọi điều kiện. Tức là phải đạt đủ hai giai đoạn.
 
Upvote 0
Thực sự là bây giờ không biết là nên hay không việc sử dụng application.sreenupdating. Mình có đọc cuốn vba trong excel cải thiện và tăng tốc của tác giả Kyo thì thấy tác giả khuyên nên sử dụng. Giờ đọc bài của anh vietMini lại bảo đây là code nguy hiểm.
Vậy mong anh VietMini và các bạn trên gpe cho biết là có nên sử dụng application.sreenupdating hay không ạ? Trong trường hợp nào thì nên dùng? Th nào thì không nên dùng.
Ý người ta nói rằng: Dù bạn dùng code gì đi chăng thì cũng chú ý các thiết lập sẵn trong Excel, đừng tự ý thay đổi thiết lập của người khác.
Ví dụ: Vì bạn muốn ẩn thanh Formula nên đã dùng code
Mã:
Application.DisplayFormulaBar = False
Và bạn nghĩ rằng sau khi chạy xong chương trình thì bạn sẽ cho hiện thanh Formula trở lại bằng code
Mã:
Application.DisplayFormulaBar = True
Cũng tốt! Nhưng nhà lập trình chuyên nghiệp sẽ không làm vậy. Điều đầu tiên họ sẽ đọc trạng thái của thanh Formula xem nó đang ẩn hay hiện để mai này chạy code xong thì trả nó về như trước khi chạy code
Lưu ý rằng: trả thanh Formula về trạng thái trước khi chạy code nó khác với cho hiện thanh Formula nha, tức thanh Formula thế nào thì trả về như vậy. Ai biết được có tay nó đó dùng Excel và luôn thích ẩn thanh Formula thì sao? Bạn cho hiện Formula lên ở cuối code sẽ khiến người ta bực mình (chương trình quỷ quái gì "phá" đồ của tôi vậy?)
Với các đoạn code thuộc dạng "nguy hiểm" như đã đề cập ở trên thì cũng nên làm thế
Thật ra ta luôn dùng
Application.ScreenUpdating =False
ở đầu code và
Application.ScreenUpdating =True
ở cuối code. Hoặc:
Application.EnableEvents = False
ở đầu code và
Application.EnableEvents = True
ở cuối code. Hoặc
Application.DisplayAlerts =False
ở đầu code và:
Application.DisplayAlerts =True
ở cuối code. vân.. vân.. và.. mây.. mây.. cũng không có vấn đề gì vì ta tin đến 90% các trạng thái ấy luôn được thiết lập mặc định = TRUE trước rồi, nhưng còn 10% "bất ngờ" như thằng cha "dở hơi" kia muốn khác thì sao?
Tóm lại:
- Muốn học code vửa đủ xài cho công việc thì sao cũng được. Bạn không cần quan tâm mấy điều này
- Muốn học code theo hướng chuyên nghiệp thì nên... nghĩ xa hơn một chút
Vậy thôi!
 
Upvote 0
Ý người ta nói rằng: Dù bạn dùng code gì đi chăng thì cũng chú ý các thiết lập sẵn trong Excel, đừng tự ý thay đổi thiết lập của người khác.
Ví dụ: Vì bạn muốn ẩn thanh Formula nên đã dùng code
Mã:
Application.DisplayFormulaBar = False
Và bạn nghĩ rằng sau khi chạy xong chương trình thì bạn sẽ cho hiện thanh Formula trở lại bằng code
Mã:
Application.DisplayFormulaBar = True
Cũng tốt! Nhưng nhà lập trình chuyên nghiệp sẽ không làm vậy. Điều đầu tiên họ sẽ đọc trạng thái của thanh Formula xem nó đang ẩn hay hiện để mai này chạy code xong thì trả nó về như trước khi chạy code
Lưu ý rằng: trả thanh Formula về trạng thái trước khi chạy code nó khác với cho hiện thanh Formula nha, tức thanh Formula thế nào thì trả về như vậy. Ai biết được có tay nó đó dùng Excel và luôn thích ẩn thanh Formula thì sao? Bạn cho hiện Formula lên ở cuối code sẽ khiến người ta bực mình (chương trình quỷ quái gì "phá" đồ của tôi vậy?)
Với các đoạn code thuộc dạng "nguy hiểm" như đã đề cập ở trên thì cũng nên làm thế
Thật ra ta luôn dùng
Application.ScreenUpdating =False
ở đầu code và
Application.ScreenUpdating =True
ở cuối code. Hoặc:
Application.EnableEvents = False
ở đầu code và
Application.EnableEvents = True
ở cuối code. Hoặc
Application.DisplayAlerts =False
ở đầu code và:
Application.DisplayAlerts =True
ở cuối code. vân.. vân.. và.. mây.. mây.. cũng không có vấn đề gì vì ta tin đến 90% các trạng thái ấy luôn được thiết lập mặc định = TRUE trước rồi, nhưng còn 10% "bất ngờ" như thằng cha "dở hơi" kia muốn khác thì sao?
Tóm lại:
- Muốn học code vửa đủ xài cho công việc thì sao cũng được. Bạn không cần quan tâm mấy điều này
- Muốn học code theo hướng chuyên nghiệp thì nên... nghĩ xa hơn một chút
Vậy thôi!
Qua 2 bài giải thích cặn kẽ của thầy và anh VietMini em đã hiểu rõ hơn bản chất của các câu lệnh application..... rồi ạ! Trước giờ như thầy ndu đã nói em luôn nghĩ rằng các trạng thái đó nó luôn mặc định bằng TRUE cơ. Tai hại quá! Cảm ơn thầy ndu và anh VietMini nhiều nhiều ạ!
P/S: Em xin phép BQT chen ngang topic này 1 chút ạ. Chẳng là hôm vừa rồi em có đọc Topic về vòng lặp For...next của thầy ptm0412 thấy rất hay và bổ ích đặc biệt là em thấy thầy ndu có rất nhiều câu trả lời nhanh, em rất nể. Mấy hôm vừa rồi anh ChanhTQ có mở topic "Bài tập VBA cho người mới bắt đầu[phần 2], vậy em mong nếu thầy ndu nếu rảnh thì thầy có thể ra 1 số đề bài tập ở mức độ "cho người mới bắt đầu" để các thành viên mới như bọn em làm được không ạ. Tại sao em lại nhờ đích danh thầy bởi em thấy bản thân thầy là 1 thành viên tự học tự tìm tòi và rất thành công nên em nghĩ với những kinh nghiệm về việc tự học của thầy thì những bài tập thầy ra sẽ phù hợp cho những người cũng tự học như chúng em hơn! Cảm ơn thầy!
 
Lần chỉnh sửa cuối:
Upvote 0
Trước giờ như thầy ndu đã nói em luôn nghĩ rằng các trạng thái đó nó luôn mặc định bằng TRUE cơ.

Thì thực chất nó luôn =TRUE theo mặc định mà. Ý tôi muốn nói có khi một người dùng nào đó lại thiết lập chúng = FALSE theo nhu cầu sử dụng (luôn ẩn thanh Formula chẳng hạn) và chúng ta không có quyền thiết lập chúng =TRUE ở cuối code (hiện thanh Formula chẳng hạn)---> Người ta sẽ rất ghét dùng chương trình của ta và họ sẽ cho rằng chúng ta đang... "phá"
 
Upvote 0
... Trước giờ như thầy ndu đã nói em luôn nghĩ rằng các trạng thái đó nó luôn mặc định bằng TRUE cơ. ...

Hầu hết những code các bạn viết ra đều được dùng để chạy cho xong việc. Cho nên mặc định như vậy cũng chả chết thằng Tây nào. Chính tôi khi viết code "chạy một lần" cũng lười biếng, cuối code cho nó bằng True tuốt luốt. Nhưng cần lưu ý ở 2 điểm:

1. Đó là môi trường của tôi. Tôi muốn thế nào thì mặc xác tôi
2. Tôi chỉ làm thế khi code không phải là một hàm tiện nghi, được viết để code khác gọi.

Trường hợp của code connect_file rõ ràng là một hàm tiện nghi.
Code A cần mở file nên gọi hàm tiện nghi connect_file. Trước đó, A cũng cần tăng tốc nên cũng đã tạm ngưng ScreenUpdating, nhưng sau khi gọi mở file xong thì A bị mất điều kiện tăng tốc.

Như vậy, phải chăng A trước khi gọi connect_file thì phải tìm hiểu xem tiện nghi này có đụng chạm gì đến ScreenUpdating để còn biết mà "tăng tốc" trở lại?
Tức là A phải được viết như thế này:

Mã:
Sub A()
.
.
Dim SV_AppScreenUpdating As Boolean
SV_AppScreenUpdating = Application.ScreenUpdating
Application.ScreenUpdating = False [COLOR=#008000]' áp dụng kỹ thuật tăng tốc ở đây[/COLOR]
.
.
connect_file
[COLOR=#008000]' Application.ScreenUpdating bị connect_file đưa trờ về 'mặc định' ở đây[/COLOR]
Application.ScreenUpdating = False [COLOR=#008000]' người viết code A biết là connect_file đưa Application.ScreenUpdating về 'mặc định' cho nên lại phải chỉnh[/COLOR]
.
.
Application.ScreenUpdating = SV_AppScreenUpdating
End Sub

Mặc định trước sau gì vẫn là Application.ScreenUpdating = True. Điều đó không sai. Nhưng cái tai hại nằm ở chỗ app được trả về mặc định trước khi hết nhu cầu tạm chuyển.

Vấn đề ở đây là người viết code connect_file có nên lý luận: "tôi làm việc dúng đắn theo thông lệ mặc định, cậu có những nhu cầu đặc thù thì cậu phải tự biết bảo vệ chúng chứ !"

...
P/S: Em xin phép BQT chen ngang topic này 1 chút ạ. Chẳng là hôm vừa rồi em có đọc Topic về vòng lặp For...next của thầy ptm0412 thấy rất hay và bổ ích đặc biệt là em thấy thầy ndu có rất nhiều câu trả lời nhanh, em rất nể. Mấy hôm vừa rồi anh ChanhTQ có mở topic "Bài tập VBA cho người mới bắt đầu[phần 2], vậy em mong nếu thầy ndu nếu rảnh thì thầy có thể ra 1 số đề bài tập ở mức độ "cho người mới bắt đầu" để các thành viên mới như bọn em làm được không ạ. Tại sao em lại nhờ đích danh thầy bởi em thấy bản thân thầy là 1 thành viên tự học tự tìm tòi và rất thành công nên em nghĩ với những kinh nghiệm về việc tự học của thầy thì những bài tập thầy ra sẽ phù hợp cho những người cũng tự học như chúng em hơn! Cảm ơn thầy!

Bản thân tôi định nghĩa cụm từ "căn bản" theo cách khác. Tuy nhiên, tôi không thể đi ngược lại chiều huớng của hầu hết những người trên diễn đàn này cho nên tôi chỉ thích chỏ vào "phá bỉnh" những chỗ mà các bạn sơ sót thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
..................
Bản thân tôi định nghĩa cụm từ "căn bản" theo cách khác. Tuy nhiên, tôi không thể đi ngược lại chiều huớng của hầu hết những người trên diễn đàn này cho nên tôi chỉ thích chỏ vào "phá bỉnh" những chỗ mà các bạn sơ sót thôi.
Em nghĩ diễn đàn là nơi để trao đổi mà, miễn sao nó không nằm ngoài nội quy của diễn đàn! Anh có thể đưa ra định nghĩa cụm từ căn bản theo cách hiểu của anh được không ạ? thực sự qua các bài phản biện của anh em thấy kiến thức về lập trình của anh rất uyên thâm đó. Đáng nể!
 
Upvote 0
Hầu hết những code các bạn viết ra đều được dùng để chạy cho xong việc. Cho nên mặc định như vậy cũng chả chết thằng Tây nào. Chính tôi khi viết code "chạy một lần" cũng lười biếng, cuối code cho nó bằng True tuốt luốt. Nhưng cần lưu ý ở 2 điểm:

1. Đó là môi trường của tôi. Tôi muốn thế nào thì mặc xác tôi
2. Tôi chỉ làm thế khi code không phải là một hàm tiện nghi, được viết để code khác gọi.

Trường hợp của code connect_file rõ ràng là một hàm tiện nghi.
Code A cần mở file nên gọi hàm tiện nghi connect_file. Trước đó, A cũng cần tăng tốc nên cũng đã tạm ngưng ScreenUpdating, nhưng sau khi gọi mở file xong thì A bị mất điều kiện tăng tốc.

Như vậy, phải chăng A trước khi gọi connect_file thì phải tìm hiểu xem tiện nghi này có đụng chạm gì đến ScreenUpdating để còn biết mà "tăng tốc" trở lại?
Tức là A phải được viết như thế này:

Mã:
Sub A()
.
.
Dim SV_AppScreenUpdating As Boolean
SV_AppScreenUpdating = Application.ScreenUpdating
Application.ScreenUpdating = False [COLOR=#008000]' áp dụng kỹ thuật tăng tốc ở đây[/COLOR]
.
.
connect_file
[COLOR=#008000]' Application.ScreenUpdating bị connect_file đưa trờ về 'mặc định' ở đây[/COLOR]
Application.ScreenUpdating = False [COLOR=#008000]' người viết code A biết là connect_file đưa Application.ScreenUpdating về 'mặc định' cho nên lại phải chỉnh[/COLOR]
.
.
Application.ScreenUpdating = SV_AppScreenUpdating
End Sub

Mặc định trước sau gì vẫn là Application.ScreenUpdating = True. Điều đó không sai. Nhưng cái tai hại nằm ở chỗ app được trả về mặc định trước khi hết nhu cầu tạm chuyển.

Vấn đề ở đây là người viết code connect_file có nên lý luận: "tôi làm việc dúng đắn theo thông lệ mặc định, cậu có những nhu cầu đặc thù thì cậu phải tự biết bảo vệ chúng chứ !"



Bản thân tôi định nghĩa cụm từ "căn bản" theo cách khác. Tuy nhiên, tôi không thể đi ngược lại chiều huớng của hầu hết những người trên diễn đàn này cho nên tôi chỉ thích chỏ vào "phá bỉnh" những chỗ mà các bạn sơ sót thôi.
Xin chào Bác VetMini,

Thật ra qua các nhận xét, em thấy kiến thức về lập trình Bác rất vững, ví dụ rất dễ hiểu nhưng bên cạnh đó Bác lại không thể đặt mình vào vị trí là người mới như bọn em, Có thể Bác nghiên cứu lâu thì kinh nghiệm và kiến thức Bác nhiều, Bác có cách nhìn nhận khác, Chứ nói về căn bản, thì một người tự học VBA như em làm sao biết chính xác chổ nào là căn bản nhất? chủ yếu đọc các tài liệu xem code của các Bác và làm theo.

Đối với Bác, code của em có thể chẳng là gì cả, nhưng đối với em đó là công sức nghiên cứu và nó có thể chạy được, làm sao có thể biết được "trong họ hàng nhà nó có bao nhiêu người??". Nếu em không post code của em lên thì làm sao em biết kiến thức của em bị hỏng chổ nào (Mà không biết thì cả đời ngu luôn). Nhờ post lên mà em và các bạn khác học được nhiều thứ.

Một lần nữa cảm ơn các Bác đã làm rõ vấn đề.
 
Upvote 0
... Nếu em không post code của em lên thì làm sao em biết kiến thức của em bị hỏng chổ nào (Mà không biết thì cả đời ngu luôn). Nhờ post lên mà em và các bạn khác học được nhiều thứ.
....

Những chỗ sai này nọ là chuyện nhỏ. Tôi chỉ dùng chúng để chững minh thôi.

Điểm căn bản là những cái tôi lý luận về cơ cấu ngôn ngữ và cách thức gầy dựng sao cho các modules, subs, và functions ăn khiớp với nhau.

Em nghĩ diễn đàn là nơi để trao đổi mà, miễn sao nó không nằm ngoài nội quy của diễn đàn! Anh có thể đưa ra định nghĩa cụm từ căn bản theo cách hiểu của anh được không ạ? ...

@chuot0106: xem từ "căn bản" tôi giải thích ở trên.

Ví dụ trong quá trình phê bình hai cái code hàm ở trên, tôi không cố ý chỉ ra chỗ code sai. Cái tôi muốn chỉ ra là sai từ cái nhìn tổng thể:
- Hàm viết ra để hàm khác gọi thì chỉ là một giai đoạn của chương trình
- Sau khi gọi hàm xong thì chương trình còn phải làm nhiều công việc khác
- Những công việc này có thể phải dựa vào một trạng thái nào đó của Application để làm việc cho hiệu quả.
- Vì vậy hoàn nguyên (reset) các thông số Application về mặc định tuy không phải là sai, nhưng nếu thực hiện trước giai đoạn cuối chương trình có thể sẽ làm cản trở kế hoạch của các giai đoạn sau.

--> Điều căn bản: khi viết code phải suy nghĩ đến cái vị trí của nó trong project.
 
Upvote 0
Hi Các Bác,

Hiện tại em muốn thêm 1 phần code kiểm tra sự tồn tại của Sheet1 trong file mình muốn copy data mà làm hoài không được.

Cụ thể: khi em liên kết đến file đó để lấy dữ liệu, nếu file đó không có Sheet1 thì nó sẽ hiện Msgbox "..........".

các Bác xem giúp em vấn đề này nha.
 
Upvote 0
Em sử dụng code nhập dữ liệu bị lỗi

Hi Các Bác,
Sau khi sưu tầm và chỉnh sửa code, hôm nay mình xin tổng hợp lại code dùng để Nhập và Xuất (Import / Export) dữ liệu từ 1 Excel đến file Excel khác.

1. Code Nhập dữ liệu từ file excel khác, không cần mở file.

Code này sưu tầm từ Bác nmhung49:

Chú ý: nếu file bạn liên kết đến mà không đặt Password thì phần Password trong code để trống nha.

Mã:
Sub connect_file()
Dim fname
On Error Resume Next
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
fname = Application.GetOpenFilename("Excel Files (*.xls*), *.xls")
With Workbooks.Open(fname, , , , "password") ' PW can dat trong dau ngoac kep, neu ko co password thi de trong
    Sheets("Sheet1").Range("A4:D20000").Copy ThisWorkbook.Sheets("Sheet2").Range("A4")
    .Close False
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

2. Code Xuất dữ liệu từ ra file excel khác.

Code này mình tham khảo nhiều nơi và viết lại, do trình độ VBA yếu kém, nên chỉ viết cho nó chạy thôi, không phải là Code hay.

Mã:
Sub ExportRangetoFile()
Dim wb As Workbook
Dim saveFile As String
Dim WorkRng As Range
On Error Resume Next
xTitleId = "ExportDataExcelToExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = Application.Workbooks.Add
WorkRng.Copy
wb.Worksheets("Sheet1").Paste
saveFile = Application.GetSaveAsFilename(fileFilter:="Excel files (*.xls*),*.xls")
wb.SaveAs Filename:=saveFile, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
wb.Close
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

.
 
Upvote 0
Em có 1 bài toán nhờ cả nhà giúp. :)
VBA em là 1 member bắt đầu nghiên cứu, em là dân kỹ thuật hiện em đang có 1 chút vướng mắc cần cả nhà chỉ giáo ạ
Bài toán như sau:
Em có 1 bảng tính Excel thiết kế máy điện. Mỗi lần tính xong em phải tin bảng tính ra PDF để lưu lại. Mỗi lần cần check em phải nhập lại rất mất nhiều thời gian. VBA có thể giải quyết vấn đề xuất nhập lại dữ liệu, tuy nhiên em đang quản lý bằng số thiết kế cho từng file PDF. Việc tạo 1 thông báo nhập Link file data cũng mất nhiều thời gian em thấy vẫn bất tiện. Vậy làm thế nào khi nhập lại dữ liệu bằng VBA chỉ cần xuất hiện 1 form nhập số thiết kế vào là nó Import được dữ liệu ra luôn ạ. Em thấy mấy phầm mềm công ty làm đc mà em ko biết làm sao làm đc. Mong mọi người chỉ giúp. Em cám ơn nhiều :)
 
Upvote 0
"Application.GetOpenFilename" là mở file rồi còn gì!!
 
Upvote 0
Không anh ơi. Ý em là ngày trước em in excel ra PDF, bây giờ em xuất Excel dưới dạng copy giá trị ra file mới. Sau đó giờ mỗi lần kiểm tra lại em phải Import lại file giá trị vào các ô nhập dữ liệu vào bảng tính công thức và bảng tính sẽ tính lại các kết quả. Tuy nhiên em có tận 800 cái bảng tính xuất giá trị và chỉ có 1 bảng tính tính toán. Em quản lý bảng xuất giá trị bằng số thứ tự. Giờ em muốn dùng VBA để tạo form có ô nhập số thứ tự bảng xuất giá trị. Bấm nút là nó Import lại giá trị vào bảng tính đó anh :)
 
Upvote 0
Web KT
Back
Top Bottom