2009-04-15 8 views
7

Tôi đang làm việc trên ứng dụng bàn điều khiển vb.net mở một số bảng tính từng cái một, đọc trong một vài ô và đóng tệp.Tự động hóa Excel - cách chỉ cần nói No

Một số bảng tính có công thức Excel tính toán lại khi tôi mở tệp và tôi nhận được một hộp thoại hỏi tôi có muốn lưu các thay đổi vào bảng tính khi đóng nó không.

tin nhắn: "Bạn có muốn lưu các thay đổi myfile.xls Microsoft Office Excel sẽ tính toán lại các công thức khi mở file lưu cuối cùng của một phiên bản trước của Excel?"

Làm thế nào để tự động giảm mà hộp thoại?

  Dim newCBD As New CBD 
      Dim xlApp As Excel.Application 
      Dim xlWorkBook As Excel.Workbook 
      Dim xlWorkSheet As Excel.Worksheet 

      xlApp = New Excel.ApplicationClass 
      xlWorkBook = xlApp.Workbooks.Open(myFile) 
      xlWorkSheet = xlWorkBook.Worksheets(1) 

      ...do a bunch of junk here 

      xlWorkBook.Close() 
      xlApp.Quit() 

Cảm ơn!

+0

Thêm thông tin tại đây, Excel sẽ tự động tính toán lại công thức nếu phiên bản chương trình mới hơn phiên bản tệp. – pensono

Trả lời

13

Bạn cần cung cấp một tham số sai về phương pháp Đóng

xlWorkBook.Close(False) 

Từ Excel VBA Trợ giúp:

Đóng phương pháp vì nó áp dụng cho các đối tượng Workbook.

Đóng đối tượng.

expression.Close (SaveChanges, Tên file, RouteWorkbook)

biểu bắt buộc. Biểu thức trả về một trong các đối tượng trên.

SaveChanges Biến thể tùy chọn. Nếu không có thay đổi đối với sổ làm việc, đối số này bị bỏ qua. Nếu có thay đổi đối với sổ làm việc và sổ làm việc xuất hiện trong các cửa sổ mở khác , đối số này sẽ bị bỏ qua. Nếu có các thay đổi đối với sổ làm việc nhưng sổ làm việc không xuất hiện trong bất kỳ cửa sổ mở nào khác, đối số này chỉ định xem các thay đổi có được lưu giữ như sau: .

Giá trị hành động True Lưu thay đổi vào sổ làm việc. Nếu chưa có tên tệp được liên kết với sổ làm việc thì Tên tệp được sử dụng. Nếu Tên tệp bị bỏ qua, người dùng được yêu cầu để cung cấp tên tệp. Sai Không lưu các thay đổi vào tệp này. Bỏ qua Hiển thị hộp thoại yêu cầu người dùng có hay không lưu thay đổi.

Tên tệp Biến thể tùy chọn. Lưu thay đổi theo tên tệp này.

RouteWorkbook Biến thể tùy chọn. Nếu , sổ làm việc không cần phải được định tuyến cho người nhận tiếp theo (nếu nó không có phiếu định tuyến hoặc đã được định tuyến), đối số này sẽ bị bỏ qua. Nếu không, Microsoft Excel định tuyến sổ làm việc như được hiển thị trong bảng sau.

Ý nghĩa giá trị True Gửi sổ làm việc tới người nhận tiếp theo. Sai Không gửi sổ làm việc. Đã bỏ qua Hiển thị hộp thoại hỏi người dùng xem có nên gửi sổ làm việc không.

1

Nó là tốt để sử dụng Close() để tránh thông báo lỗi này nhưng những gì nếu bạn đang sử dụng phiên bản như v11.0 có close() mà mất không có tham số vì vậy vấn đề vẫn không giải quyết cho trường hợp này. Để giải quyết vấn đề này, bạn có thể sử dụng Marshal.RealeaseCOMObject NHƯNG hãy nhớ rằng có một số issues với điều đó.

Để đối phó với bạn "làm thế nào để chỉ nói Không", bạn có thể sử dụng:

xlApp.DisplayAlerts= false; // use just above the Close() method calls 
xlApp.Workbooks.Close(); // here no arguments can be used. 

Hy vọng nó sẽ giúp!