2008-10-17 24 views
32

में निरपेक्ष पथों के बजाय सापेक्ष मैंने एक एक्सेल वीबीए मैक्रो लिखा है जो डेटा पर गणना करने से पहले एक HTML फ़ाइल (स्थानीय रूप से संग्रहीत) से डेटा आयात करता है।एक्सेल वीबीए

पल HTML फ़ाइल एक निरपेक्ष पथ के साथ में जाना जाता है पर:

Workbooks.Open FileName:="C:\Documents and Settings\Senior Caterer\My Documents\Endurance Calculation\TRICATEndurance Summary.html" 

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

मैं काम पर एक्सेल 2000 और 2002 का उपयोग कर रहा हूं, लेकिन जैसा कि मैं इसे वितरित करने की योजना बना रहा हूं, मैं चाहता हूं कि यह एक्सेल के कई संस्करणों के साथ काम करना चाहें।

कोई सुझाव आभारी रूप से प्राप्त हुआ।

उत्तर

50

बस स्पष्ट करने के लिए yalestar क्या कहा, यह आप रिश्तेदार पथ दे देंगे:

Workbooks.Open FileName:= ThisWorkbook.Path & "\TRICATEndurance Summary.html" 
+0

बहुत बहुत धन्यवाद। यह पूरी तरह से काम किया। – Gene

+0

मैक के लिए एक्सेल के साथ मुझे एक ही समस्या थी। और पता चला कि मैक के लिए, पथ को '\' के बजाय ':' का उपयोग करके निर्दिष्ट करने की आवश्यकता है। – remudada

+0

विंडोज के लिए एक और उपयोगकर्ता टिडबिट, आप पथ जोड़कर पथ में ऊपर निर्दिष्ट स्थानों को निर्दिष्ट कर सकते हैं \ .. \ एक उदाहरण होगा: वर्कबुक। ओपन फ़ाइल नाम: = यह वर्कबुक.पैथ और "\ .. \ MyFile.txt" अगर आप चाहते थे धीरज गणना फ़ोल्डर के भीतर MyFile.txt नाम की एक फ़ाइल तक पहुंचें – KayakinKoder

17

आप रिश्तेदार पथ जड़ के लिए इनमें से किसी एक का उपयोग कर सकता:

ActiveWorkbook.Path 
ThisWorkbook.Path 
App.Path 
2

मुझे लगता है कि समस्या यह है कि एक पथ के बिना फ़ाइल खोलने से केवल आपके "वर्तमान निर्देशिका" सही ढंग से सेट है, तो काम करेगा।

तत्काल विंडो में "डीबग.प्रिंट CurDir" टाइप करने का प्रयास करें - जो टूल में सेट के रूप में आपकी डिफ़ॉल्ट फ़ाइलों के लिए स्थान दिखाना चाहिए ... विकल्प।

मुझे यकीन है कि मैं इसके साथ पूरी तरह से खुश हूँ, शायद इसलिए क्योंकि यह एक विरासत वीबी आदेश के कुछ है नहीं कर रहा हूँ, लेकिन आप ऐसा कर सकता है:

ChDir ThisWorkbook.Path 

मुझे लगता है मैं ThisWorkbook उपयोग करने के लिए पसंद करेंगे। HTML फ़ाइल के लिए पथ बनाने के लिए पथ। मैं पटकथा क्रम में FileSystemObject (हमेशा स्थापित किया जा रहा है जो) के एक बड़े प्रशंसक हूँ, इसलिए मैं (माइक्रोसॉफ्ट स्क्रिप्टिंग रनटाइम के लिए एक संदर्भ सेट करने के बाद) इस तरह कुछ करने के लिए खुश हो जाएगा:

Const HTML_FILE_NAME As String = "my_input.html" 

With New FileSystemObject 
    With .OpenTextFile(.BuildPath(ThisWorkbook.Path, HTML_FILE_NAME), ForReading) 
     ' Now we have a TextStream object that we can use to read the file 
    End With 
End With 
+0

मुझे इतना यकीन नहीं है कि स्क्रिप्टिंग रनटाइम "हमेशा स्थापित" है। काम पर, हमारे उत्पाद के लिए डेटाबेस अपडेट स्थापित होने पर निर्भर थे (हमने इसका उपयोग एसक्यूएल स्क्रिप्ट फाइलों को खोलने के लिए किया था), लेकिन हमने तुरंत पाया (कठिन तरीका) कि scrrun.dll या तो कुछ मामलों में पंजीकृत नहीं है या पंजीकृत नहीं है। –

