2013-01-31 15 views
8

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

समस्या 1: बटन को असाइन किया गया वीबीए सीएसवी फ़ाइल की सामग्री को उसी वर्कशीट पर बटन ("पैनल" वर्कशीट) के रूप में रखा जाता है। मैं "डेटा" शीट पर सीएसवी फ़ाइल की सामग्री को रखना चाहता हूं।

समस्या 2: इसके अलावा, मेरे हार्ड ड्राइव और "capture.csv" नामक फ़ाइल को संदर्भित करने वाली कोड की एक स्ट्रिंग है। तो जब मैक्रो सक्षम एक्सेल फ़ाइल किसी अन्य कंप्यूटर पर है, तो फ़ाइल क्रैश हो जाती है। पथ स्ट्रिंग को हटाने का कोई भी तरीका इसलिए कोई कंप्यूटर फ़ाइल का उपयोग कर सकता है?

इस मुद्दे को ठीक करने के लिए कोई भी सहायता की सराहना की जाएगी। बटन को सौंपा गया मैक्रो निम्नानुसार है:

Sub load_csv() 
Dim fStr As String 
With Application.FileDialog(msoFileDialogFilePicker) 
.Show 
If .SelectedItems.Count = 0 Then 
MsgBox "Cancel Selected" 
End 
End If 
'fStr is the file path and name of the file you selected. 
fStr = .SelectedItems(1) 
End With 
Range("A1").Select 
With ActiveSheet.QueryTables.Add(Connection:= _ 
"TEXT;C:\Users\laptop\Desktop\CAPTURE.csv", Destination:=Range("$A$1")) 
.Name = "CAPTURE" 
.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, 1, 1, 1, 1, 1) 
.TextFileTrailingMinusNumbers = True 
.Refresh BackgroundQuery:=False 
MsgBox fStr 
End With 
End Sub 

उत्तर

12

क्या आप यह कोशिश कर रहे हैं?

Sub load_csv() 
    Dim fStr As String 

    With Application.FileDialog(msoFileDialogFilePicker) 
     .Show 
     If .SelectedItems.Count = 0 Then 
      MsgBox "Cancel Selected" 
      Exit Sub 
     End If 
     'fStr is the file path and name of the file you selected. 
     fStr = .SelectedItems(1) 
    End With 

    With ThisWorkbook.Sheets("Data").QueryTables.Add(Connection:= _ 
    "TEXT;" & fStr, Destination:=Range("$A$1")) 
     .Name = "CAPTURE" 
     .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, 1, 1, 1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 

    End With 
End Sub 
+0

मैं वास्तव में क्या कहने जा रहा था। यह – Rick

+0

काम करना चाहिए मेरी मदद करने के लिए समय निकालने के लिए धन्यवाद। मैंने आपके द्वारा लिखे गए कोड को बटन सौंपा। जब मैं csv फ़ाइल लोड करता हूं, तो एक संदेश विंडो प्रकट होती है: "रन-टाइम त्रुटि '-2147024809 (80070057) गंतव्य श्रेणी उसी वर्कशीट पर नहीं है जिस पर क्वेरी तालिका बनाई जा रही है।" – George

+1

बदलें 'गंतव्य: = रेंज ("$ ए $ 1")) 'गंतव्य तक: = यह वर्कबुक। शीट्स (" डेटा ")। रेंज (" $ ए $ 1 ")) –

0

एक्सेल मैक पर के लिए, यह QueryTable वस्तु गुण का समर्थन नहीं करता "PreserveFormatting" और "RefreshPeriod" और अगर आप कोशिश करते हैं और उन्हें सेट आप एक रनटाइम त्रुटि दे देंगे लगता है।

इसके अलावा, एप्लिकेशन। FileDialog मैक के साथ भी काम नहीं करता है, लेकिन यह अन्य पदों में शामिल है।

Mac के लिए:

Sub load_csv() 
Dim fStr As String 

fStr = "Macintosh HD:Users:anthony:Documents:example.csv" 'Keeping file String simple for example. 

With ThisWorkbook.Sheets("Data").QueryTables.Add(Connection:= _ 
"TEXT;" & fStr, Destination:=Range("$A$1")) 
    .Name = "CAPTURE" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    '.PreserveFormatting = True **commented out for Mac 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    '.RefreshPeriod = 0 **commented out for Mac 
    .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, 1, 1, 1, 1, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 

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