VBA का उपयोग करके एक txt फ़ाइल कैसे बनाएं और लिखें


116

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

मैं उस कोड को लिखना चाहता हूं, जो उस .txt फाइल में प्रिंट होने वाला है ।

VBA का उपयोग करके एक .txt फ़ाइल बनाने के लिए कमांड क्या है , और मैं इसे कैसे लिखूं


1
क्या आप एक मौजूदा फ़ाइल को बनाते समय संशोधित करना चाहते हैं? और "सी कोड्स" क्या है
brettdj

1
यदि कोई मौजूदा उत्तर आपकी आवश्यकताओं को पूरा करता है, तो क्या आप इसे एक उत्तर के रूप में स्वीकार करना चाहेंगे, इसलिए आपका प्रश्न अब अनुत्तरित नहीं है? (यदि नहीं, तो कृपया अपनी समस्या को हल करने के लिए मौजूदा उत्तरों से क्या गायब है, इस पर विवरण जोड़ें)
मार्कस मैन्गेल्सडॉर्फ

जवाबों:


37

बेन के जवाब पर विस्तार से जानने के लिए :

यदि आप एक संदर्भ जोड़ते हैं Microsoft Scripting Runtimeऔर सही ढंग से वैरिएबल फोंस टाइप करते हैं तो आप स्वतः पूर्णता (Intellisense) का लाभ उठा सकते हैं और अन्य महान विशेषताओं की खोज कर सकते हैंFileSystemObject

यहाँ एक पूर्ण उदाहरण मॉड्यूल है:

Option Explicit

' Go to Tools -> References... and check "Microsoft Scripting Runtime" to be able to use
' the FileSystemObject which has many useful features for handling files and folders
Public Sub SaveTextToFile()

    Dim filePath As String
    filePath = "C:\temp\MyTestFile.txt"

    ' The advantage of correctly typing fso as FileSystemObject is to make autocompletion
    ' (Intellisense) work, which helps you avoid typos and lets you discover other useful
    ' methods of the FileSystemObject
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    Dim fileStream As TextStream

    ' Here the actual file is created and opened for write access
    Set fileStream = fso.CreateTextFile(filePath)

    ' Write something to the file
    fileStream.WriteLine "something"

    ' Close it, so it is not locked anymore
    fileStream.Close

    ' Here is another great method of the FileSystemObject that checks if a file exists
    If fso.FileExists(filePath) Then
        MsgBox "Yay! The file was created! :D"
    End If

    ' Explicitly setting objects to Nothing should not be necessary in most cases, but if
    ' you're writing macros for Microsoft Access, you may want to uncomment the following
    ' two lines (see https://stackoverflow.com/a/517202/2822719 for details):
    'Set fileStream = Nothing
    'Set fso = Nothing

End Sub

कोड के लिए सहायक टिप्पणियों के साथ एक पूर्ण उत्तर लिखने के लिए धन्यवाद।
पोर्टलैंड रनर

अगर आप मेरी पोस्ट से कुछ सीख गए तो मैं ज्यादा खुश हूँ! :)
मार्कस मैंगल्सडॉर्फ

171

फ़ाइल बनाने और उसे लिखने के लिए FSO का उपयोग करें।

Dim fso as Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile as Object
Set oFile = FSO.CreateTextFile(strPath)
oFile.WriteLine "test" 
oFile.Close
Set fso = Nothing
Set oFile = Nothing    

दस्तावेज यहाँ देखें:


25
जब आप सीधे स्क्रिप्टिंग रनटाइम का संदर्भ लेते हैं, तो आप सही प्रकार का उपयोग कर सकते हैं: Dim oFs As New FileSystemObject Dim oFile As TextStream
TmTron

क्या स्क्रिप्टिंग रनटाइम का उपयोग पुराने चैनल विधि पर पसंद किया जाता है? मैं अपने छात्रों को अन्य अनुभव द्वारा समर्थित जानकारी के साथ कुछ कारण बताना चाहूंगा।
रिक हेंडरसन

@ रिकहैंडर्सन, मैं इसे पसंद करता हूं, अगर आपका यही मतलब है। लाभ एनकैप्सुलेशन है। एक बार जब आप ऑब्जेक्ट (सेट oFile = कुछ नहीं |), या यह कार्यक्षेत्र से बाहर चला जाता है, फ़ाइल स्वचालित रूप से बंद हो जाती है।
बेन

