2009-07-07 13 views
30

2007 वीबीए एक्सेस में एक खुली फ़ाइल (या फ़ाइल चयन) संवाद दिखाने के बारे में मैं कैसे जाउंगा?एक्सेस 2007 वीबीए में "ओपन फाइल" संवाद कैसे दिखाएं?

मैंने Excel.GetOpenFileName का उपयोग करने का प्रयास किया है जैसा कि मैं एक्सेल में करता हूं, लेकिन यह फ़ंक्शन एक्सेस में मौजूद नहीं है।

उत्तर

38

रीनाड बोम्प्यूस के उत्तर पर मेरी टिप्पणियां गड़बड़ हुईं।

दरअसल, आप देर से बाध्यकारी का उपयोग कर सकते हैं, और 11.0 ऑब्जेक्ट लाइब्रेरी का संदर्भ आवश्यक नहीं है। कि ऊपर काम करता है अच्छी तरह से में क्रम भी

Dim f As Object 
Set f = Application.FileDialog(3) 
f.AllowMultiSelect = True 
f.Show 

MsgBox "file choosen = " & f.SelectedItems.Count 

नोट:

निम्नलिखित कोड किसी भी संदर्भ के बिना काम करेंगे।

+2

+1 हमेशा उम्मीद थी कि यह संभव था, बनाने की कुंजी देर से बाध्यकारी काम msoOpenFileDialog इत्यादि के बजाय संख्यात्मक विकल्प को पार कर रहा है। अभी तक एक आसान जवाब है:) –

+0

आप कर सकते हैं, लेकिन नहीं करना चाहिए। देर से बाध्यकारी के साथ आप अंधेरे में कोडिंग कर रहे हैं .. जब आप संदर्भ जोड़ते हैं और उचित रूप से घोषित करते हैं और अपना दायरियल ऑब्जेक्ट सेट करते हैं तो आईडीई आपको संकेत देता है, जबकि देर से बाध्यकारी के साथ यह नहीं होगा। – Chris

+1

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

17

एक्सेस 2007 में आपको केवल Application.FileDialog का उपयोग करने की आवश्यकता है। नमूना कहते हैं

' Requires reference to Microsoft Office 12.0 Object Library. ' 
Private Sub cmdFileDialog_Click() 
    Dim fDialog As Office.FileDialog 
    Dim varFile As Variant 

    ' Clear listbox contents. ' 
    Me.FileList.RowSource = "" 

    ' Set up the File Dialog. ' 
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 

    With fDialog 

     ' Allow user to make multiple selections in dialog box ' 
     .AllowMultiSelect = True 

     ' Set the title of the dialog box. ' 
     .Title = "Please select one or more files" 

     ' Clear out the current filters, and add our own.' 
     .Filters.Clear 
     .Filters.Add "Access Databases", "*.MDB" 
     .Filters.Add "Access Projects", "*.ADP" 
     .Filters.Add "All Files", "*.*" 

     ' Show the dialog box. If the .Show method returns True, the ' 
     ' user picked at least one file. If the .Show method returns ' 
     ' False, the user clicked Cancel. ' 
     If .Show = True Then 

     'Loop through each file selected and add it to our list box. ' 
     For Each varFile In .SelectedItems 
      Me.FileList.AddItem varFile 
     Next 

     Else 
     MsgBox "You clicked Cancel in the file dialog box." 
     End If 
    End With 
End Sub 

के रूप में, सिर्फ यकीन है कि आप (VBE आईडीई के तहत> टूल> संदर्भ माइक्रोसॉफ्ट एक्सेस 12.0 वस्तु लाइब्रेरी के लिए एक संदर्भ दिया है:

यहाँ पहुँच प्रलेखन से उदाहरण है मेन्यू)।

+0

असल में, आप लेट बाइंडिंग का उपयोग कर सकते हैं, और 11.0 वस्तु पुस्तकालय के संदर्भ में आवश्यक नहीं है। निम्नलिखित कोड किसी भी संदर्भ के बिना काम करेंगे: मंद च वस्तु सेट च = Application.FileDialog (3) f.AllowMultiSelect = सच f.Show MsgBox "फ़ाइल चुना =" के रूप में और f.SelectedItems गणना ध्यान दें कि उपर्युक्त काम रनटाइम भी अच्छी तरह से काम करता है। अल्बर्ट डी।कल्लाल एडमॉन्टन, अल्बर्टा कनाडा [email protected] –

+0

उदाहरण यहां से कॉपी किया गया है: http://support.microsoft.com/en-us/kb/824272 – Mike

2

अल्बर्ट क्या पहले से ही कहा है के अलावा:

इस कोड (विभिन्न नमूनों की एक मैशप) एक SaveAs संवाद बॉक्स

