2012-06-29 15 views
15

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

Dim Filt As String 
Dim FilterIndex As Integer 
Dim Title As String 
Dim FileName As Variant 

Filt = "Cst Files (*.prn),*.prn" 
Title = "Select a cst File to Import" 
FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title) 

If FileName = False Then 
MsgBox "No File Was Selected" 
Exit Sub 
End If 

With Application.ActiveSheet 
    Cells.Select 
Selection.QueryTable.Delete 
Selection.ClearContents 
End With 

Workbooks.Open FileName 

धन्यवाद!

उत्तर

33

वर्तमान शीट में टेक्स्ट फ़ाइल आयात करने के कई तरीके हैं। यहाँ तीन (विधि कि आप ऊपर का उपयोग कर रहे सहित)

  1. एक QueryTable
  2. ओपन पाठ स्मृति में फ़ाइल का उपयोग कर रहे हैं और उसके बाद वर्तमान शीट के बारे में और अंत में कॉलम में टेक्स्ट को लागू करने के यदि आवश्यक हो।
  3. आप आप एक नई कार्यपुस्तिका में पाठ फ़ाइल को खोलने के बाद विधि कि आप वर्तमान में उपयोग कर रहे हैं तो उपयोग करना चाहते हैं, बस इस पर कॉपी वर्तमान शीट एक QueryTable

    का उपयोग Cells.Copy

उपयोग करने के लिए

यहां एक साधारण मैक्रो है जिसे मैंने रिकॉर्ड किया है। कृपया अपनी जरूरतों के अनुसार इसे संशोधित करें।

Sub Sample() 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;C:\Sample.txt", Destination:=Range("$A$1") _ 
     ) 
     .Name = "Sample" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = True 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
End Sub 

ओपन स्मृति

Sub Sample() 
    Dim MyData As String, strData() As String 

    Open "C:\Sample.txt" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 
End Sub 

एक बार जब आप सरणी में डेटा है में पाठ फ़ाइल आप वर्तमान शीट को निर्यात कर सकते हैं।

विधि है कि आप पहले से ही उपयोग कर रहे हैं

Sub Sample() 
    Dim wbI As Workbook, wbO As Workbook 
    Dim wsI As Worksheet 

    Set wbI = ThisWorkbook 
    Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import 

    Set wbO = Workbooks.Open("C:\Sample.txt") 

    wbO.Sheets(1).Cells.Copy wsI.Cells 

    wbO.Close SaveChanges:=False 
End Sub 

अनुसरण करे

आप Application.GetOpenFilename का उपयोग प्रासंगिक फ़ाइल चुनने के लिए कर सकते हैं का उपयोग करना। उदाहरण के लिए ...

Sub Sample() 
    Dim Ret 

    Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn") 

    If Ret <> False Then 
     With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;" & Ret, Destination:=Range("$A$1")) 

      '~~> Rest of the code 

     End With 
    End If 
End Sub 
+0

QueryTable विधि की तरह दिखें सबसे सीधे आगे है लेकिन क्या इसमें एक संवाद बॉक्स जोड़ने का कोई तरीका है, इसलिए मेरे पास विभिन्न स्रोतों से टेक्स्ट फ़ाइलों को चुनने का विकल्प होगा? –

+0

हां। एक पल ... पोस्ट को अपडेट करना –

+0

पोस्ट अपडेट किया गया :) देखें 'FOLLOWUP' –

0

मुझे लगता है कि my answer to my own question यहाँ तुम क्या करने की कोशिश कर रहे हैं क्या करने का सबसे सरल उपाय है:

  1. सेल जहां फ़ाइल से पाठ की पहली पंक्ति होना चाहिए का चयन करें।

  2. आयात करने के लिए टेक्स्ट फ़ाइल का चयन करने के लिए Data/Get External Data/From File संवाद का उपयोग करें।

  3. आयातित पाठ को आवश्यकतानुसार प्रारूपित करें।

  4. Import Data खुलने वाले संवाद में, पर Properties...

  5. सही का निशान हटाएँ Prompt for file name on refresh बॉक्स क्लिक करें।

  6. जब भी बाहरी फ़ाइल बदलती है, Data/Get External Data/Refresh All बटन पर क्लिक करें।

नोट: आपके मामले में, आपको शायद चरण # 5 छोड़ना चाहिए।

+0

लेकिन जब आप रीफ्रेश दबाते हैं तो यह हमेशा आपको फ़ाइल का चयन करने के लिए कहता है – Damian

1

आप .WorkbookConnection.Delete लिख सकते हैं के बाद .refresh BackgroundQuery: = झूठी इस पाठ फ़ाइल को नष्ट करेगा बाहरी कनेक्शन।

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