2
कृपया ध्यान दें कि यह उत्तर खराब कोडिंग अभ्यास को बढ़ावा देता है : समस्या यह है कि सही चर प्रकारों को स्पष्ट रूप से परिभाषित नहीं करने के साथ-साथ इसके नाम के लिए एक स्ट्रिंग संदर्भ द्वारा एक वस्तु बनाने से आपको भविष्य में समस्याओं को दूर करने में बहुत मुश्किल हो सकती है (उदाहरण के लिए यदि आप नाम के गलत भाग)। इसके अलावा, चर नहीं टाइप करके, आपके पास अन्य अद्भुत तरीकों के बारे में जानने का कोई तरीका नहीं है FileSystemObject। @ बान: कृपया बेहतर दिशा में शुरुआती लोगों का नेतृत्व करने के लिए अपने उत्तर को अपडेट करने पर विचार करें ।
मार्कस मैंगल्सडॉर्फ

2
@MarcusMangelsdorf मैंने आपको सुना है, लेकिन मैं एक बहस नहीं करना चाहता।
बेन

43
Open ThisWorkbook.Path & "\template.txt" For Output As #1
Print #1, strContent
Close #1

अधिक जानकारी:


दलीलों का जवाब कुछ स्पष्टीकरण और विवरण के साथ लिखें।
मोहम्मद नौरेलिन

4
मैं इस विधि को एफएसओ विधि के लिए पसंद करता हूं क्योंकि इसे बाहरी संदर्भ की आवश्यकता नहीं है और यह काफी कम है। हालाँकि मैं फ़ाइल नंबर को # 1 के रूप में हार्डकोड करने के बजाय FreeFile का उपयोग करने का सुझाव देता हूं।
phrebh

2
यह बहुत अच्छा काम करता है। मैंने पहले कभी Open somePath For Output As #1वाक्यविन्यास नहीं देखा है , यह दस्तावेज़: msdn.microsoft.com/en-us/vba/language-reference-vba/articles/…
chiliNUT

5
मैं इस दृष्टिकोण को सांसारिक पाठ फ़ाइल लेखन के लिए पसंद करता हूं। ये कथन कम से कम 1981 से बेसिक भाषा का हिस्सा हैं।
richardtallent

2
एक हार्डकोड के बजाय FreeFile का उपयोग करने के बारे में @phrebh की टिप्पणी के बारे में # 1 देखें wellsr.com/vba/2016/excel/vba-freefile-for-foolproof-file-IO
जॉर्ज बिर्बिसिस

33

बहुत अधिक अतिरेक के साथ एक आसान तरीका।

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile("C:\your_path\vba.txt", True, True)
    Fileout.Write "your string goes here"
    Fileout.Close

2
क्या पथ निर्धारित करने के लिए फ़ाइल चयनकर्ता का उपयोग करना संभव है?
आरआरएस

यह एक फ़ाइल बनाता है जो UCS2 एन्कोडेड है। क्या ऐसा करना संभव है जो ANSI हो?
पाओलोव

-10
Dim SaveVar As Object

Sub Main()

    Console.WriteLine("Enter Text")

    Console.WriteLine("")

    SaveVar = Console.ReadLine

    My.Computer.FileSystem.WriteAllText("N:\A-Level Computing\2017!\PPE\SaveFile\SaveData.txt", "Text: " & SaveVar & ", ", True)

    Console.WriteLine("")

    Console.WriteLine("File Saved")

    Console.WriteLine("")

    Console.WriteLine(My.Computer.FileSystem.ReadAllText("N:\A-Level Computing\2017!\PPE\SaveFile\SaveData.txt"))
    Console.ReadLine()

End Sub()

यह एक पाठ फ़ाइल लिखने और पढ़ने में मदद कर सकता है
ज़ैक ब्राइटमैन

1
मुझे लगता है कि आप यह नहीं पढ़ते हैं कि प्रश्न क्या है और आप यह भी बताना पसंद नहीं करते हैं कि आप क्या करने जा रहे हैं, जो दूसरों की मदद करते समय अच्छी बात नहीं है।
एम। आदिल खालिद

और आप अपने जवाब को ठीक से फॉर्मेट भी नहीं कर रहे हैं।
बीडीएल

3
दुर्भाग्य से, आपके द्वारा पोस्ट किया गया कोड VBA नहीं है। My.Computer.FileSystemVBA में डिफ़ॉल्ट रूप से कोई ऑब्जेक्ट नहीं है और इसलिए आप WriteAllTextविधि का उपयोग नहीं कर सकते हैं , या तो।
मार्कस मैन्गेल्सफोर्ड

Zack, कृपया केवल उत्तर पोस्ट करने से बचें और सुनिश्चित करें कि आप जिस भाषा का उपयोग कर रहे हैं वह ऑप के साथ इनलाइन है।
डैनियल एल वानडेनबॉश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.