+0

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

+0

IE के सभी संस्करणों के ऊपर IE6 की तरह प्राचीन कुछ है, iirc। और मुझे लगता है कि .NET ढांचे 4+ में भी यह है (गलत हो सकता है!)। आईई हमेशा विंडोज़ (धन्यवाद ईयू :)) के साथ स्थापित नहीं है, और .NET 4 अभी भी 'अपेक्षाकृत' नया है, इसलिए यह वास्तव में मौजूद नहीं है। –

1

आप द्वारा अपने उपयोगकर्ताओं के लिए और अधिक लचीलापन प्रदान कर सकते हैं उन्हें

Private Sub btn_browser_file_Click() 
Dim xRow As Long 
Dim sh1 As Worksheet 
Dim xl_app As Excel.Application 
Dim xl_wk As Excel.Workbook 
Dim WS As Workbook 
Dim xDirect$, xFname$, InitialFoldr$ 
InitialFoldr$ = "C:\" 
With Application.FileDialog(msoFileDialogFolderPicker) 
    .InitialFileName = Application.DefaultFilePath & "\" 
    .Title = "Please select a folder to list Files from" 
    .InitialFileName = InitialFoldr$ 
    .Show 
    Range("H13").Activate 
    If .SelectedItems.Count <> 0 Then 
     xDirect$ = .SelectedItems(1) & "\" 
     Range("h12").Value = xDirect$ 
     xFname$ = Dir(xDirect$, 7) 
     Do While xFname$ <> "" 
     If (Format(FileDateTime(xDirect$ & "\" & xFname$), "MM/DD/YYYY") > Format(Range("H10").Value, "MM/DD/YYYY")) Then 
      ActiveCell.Offset(xRow) = xFname$ 
      xRow = xRow + 1 
      xFname$ = Dir 
      Else 
      xFname$ = Dir 
      xRow = xRow 
     End If 
     Loop 
    End If 
End With 
को ब्राउज़र बटन प्रदान कोड के इस टुकड़े के साथ 10

आप इसे आसानी से प्राप्त कर सकते हैं। परीक्षण कोड

-1

मुझे लगता है कि यह मदद कर सकता है। मैक्रो चेक के नीचे यदि फ़ोल्डर मौजूद है, तो फ़ोल्डर नहीं बनाते हैं और ऐसे फ़ोल्डर में दोनों xls और pdf स्वरूपों में सहेजते हैं। ऐसा होता है कि फ़ोल्डर को शामिल लोगों के साथ साझा किया जाता है ताकि सभी को अपडेट किया जा सके।

Sub PDF_laudo_e_Prod_SP_Sem_Ajuste_Preco() 
' 
' PDF_laudo_e_Prod_SP_Sem_Ajuste_Preco Macro 
' 

' 


Dim MyFolder As String 
Dim LaudoName As String 
Dim NF1Name As String 
Dim OrigFolder As String 

MyFolder = ThisWorkbook.path & "\" & Sheets("Laudo").Range("C9") 
LaudoName = Sheets("Laudo").Range("K27") 
NF1Name = Sheets("PROD SP sem ajuste").Range("Q3") 
OrigFolder = ThisWorkbook.path 

Sheets("Laudo").Select 
Columns("D:P").Select 
Selection.EntireColumn.Hidden = True 

If Dir(MyFolder, vbDirectory) <> "" Then 
Sheets("Laudo").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & LaudoName & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

Sheets("PROD SP sem ajuste").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & NF1Name & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

ThisWorkbook.SaveAs filename:=MyFolder & "\" & LaudoName 

Application.DisplayAlerts = False 

ThisWorkbook.SaveAs filename:=OrigFolder & "\" & "Entregas e Instrucao Barter 2015 - beta" 

Application.DisplayAlerts = True 

Else 
MkDir MyFolder 
Sheets("Laudo").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & LaudoName & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

Sheets("PROD SP sem ajuste").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & NF1Name & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

ThisWorkbook.SaveAs filename:=MyFolder & "\" & LaudoName 

Application.DisplayAlerts = False 

ThisWorkbook.SaveAs filename:=OrigFolder & "\" & "Entregas e Instrucao Barter 2015 - beta" 

Application.DisplayAlerts = True 

End If 

Sheets("Laudo").Select 
Columns("C:Q").Select 
Selection.EntireColumn.Hidden = False 
Range("A1").Select 

End Sub