2012-10-24 28 views
14

Tôi hiện đang sử dụng Workbooks.Open để xử lý một số lượng lớn tệp chứa trong một thư mục. Nhưng việc mở và đóng các tệp này làm cho các tệp xuất hiện trong thanh tác vụ và tôi muốn tránh sự nhấp nháy liên tục.Sự khác biệt giữa CreateObject ("Excel.Application") .Workbooks.Open và chỉ Workbooks.Open

Tôi nhận được đề xuất từ ​​đó tôi có thể sử dụng CreateObject để tạo một phiên bản mới kể từ khi mở một phiên bản Excel mới bị ẩn.

  1. Có sự khác biệt nào khác giữa hai cách mở sổ làm việc mới về hiệu suất không?

  2. Ngoài ra, nên tôi chỉ sử dụng một ví dụ của Excel tạo bằng CreateObject để mở tất cả Workbooks hay tôi cần phải tạo ra một ví dụ cho mỗi workbook tôi phải xử lý (mà có vẻ như một sự lãng phí rất nhiều bộ nhớ và ít tốc độ)?

Trả lời

16

Workbooks.Open sử dụng ví dụ MS Excel hiện hành và CreateObject(“Excel.Application”) tạo ra một trường hợp MS Excel mới. Bạn có thể đọc trên CreateObjecthere.

Chỉ cần tạo Workbooks.Open sau khi tạo một phiên bản mới sẽ không đảm bảo rằng sổ làm việc được mở trong phiên bản mới. Bạn sẽ phải ràng buộc với nó. Ví dụ

Dim oXLApp As Object, wb As Object 

Set oXLApp = CreateObject("Excel.Application") 

'~~> Hide Excel 
oXLApp.Visible = False 

'~~> Open files 
Set wb = oXLApp.Workbooks.Open("C:\Sample.xls") 

Về câu hỏi khác của bạn

Ngoài ra, nên tôi chỉ sử dụng một ví dụ của Excel được tạo ra sử dụng CreateObject để mở tất cả Workbooks hay tôi cần phải tạo ra một ví dụ cho mỗi workbook tôi phải quy trình

Bạn không cần nhiều trường hợp. Bạn có thể làm việc với một ví dụ. Ví dụ:

Dim oXLApp As Object, wb As Object 

Set oXLApp = CreateObject("Excel.Application") 

'~~> Hide Excel 
oXLApp.Visible = False 

'~~> Open files 
Set wb = oXLApp.Workbooks.Open("C:\Sample1.xls") 

' 
'~~> Do some Stuff 
' 

wb.Close (False) 

'~~> Open files 
Set wb = oXLApp.Workbooks.Open("C:\Sample2.xls") 
' 
'~~> Do some Stuff 
' 

wb.Close (False) 

' 
'~~> And So on 
' 
+0

@Siddarth, Tuyệt vời Siddarth và cảm ơn bạn. –

6

Ràng buộc trễ hơi chậm hơn ràng buộc sớm, nhưng bạn thậm chí không nhận thấy sự khác biệt. Có, bạn có thể sử dụng chỉ cần sử dụng một ví dụ cho tất cả các sổ làm việc. Lưu ý rằng đây:

Dim xl As New Excel.Application 

xl.Workbooks.Open "z:\docs\test.xlsm" 

Sẽ không hiển thị trừ khi bạn nói:

xl.Visible = True 

Hãy chắc chắn để đóng bất kỳ trường hợp trong bẫy lỗi của bạn.

Các vấn đề liên quan