Lấy dữ liệu từ file excel khác vba

     

1. Mở fileKhi mở file excel khác ta cần sử dụng hàm Workbooks.OpenĐối cùng với excel, ta có thể mở đồng thời các file excel (workbook), khi ấy workbook là đối tượng người dùng để chúng ta thao tác.Ví dụ ta có code như sau:Chú ý rằng workbook vừa mới được mở thì sẽ là workbook đang rất được Active, tức là đang được ngóng nhập dữ liệu.Do đó nhằm không lầm lẫn với workbook khác, ta đề nghị lấy thương hiệu workbook ngay khi nó được mở.

Bạn đang xem: Lấy dữ liệu từ file excel khác vba

Đang xem: Lấy tài liệu từ file excel khác vba

Sub Sample1() Dim wb As String Workbooks.Open “C:Usersjpnfriend.netDesktopVBAap6b.xlsx” wb = ActiveWorkbook.Name MsgBox Workbooks(wb).Sheets(1).Cells(2, 1).Value Workbooks(wb).CloseEnd SubChương trình trên thực hiện lấy tài liệu từ workbook được mở và hiện ra thông báo bằng hàm Msgbox.Tuy nhiên bây chừ chúng ta xét tới một vụ việc khác, chính là file hướng dẫn và chỉ định mở không tồn tại.Lúc này macro vẫn báo lỗi.2. Phớt lờ lỗi nhằm chạy sang cái lệnh tiếp theoĐể phớt lờ chú ý lỗi, chương trình vẫn hoàn toàn có thể chạy sang loại lệnh khác thì làm việc đầu chương trình họ khai báoOn Error Resume NextSub Sample1() Dim wb As String On Error Resume Next Workbooks.Open “C:Usersjpnfriend.netDesktopVBAap6c.xlsx” wb = ActiveWorkbook.Name MsgBox Workbooks(wb).Sheets(1).Cells(2, 1).Value Workbooks(wb).CloseEnd SubĐiều tệ hại sẽ xảy ra, do file tap6c.xlsx ko tồn tại, tuy vậy do bị phớt lờ lỗi, vì vậy câu lệnh tiếp sau được thực thi.Lúc này thay do wb = tap6c.xlsx, vày workbook đang rất được active đó là file macro vì vậy wb sẽ là tên gọi file của macro đang triển khai lệnh.Vì lệnh On Error Resume Next đã phớt lờ toàn bộ lỗi nếu tất cả trong chương trình, điều đó sẽ gây trở ngại trong việc phát hiện các lỗi khác mà bọn họ mong muốn xuất hiện thêm nếu bị lỗi thì nên báo để chúng ta biết.Trong trường phù hợp này, chúng ta sẽ sử dụng lệnh On Error Goto 0Sub Sample1() Dim wb As String On Error Resume Next Workbooks.Open “C:Usersjpnfriend.netDesktopVBAap6c.xlsx” On Error GoTo 0 Workbooks.Open “C:Usersjpnfriend.netDesktopVBAap6c.xlsx” wb = ActiveWorkbook.Name MsgBox Workbooks(wb).Sheets(1).Cells(2, 1).Value Workbooks(wb).CloseEnd SubDòng lệnh trang bị 4 sẽ không xẩy ra báo lỗi vì chưng lệnh On Error Resume Next phớt lờ cục bộ lỗi nếu bao gồm trong chương trình.Tuy nhiên loại lệnh thiết bị 5 vẫn reset lại, nếu gồm lỗi thì báo như bình thường.Vì vậy mẫu lệnh vật dụng 6 làm cho lỗi với ngay mau lẹ chương trình lưu ý lỗi cơ mà không phớt lờ nữa.

Xem thêm:

3. Soát sổ file tất cả tồn tại hay là không trước khi triển khai mở file.Từ vụ việc nêu sống trên, họ thấy rằng cần phải kiểm tra file họ dự định mở có thực sự tồn tại xuất xắc không, nhằm mục tiêu tránh bị lỗi.Đoạn code tiếp sau đây sẽ giải quyết và xử lý vấn đề đó.Chú ý mẫu lệnh số 4 dưới đây.Sub Sample2() Dim lk As String lk = “C:Usersjpnfriend.netDesktopVBAap6b.xlsx” If Dir(lk) = “” Then MsgBox “File khong ton tai” Else Workbooks.Open lk over IfEnd Sub4. Mở file do người dùng chỉ định.

