2013-06-18 26 views
12

Tôi có một Sổ làm việc Excel có trên nút biểu mẫu, bấm Tôi muốn lưu một bản sao của sổ làm việc với tên tệp là ngày hiện tại.Làm cách nào để thực hiện "Lưu dưới dạng" trong mã vba, lưu sổ làm việc Excel hiện tại của tôi với dấu thời gian?

Tôi cứ cố gắng nào dưới đây ActiveWorkbook.SaveAs ("\\filePath\FormFlow To MSExcel\" & Left(Now(), 10)) nhưng đang nhận Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.

bất cứ ai có thể giúp tôi với điều này? Tôi vẫn còn rất mới để phát triển cho Excel.

Trả lời

18

Rất có thể đường dẫn bạn đang cố gắng truy cập không tồn tại. Có vẻ như bạn đang cố lưu vào một vị trí tương đối và bạn không có phần mở rộng tệp trong chuỗi đó. Nếu bạn cần phải sử dụng đường dẫn tương đối, bạn có thể phân tích đường đi từ ActiveWorkbook.FullName

EDIT: cú pháp tốt hơn cũng sẽ là

ActiveWorkbook.SaveAs Filename:=myFileName, FileFormat:=xlWorkbookNormal 
+5

Cảm ơn sự giúp đỡ! Cuối cùng có những gì tôi đã được sau khi với sau: 'ActiveWorkbook.SaveCopyAs (" \\ filePath \ Feed Chương trình \ FormFlow Để MSExcel \ Archive \ FeedSampleReport- "& Định dạng (Now()," mmddyyyy ") &" .xlsm ")' –

+6

Tôi đã sử dụng mã của bạn rất thành công. Cảm ơn! Một điểm nhỏ: sử dụng định dạng tệp của xlWorkbookNormal lưu tệp dưới dạng sổ làm việc Excel 97-2003. Để lưu dưới dạng sổ làm việc .xlsx hiện tại, bạn phải sử dụng xlOpenXMLWorkbook. Mã của tôi: –

+1

thay vì sử dụng tên (như xlWorkbookNormal), sử dụng các số. Hoặc nếu không bạn có thể không thể biên dịch với Excel cũ hơn một vài lần. Xem http://www.rondebruin.nl/win/s5/win001.htm –

0

Tôi biết đây là một bài cũ nhưng tôi đang tìm kiếm một cái gì đó tương tự ... Tôi nghĩ rằng vấn đề của bạn là khi bạn sử dụng Now(), đầu ra sẽ là "6/20/2014" ... Đây là một vấn đề cho một tên tập tin như nó có "/" trong đó. Như bạn có thể biết, bạn không thể sử dụng các ký hiệu nhất định trong tên tệp.

Cheers

+0

@AnalyticLunatic - Có, vì MỌI mục stackoverflow đã được đánh dấu đúng là HOÀN TOÀN câu trả lời đúng và không bao giờ có thể được cải thiện. Tốt hơn, hoặc các giải pháp khác nhau KHÔNG BAO GIỜ được tìm thấy bởi những người khác sau khi thực tế. –

0

Tôi sử dụng thành công phương pháp sau đây trong một tập tin,

Nhưng đưa ra chính xác những lỗi tương tự một lần nữa ... Chỉ dòng cuối cùng đưa ra lỗi

Newpath = Mid(ThisWorkbook.FullName, 1, _ 
Len(ThisWorkbook.FullName) - Len(ThisWorkbook.Name)) & "\" & "ABC - " & Format(Date, "dd-mm-yyyy") & ".xlsm" 
ThisWorkbook.SaveAs (Newpath) 
8

Cách dễ nhất để sử dụng chức năng này là bắt đầu bằng cách 'Ghi một Macro'. Khi bạn bắt đầu ghi, lưu tệp vào vị trí bạn muốn, với tên bạn muốn, và sau đó tất nhiên đặt loại tệp, rất có thể 'Excel Macro Enabled Workbook' ~ 'XLSM'

Dừng ghi và bạn có thể bắt đầu kiểm tra mã của bạn.

tôi đã viết đoạn code dưới đây cho phép bạn lưu một bảng tính bằng cách sử dụng con đường nơi mà các tập tin ban đầu được vị trí, đặt tên nó là "tổ chức sự kiện [ngày trong phòng giam 'A1']"

Option Explicit 

Sub SaveFile() 

Dim fdate As Date 
Dim fname As String 
Dim path As String 

fdate = Range("A1").Value 
path = Application.ActiveWorkbook.path 

If fdate > 0 Then 
    fname = "Event " & fdate 
    Application.ActiveWorkbook.SaveAs Filename:=path & "\" & fname, _ 
     FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 
Else 
    MsgBox "Chose a date for the event", vbOKOnly 
End If 

End Sub 

Sao chép mã vào một mô-đun mới và sau đó viết ngày trong ô "A1" 01-01-2016 -> chỉ định phụ cho một nút và chạy. [Lưu ý] bạn cần tạo một tệp lưu trước khi tập lệnh này hoạt động vì một sổ làm việc mới được lưu vào vị trí tự động lưu mặc định!

1

Có thể định dạng mặc định của bạn không khớp với đuôi tệp. Bạn nên chỉ định định dạng tệp cùng với tên tệp, đảm bảo định dạng phù hợp với tiện ích mở rộng:

With someWorkbook 
.SaveAs "C:\someDirector\Awesome.xlsm", fileformat:=xlOpenXMLWorkbookMacroEnabled 
End With 

OTOH, tôi không thấy phần mở rộng trên tên tệp .SaveAs của bạn. Có lẽ bạn cần phải cung cấp một khi làm điều này lập trình. Điều đó có ý nghĩa - không phải cung cấp một phần mở rộng từ giao diện GUI là thuận tiện, nhưng chúng tôi lập trình dự kiến ​​sẽ viết mã rõ ràng. Tôi đề nghị thêm phần mở rộng và định dạng phù hợp. Xem this msdn page để biết danh sách các định dạng tệp. Thành thật mà nói, tôi không nhận ra rất nhiều o descriptions.

xlExcel8 = 56 là.xls định dạng

xlExcel12 = 50 là định dạng .xlsb

xlOpenXMLWorkbook = 51 là định dạng .xlsx

xlOpenXMLWorkbookMacroEnabled = 52 được định dạng .xlsm

xlWorkbookDefault là cũng liệt kê với một giá trị của 51, mà câu đố tôi kể từ khi tôi nghĩ rằng định dạng mặc định có thể được thay đổi.

+0

Cảm ơn. +1 cho các định dạng lưu –

+0

@PatrickLepelletier. Cảm ơn. Nó chỉ xảy ra như vậy mà tôi đã làm việc trong VBA vào thời điểm đó và đã chỉ ra điều này ra bản thân mình. Tôi không viết mã VBA thường xuyên; Có lẽ tôi sẽ phải đề cập đến câu trả lời của chính tôi vào lần sau. – riderBill

+0

@riderBill - Tôi rất vui vì bạn đã liệt kê tất cả những điều đó. Tôi biết có rất nhiều định dạng, nhưng vẫn có đủ sự nhầm lẫn về tên của các hằng số. Tôi không biết nếu bất cứ nơi nào Microsoft phát hiện ra định dạng tập tin liên tục đi với phần mở rộng tập tin. –

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