2009-02-23 4 views
40

मैं मैक्रो के साथ मौजूदा एक्सेल फ़ाइलों को खोजना चाहता हूं, लेकिन जब मैं कोड द्वारा खोले जाते हैं तो मैं उन फ़ाइलों को प्रदर्शित नहीं करना चाहता हूं। क्या उन्हें "पृष्ठभूमि में" खोलने का कोई तरीका है, तो बोलने के लिए?प्रदर्शन के बिना वीबीए के साथ पढ़ने के लिए एक्सेल एक्सेल फ़ाइल

उत्तर

59

सुनिश्चित नहीं हैं कि अगर आप उन्हें अदृश्य रूप से वर्तमान में खोल सकते हैं, हालांकि उदाहरण

उत्कृष्टता आप एक्सेल का एक नया उदाहरण खोल सकते हैं, इसे छिपाने और फिर कार्यपुस्तिका

Dim app as New Excel.Application 
app.Visible = False 'Visible is False by default, so this isn't necessary 
Dim book As Excel.Workbook 
Set book = app.Workbooks.Add(fileName) 
' 
' Do what you have to do 
' 
book.Close SaveChanges:=False 
app.Quit 
Set app = Nothing 

के रूप में दूसरों को तैनात किया है खोलने के लिए, सुनिश्चित करें कि आप खोले गए कार्यपुस्तिकाओं के साथ समाप्त होने के बाद साफ हो जाएं

+0

यह टास्कबार में चमकती रोकता है लेकिन कर्सर में चमकती है। यहां तक ​​कि आवेदन। कर्सर मदद नहीं करता है (कार्यालय 2010 x64 में)। – sevenkul

+4

मैं दृढ़ता से सुझाव है कि आप स्क्रीन के नीचे ताला लक्ष्य कार्यपुस्तिका खोलने से पहले: 'App.AutomationSecurity = msoAutomationSecurityForceDisable' ' App.EnableEvents = झूठी' ' App.Calculation = xlCalculationManual' - और आप की गणना पर विचार हो सकता AddIns संग्रह और उन्हें अक्षम भी, ** धीमी ऐड-इन स्टार्टअप ऐप सत्र ** के लॉन्च में देरी होगी। –

+0

@Nile वे सभी महान विचारों की तरह लगते हैं –

0

एक्सेल में, कार्यपुस्तिकाओं को छुपाएं, और उन्हें छुपाएं। जब आपका ऐप उन्हें लोड करता है तो वे नहीं दिखाए जाएंगे।

संपादित करें: पुनः पढ़ने पर, यह स्पष्ट हो गया कि ये कार्यपुस्तिकाएं आपके आवेदन का हिस्सा नहीं हैं। ऐसा समाधान उपयोगकर्ता कार्यपुस्तिकाओं के लिए अनुचित होगा।

1

उन्हें Excel के नए उदाहरण से खोलें।

Sub Test() 

    Dim xl As Excel.Application 
    Set xl = CreateObject("Excel.Application") 

    Dim w As Workbook 
    Set w = xl.Workbooks.Add() 

    MsgBox "Not visible yet..." 
    xl.Visible = True 

    w.Close False 
    Set xl = Nothing 

End Sub 

आपको पूरा करने के बाद साफ करने की आवश्यकता है।

+2

बस जोर देने के लिए, आपको अदृश्य उदाहरण के साथ पूरा करने के बाद सफाई करनी होगी। यदि आप नहीं करते हैं कि उपयोगकर्ता अन्य ऐप्स से डबल क्लिक या लॉन्च करके एक्सेल फ़ाइलों को खोलने में सक्षम नहीं हो सकता है, जब तक कि वे लॉगऑफ न करें या प्रक्रियाओं को मारने के बारे में जानें (क्योंकि अदृश्य विंडो में फ़ाइलें खोली जाती हैं)। – David

23

कि सूट अपनी आवश्यकताओं हैं, तो मैं बस

Application.ScreenUpdating = False 

अपने कोड को तेज करने की बजाय एक्सेल का एक दूसरा उदाहरण का उपयोग करके उसे धीमा के अतिरिक्त लाभ के साथ प्रयोग करेंगे।

9

भले ही आपको यह जवाब मिल गया हो, भले ही इस प्रश्न को ढूंढने के लिए, एक जेट स्प्रेडशीट को जेट डेटा स्टोर के रूप में खोलना भी संभव है। एक परियोजना मैं इस पर उपयोग किया है से कनेक्शन स्ट्रिंग उधार, यह इस तरह थोड़े दिखेगा:

strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & objFile.Path & ";Extended Properties=""Excel 8.0;HDR=Yes""" 
strSQL = "SELECT * FROM [RegistrationList$] ORDER BY DateToRegister DESC" 

ध्यान दें कि "RegistrationList" कार्यपुस्तिका में टैब का नाम है। वेब पर चारों ओर तैरने वाले कुछ ट्यूटोरियल हैं जो आप कर सकते हैं और इस तरह से शीट तक नहीं पहुंच सकते हैं।