Chúng ta không chỉ là định file được mở ở trong code, có một phương pháp đó là họ sẽ cảm nhận file bắt buộc mở tự sựlựa lựa chọn của fan dùng. Hơn thế nữa nữa, người dùng còn hoàn toàn có thể xác thực file thông qua hộp DialBox.Sub Sample_dailykhmerpost.com() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename(“File excel,*.xls?”) If OpenFileName “False” Then Workbooks.Open OpenFileName over IfEnd Sub5. Đối sách trong câu hỏi đang tồn tại file trùng thương hiệu được mở rồi.Excel có thể chấp nhận được mở đồng thời những workbook (nhiều file excel thuộc lúc), dẫu vậy không được trùng tên.Vì vậy, trường hợp đã tất cả một file trùng thương hiệu được mở trước kia thì lỗi sẽ xẩy ra khi ta nuốm mở một file trùng tên.Dưới đấy là giải pháp, chúng ta sẽ khám nghiệm lần lượt từng workbook đang rất được mở, xem có file làm sao trùng tênvới file ta ý định mở tốt không.Sub Sample5() Dim wb As Workbook For Each wb In Workbooks If wb.Name = “Book1.xlsx” Then MsgBox “Book1 dang duoc mo” &chr(10) & “Vui long close file Boo1” Exit Sub kết thúc If Next wb Workbooks.Open “C:Book1.xlsx”End SubChúng ta chú ý dòng lệnh If wb.Name = “Book1.xlsx”, ghi không thiếu thốn cả phần format file.Chúng ta nhớ là điều này, chớ tất cả ghi là If wb.Name = “Book1” .6. Tổng kết:Cuối cùng, thuật toán nhằm mở một file của chúng ta là://File định mở bao gồm tồn tại xuất xắc không? -> ko tồn tại: hoàn thành chương trình//File trùng tên không đang được mở đúng không? -Không-> kết thúc chương trìnhSub Sample_dailykhmerpost.com2() Dim buf As String, wb As Workbook Const Target As String = “C:Book1.xlsx” “”Kiem tra file ton tai hay khong? buf = Dir(Target) If buf = “” Then MsgBox Target & vbCrLf & “khong ton tai”, vbExclamation Exit Sub end If “”Kiem tra file trung ten teo dang open hay khong For Each wb In Workbooks If wb.Name = buf Then MsgBox buf & vbCrLf & “dang duoc open”, vbExclamation Exit Sub kết thúc If Next wb “”Mo file Workbooks.Open TargetEnd SubLời bình bạn dịch: tất cả một lần, người ta yêu cầu cửa hàng chúng tôi viết một chương trình VBA. Rồi sau đó công ty chúng tôi nhận bình luận là lịch trình lỗi.Lý vày là, tệp tin input đặt mật khẩu, chương trình không mở được file đầu vào này cần sinh ra lỗi. Bởi vì vậy, thuật toán sinh sống trên để gia công chặt hơn nữa, bắt buộc kiểm trafile tất cả bị để mật khẩu tuyệt không? Hoặc bạn phải chứng thực với tình nhân cầu, là file của họ có đặt mật khẩu xuất xắc không?Reactions:Cblue, Euler, Ốc Yêu and 1 other person

*

Cách mở file như thế này có một cái hơi phiền phức là folder được mở ra đôi khi không ngay gần với file nên mở. Khắc phục điều này, tôi bao gồm code như sau:Sub Sample3() Dim OpenFileName As String ChDrive “D” ChDir “D:VBA” OpenFileName = Application.GetOpenFilename(“Microsoft Excel,*.xls?”) If OpenFileName “False” Then Workbooks.Open OpenFileName Else MsgBox “Ban da an Cancel” end IfEnd SubChương trình trên bao gồm điểm đặc biệt đó là, nó sẽ điều phối Application.GetOpenFilename tới ổ D->D:VBANhư vậy sẽ thuận tiện hơn cho người dùng khi chọn file.Reactions:Cbluelk = “C:Usersjpnfriend.netDesktopVBAap6b.xlsx” If Dir(lk) = “” Then MsgBox “File khong ton tai”Code này chỉ có công dụng là đường links liền mạch. Trường hợp như file được đựng trong thư mục mà tên folder có khoảng trống thì hỏng. Ví dụ như tên thư mục như sau: NewFolder4 (27072019). Thì đang ra tác dụng không đúng, mặc dù file chính xác là có tồn tại.Để khắc phục điều này, thì áp dụng FileSystemObject sẽ khỏe mạnh hơn và triệt để hơn.

Nói về việc mở file, thật ra cũng cần kiểm tra tệp tin định mở đã đang rất được mở tuyệt chưa. Nói tới vấn đề này, tôi đã thử tìm code bên trên mạng cũng có khá nhiều, nhưng đấy là code có thể nói là đơn giản dễ dàng nhất. Ai biết thì liên tiếp chia sẻ:Function BookOpen(ByVal linkfile As String) As Boolean Dim oBk As Workbook On Error Resume Next set oBk = Workbooks(Dir(linkfile)) On Error GoTo 0 If oBk Is Nothing Then BookOpen = False Else BookOpen = True over IfEnd Function:Hầu hết khi select file thì mọi tín đồ đều ước ao select tệp tin nằm thuộc thư mục với file Tool. Bởi vì đó, ước ao muốn điều phối về folder chứ file Tool khi triển khai select file. Nếu nằm ở vị trí thư mục khác thì người dùng tự ý chỉnh.Vì vậy ta tất cả cách xử lý như sau:Sub Change_Drive(ByVal strPath As String) Dim strDrive As String With Excel.Application If InStr(1, strPath, “:”, vbTextCompare) = 0 Then Exit Sub strDrive = Left(strPath, InStr(1, strPath, “:”, vbTextCompare) – 1) If Len(strDrive) = 1 Then ChDrive strDrive ChDir strPath over If end With end SubCách sử dụng:Thủ tục sau vẫn lấy đường links của tệp tin mà người tiêu dùng select. Khi người tiêu dùng select tệp tin thì sẽ tiến hành điều hướng đến thư mục cất file Tool.Sub laylinktext(ByRef strFilepath As String) With Excel.Application call Change_Drive(.ThisWorkbook.Path) strFilepath = .GetOpenFilename(“File log type dailykhmerpost.com (*.txt), *.txt”, , “Select file log”) over WithEnd Sub