2011-03-30 5 views
6

मेरा फ़ंक्शन निम्नानुसार है:वीबीए ActiveWorkbook क्यों है। एसएवीए खुली स्प्रेडशीट बदलता है?

Sub saveCSV() 
    Application.DisplayAlerts = False 
    ActiveWorkbook.SaveAs Filename:= _ 
    "c:\temp\file.csv", FileFormat:=xlCSV _ 
    , CreateBackup:=False 
End Sub 

मैं सक्रिय वर्कशीट को CSV पर निर्यात करने का प्रयास कर रहा हूं। जब मैं शीर्षक में कोड चलाता हूं, Book1.xlsm file.csv में बदल जाता है और शीट 1 फ़ाइल में बदल जाता है। निर्यात ठीक काम करता है। मैं इन अवांछित दुष्प्रभावों के बिना निर्यात कैसे कर सकता हूं?

उत्तर

6

हमेशा यह है कि SaveAs ने कैसे काम किया है। इस के आसपास जाने का एकमात्र तरीका वर्कशीट की प्रतिलिपि बनाना और कॉपी पर एक सेवए करना है, फिर इसे बंद करें।

संपादित करें: मुझे एक उदाहरण जोड़ना चाहिए क्योंकि ऐसा करना मुश्किल नहीं है। यहां एक त्वरित उदाहरण दिया गया है जो ActiveSheet को एक नई कार्यपुस्तिका में कॉपी करता है।

Dim wbk As Workbook 
Set wbk = Workbooks.Add 
ActiveSheet.Copy wbk.Sheets(1) ' Copy activesheet before the first sheet of wbk 
wbk.SaveAs .... 
wbk.Close 

एक जटिल कार्यपुस्तिका को लिंक और मैक्रोज़ के साथ समस्याएं मिल सकती हैं, लेकिन सामान्य परिदृश्यों में यह सुरक्षित है।

संपादित करें 2: मुझे पता है कि आप क्या करने की कोशिश कर रहे हैं, क्योंकि आपका दूसरा प्रश्न शीट में प्रत्येक बदलाव पर निर्यात को ट्रिगर करने की कोशिश करने के बारे में था। यहां प्रस्तुत यह प्रति शीट दृष्टिकोण अत्यधिक विघटनकारी होने की संभावना है।

मेरा सुझाव है कि जीयूआई बाधा को कम करने के लिए हाथ से एक सीएसवी फ़ाइल लिखना है। यदि उच्च आवृत्ति पर बचत होती है तो शीट अनुपयोगी होने की संभावना है। मैं एक्सेल के दरवाजे पर इसके लिए दोष नहीं डालूंगा, यह बस दृश्यों के पीछे किए गए तेजी से बचाए जाने के लिए नहीं बनाया गया था।

0

यहाँ एक छोटे से नियमित करता है कि क्या आप मूल की एक प्रति को प्रचालित करके चाहते हैं ... फ़ाइल पटकथा वस्तु के माध्यम से किया प्रतिलिपि है। के रूप में सक्रिय कार्यपुस्तिका & मान लिया जाता है ".xlsm" प्रत्यय करने का विरोध किया "ThisWorkbook" पर संचालित करने के लिए हार्डकोडेड - इस tweak सकता है काम करने के लिए मुझे लगता है कि:

Public Sub SaveCopyAsCsv() 

Dim sThisFile As String: sThisFile = ThisWorkbook.FullName 
Dim sCsvFile As String: sTempFile = Replace(sThisFile, ".xlsm", "_TEMP.xlsm") 

ThisWorkbook.Save ' save the current workbook 

' copy the saved workbook ABC.xlsm to TEMP_ABC.xlsm 
Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject") 
On Error Resume Next 
Call fso.deletefile(sTempFile, True) ' deletes prev temp file if it exists 
On Error GoTo 0 
Call fso.CopyFile(sThisFile, sTempFile, True) 

' open the temp file & save as CSV 
Dim wbTemp As Workbook 
Set wbTemp = Workbooks.Open(sTempFile) ' open the temp file in excel 
' your prev code to save as CSV 
Application.DisplayAlerts = False 
ActiveWorkbook.SaveAs FileName:="c:\temp\file.csv", FileFormat:=xlCSV,  CreateBackup:=False 
wbTemp.Close ' close the temp file now that the copy has been made 
Application.DisplayAlerts = True 

' delete the temp file (if you want) 
On Error Resume Next 
Call fso.deletefile(sTempFile, True) ' deletes the temp file 
On Error GoTo 0 

End Sub 
संबंधित मुद्दे