बस सोचा कि मैं जोड़ूंगा। :)

+0

यह अच्छा है !!!! –

+0

क्या यह आपके लिए काम करता है? ऐसा लगता है कि एक्सेल 2003 –

+0

@ShawnZhang पर काम नहीं कर रहा है हम एक्सेल फाइलों में से अधिकांश को 2000/2003 प्रारूप में निर्यात किया गया है क्योंकि प्रेषक का प्रोग्राम उत्सर्जित करता है। कनेक्शन स्ट्रिंग की एक भिन्नता है जिसे हमने 2007/2010 फ़ाइलों के लिए परीक्षण किया है जो भी काम करता है। – AnonJr

8

किसी कार्यपुस्तिका के रूप में Excel के मौजूदा उदाहरण में छिपा उपयोग निम्नलिखित खोलने के लिए, के रूप में छिपा हुआ कार्यपुस्तिका

Application.ScreenUpdating = False 
    Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True 
    ActiveWindow.Visible = False 
    ThisWorkbook.Activate 
    Application.ScreenUpdating = True 
+0

धन्यवाद, यह काम किया जब मैं इस तरह का उपयोग करें: 'ThisWorkbook.Activate: ActiveWindow.Visible = गलत: Application.ScreenUpdating = FALSE' अन्य सभी कोड यहाँ ' Application.ScreenUpdating = सच: ThisWorkbook.Activate: ActiveWindow.Visible = सही 'न तो टास्कबार और न ही कर्सर झिलमिलाहट। – sevenkul

1

ओपन और फिर यह सेट के रूप में "सुरक्षित", ताकि उपयोगकर्ताओं को संकेत नहीं दिया जाता है, जब वे बंद करवाना।

Dim w As Workbooks 

Private Sub Workbook_Open() 
    Application.ScreenUpdating = False 
    Set w = Workbooks 
    w.Open Filename:="\\server\PriceList.xlsx", UpdateLinks:=False, ReadOnly:=True 'this is the data file were going to be opening 
    ActiveWindow.Visible = False 
    ThisWorkbook.Activate 
    Application.ScreenUpdating = True 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    w.Item(2).Saved = True 'this will suppress the safe prompt for the data file only 
End Sub 

यह अशोक द्वारा पोस्ट किए गए उत्तर का कुछ हद तक व्युत्पन्न है।

ऐसा करने से आपको इस तरह से एक्सेल फ़ाइल में परिवर्तनों को सहेजने के लिए संकेत नहीं मिलेगा। यह बहुत अच्छा है अगर आपके पढ़ने से एक्सेल फ़ाइल को सत्यापन के लिए डेटा स्रोत के रूप में लक्षित किया गया है। उदाहरण के लिए यदि कार्यपुस्तिका में उत्पाद के नाम और मूल्य डेटा शामिल हैं तो इसे छुपाया जा सकता है और आप एक एक्सेल फ़ाइल दिखा सकते हैं जो उस मूल्य सूची से मान्य उत्पाद के लिए ड्रॉप डाउन के साथ चालान का प्रतिनिधित्व करता है।

फिर आप किसी नेटवर्क पर किसी साझा स्थान पर मूल्य सूची को स्टोर कर सकते हैं और इसे केवल पढ़ने के लिए बना सकते हैं।

2

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

यदि पैट्रिक मैकडॉनल्ड्स का समाधान एक्सेल के दूसरे उदाहरण को शुरू करने के ऊपरी हिस्से के कारण बहुत बोझिल है, तो मुझे पता चला कि सबसे अच्छा समाधान यह है कि खुली कार्यपुस्तिका मूल विंडो को फिर से सक्रिय करके दिखाई दे रही है संभव के रूप में जल्दी से:

Dim TempWkBk As Workbook 
Dim CurrentWin As Window 

Set CurrentWin = ActiveWindow 
Set TempWkBk = Workbooks.Open(SomeFilePath) 
CurrentWin.Activate  'Allows only a VERY brief flash of the opened workbook 
TempWkBk.Windows(1).Visible = False 'Only necessary if you also need to prevent 
            'the user from manually accessing the opened 
            'workbook before it is closed. 

'Operate on the new workbook, which is not visible to the user, then close it... 
+0

आपको 'ActiveWindow' के साथ कार्रवाइयों की आवश्यकता क्यों है? मुझे लगता है कि खोले जाने के बाद ही कार्यपुस्तिका खिड़की को छिपाना एक ही प्रभाव है – Winand

3

एक बहुत सरल दृष्टिकोण है कि सक्रिय विंडो से छेड़छाड़ को शामिल नहीं करता:

Dim wb As Workbook 
Set wb = Workbooks.Open("workbook.xlsx") 
wb.Windows(1).Visible = False 

मैं क्या कार्यपुस्तिका पर Windows सूचकांक बता सकते हैं हमेशा 1 होना चाहिए। अगर किसी को किसी भी दौड़ की स्थिति के बारे में पता है जो इस असत्य को बनाएगा तो कृपया मुझे बताएं।

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