Function getFileName() As String 
    Dim fDialog As Object 
    Set fDialog = Application.FileDialog(msoFileDialogSaveAs) 
    Dim varFile As Variant 

    With fDialog 
     .AllowMultiSelect = False 
     .Title = "Select File Location to Export XLSx :" 
     .InitialFileName = "jeffatwood.xlsx" 

    If .Show = True Then 
     For Each varFile In .SelectedItems 
     getFileName = varFile 
     Next 
    End If 
End With 
End Function 
+1

यह वही उत्तर है जो हर किसी ने दिया है। यह अधिक verbose है और अधिक विकल्प दिखाता है, लेकिन यह सिर्फ मौजूदा उत्तरों की दोहराना है। –

+0

@ डेविड-डब्ल्यू-फेंटन नहीं, यह नहीं है। यह एक फ़ाइल नाम देता है और आपको एक फ़िल्टर सेट करने की अनुमति देता है, जो कि अन्य उत्तरों में से कोई भी नहीं करता है। यह कार्यालय निर्भरताओं से मुक्त है और सीधे किसी भी रूप या मॉड्यूल में चिपकाया जा सकता है, इसलिए यह प्लग और प्ले है। यह बेहतर जवाब है, और दूसरे उत्तरों के लिए आपकी आलोचना उन लोगों के लिए अधिक उपयुक्त है जो दस्तावेज़ीकरण से कॉपी/पेस्ट करते हैं। –

0

मैं मानता हूँ जॉन एम ओ पी के लिए सबसे अच्छा जवाब है करने की क्षमता प्रदान करता है सवाल। विचार ने स्पष्ट रूप से कहा नहीं है, स्पष्ट उद्देश्य एक चयनित फ़ाइल नाम प्राप्त करना है, जबकि अन्य उत्तरों या तो गणना या सूचियां लौटाते हैं। हालांकि, मैं जोड़ूंगा कि msofiledialogfilepicker इस मामले में एक बेहतर विकल्प हो सकता है। अर्थात्:

Dim f As object 
Set f = Application.FileDialog(msoFileDialogFilePicker) 
dim varfile as variant 
f.show 
with f 
    .allowmultiselect = false 
    for each varfile in .selecteditems 
     msgbox varfile 
    next varfile 
end with 

नोट: varfile का मूल्य एक ही रहेगा के बाद से एकाधिक चयन करें गलत है (केवल एक आइटम कभी चयन किया जाता है)। मैंने समान सफलता के साथ लूप के बाहर अपना मूल्य इस्तेमाल किया। हालांकि, जॉन एम ने ऐसा करने के लिए शायद बेहतर अभ्यास किया है। साथ ही, फ़ोल्डर पिकर का चयन एक चयनित फ़ोल्डर प्राप्त करने के लिए किया जा सकता है। मैं हमेशा देर से बाध्यकारी पसंद करता हूं, लेकिन मुझे लगता है कि ऑब्जेक्ट डिफ़ॉल्ट एक्सेस लाइब्रेरी के मूल निवासी है, इसलिए यह आवश्यक नहीं हो सकता है

1

मेरे पास उपरोक्त का एक समान समाधान है और यह खोलने, सहेजने, फ़ाइल चुनने के लिए काम करता है। मैं इसे अपने मॉड्यूल में पेस्ट करता हूं और सभी एक्सेस डीबी के निर्माण में उपयोग करता हूं। कोड के अनुसार यह माइक्रोसॉफ्ट ऑफिस 14.0 ऑब्जेक्ट लाइब्रेरी की आवश्यकता है। बस एक और विकल्प मुझे लगता है:

Public Function Select_File(InitPath, ActionType, FileType) 
    ' Requires reference to Microsoft Office 14.0 Object Library. 

    Dim fDialog As Office.FileDialog 
    Dim varFile As Variant 


    If ActionType = "FilePicker" Then 
     Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 
     ' Set up the File Dialog. 
    End If 
    If ActionType = "SaveAs" Then 
     Set fDialog = Application.FileDialog(msoFileDialogSaveAs) 
    End If 
    If ActionType = "Open" Then 
     Set fDialog = Application.FileDialog(msoFileDialogOpen) 
    End If 
    With fDialog 
     .AllowMultiSelect = False 
     ' Disallow user to make multiple selections in dialog box 
     .Title = "Please specify the file to save/open..." 
     ' Set the title of the dialog box. 
     If ActionType <> "SaveAs" Then 
      .Filters.Clear 
      ' Clear out the current filters, and add our own. 
      .Filters.Add FileType, "*." & FileType 
     End If 
     .InitialFileName = InitPath 
     ' Show the dialog box. If the .Show method returns True, the 
     ' user picked a file. If the .Show method returns 
     ' False, the user clicked Cancel. 
     If .Show = True Then 
     'Loop through each file selected and add it to our list box. 
      For Each varFile In .SelectedItems 
       'return the subroutine value as the file path & name selected 
       Select_File = varFile 
      Next 
     End If 
    End With 
End Function 
संबंधित मुद्दे