मेरे पास एक एक्सेल मैक्रो है जिसे एमएस प्रोजेक्ट खोलना है और कुछ कस्टम फ़ील्ड में बदलाव करना है और फिर इसे फिर से बंद करना है। एक्सेल और प्रोजेक्ट दोनों संस्करण 2010 हैं, और प्रोजेक्ट एमएस प्रोजेक्ट सर्वर 2010 पर संग्रहीत है।

जब मैं एमएस प्रोजेक्ट को मैन्युअल रूप से खोलता हूं और फिर वीबीए के साथ इसका पता लगाता हूं, तो सब कुछ काम करता है। लेकिन जब मैं प्रोजेक्ट का एक नया उदाहरण खोलने के लिए वीबीए का उपयोग करता हूं (क्योंकि मैंने मैन्युअल रूप से एमएस प्रोजेक्ट नहीं खोला है), यह एक त्रुटि फेंकता है:

enter image description here

यहाँ कोड के दो संस्करण हैं:

Sub open_project_with_error()

    Dim projapp As MSProject.Application, prj As Project
    Set projapp = New MSProject.Application
    projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
    Set prj = Projects("Name of my project")
  ' Do more things...
End Sub

Sub open_project_without_error()

    ' Manually open MS Project application before running this VBA
    Dim projapp As MSProject.Application, prj As Project
    Set projapp = GetObject(, "MSProject.Application")
    projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
    Set prj = Projects("Name of my project")
  ' Do more things...
End Sub

स्वाभाविक रूप से, मुझे उम्मीद थी कि समस्या New MSProject.Application कथन के साथ थी। हालाँकि, यह उप पूरी तरह से अपेक्षित रूप से काम करता है:

Sub open_project_and_display_about()

    Dim projapp As MSProject.Application, prj As Project
    Set projapp = New MSProject.Application
    Debug.Print projapp.About()

End Sub

जिसका अर्थ है कि त्रुटि केवल New MSProject.Application और New MSProject.Application के संयोजन से शुरू होती है।

इसे हल करने का कोई तरीका?

0
Greg Viers 17 जुलाई 2018, 16:12
क्या यह प्रत्येक प्रोजेक्ट सर्वर फ़ाइल के साथ होता है? स्थानीय रूप से सहेजी गई .mpp फ़ाइलों के बारे में क्या?
 – 
Rachel Hettinger
17 जुलाई 2018, 21:32
हाँ सभी सर्वर फ़ाइलें। नहीं, स्थानीय .mpp फ़ाइलें प्रभावित नहीं होती हैं।
 – 
Greg Viers
18 जुलाई 2018, 20:33

2 जवाब

कोशिश करने के लिए यहां कुछ सुझाव दिए गए हैं:

  1. डीबग समस्याओं में सहायता के लिए projapp.Visible = True सेट करें।
  2. CreateObject खोलता है और किसी ऑब्जेक्ट का संदर्भ देता है, इसलिए प्रोजेक्ट को मैन्युअल रूप से खोलने और फिर GetObject जो पहले से खुली हुई वस्तु का संदर्भ देता है।
  3. MSProject ऑब्जेक्ट्स के लिए योग्य संदर्भ, उदा। Dim prj as MSProject.Project और Set prj = projapp.Projects(....

FWIW मैं प्रोजेक्ट सर्वर से प्रोजेक्ट प्रो 2013 ओपनिंग फाइल्स के साथ इस मुद्दे को दोहराने में सक्षम नहीं हूं।

0
Rachel Hettinger 17 जुलाई 2018, 18:22
1 के संबंध में, मैंने उस पंक्ति को जोड़ने में कोई परिवर्तन नहीं देखा।
 – 
Greg Viers
17 जुलाई 2018, 20:50
मैंने नए के बजाय CreateObject का उपयोग करने के लिए कोड को फिर से लिखा, और वही त्रुटि मिली।
 – 
Greg Viers
17 जुलाई 2018, 20:51
मैंने बिना किसी बदलाव के संदर्भों को योग्य बनाने के लिए (3) में आपके द्वारा उल्लिखित परिवर्तन किया है।
 – 
Greg Viers
17 जुलाई 2018, 20:51
जब तक कोई पॉप-अप बॉक्स नहीं होता है जब आप प्रोजेक्ट को मैन्युअल रूप से खोलते हैं (उदाहरण के लिए प्रोफ़ाइल का चयन करना) CreateObject का उपयोग करने और मैन्युअल रूप से खोलने और GetObject का उपयोग करने के बीच एकमात्र अंतर समय प्रतीत होता है; इसलिए फ़ाइल को खोलने का प्रयास करने से पहले एक या दो सेकंड को रोकने के लिए एक्सेल की प्रतीक्षा विधि का उपयोग करने का प्रयास करें।
 – 
Rachel Hettinger
17 जुलाई 2018, 21:31
मैंने 20 सेकंड का इंतजार जोड़ा - योजना के खुलने के बाद से लगभग 4 से अधिक लंबा होना चाहिए। वही त्रुटि।
 – 
Greg Viers
17 जुलाई 2018, 21:35

मैं इसका उपयोग एक्सेल से एमएसपी फाइलों को स्वचालित रूप से खोलने के लिए करता हूं, यह जांचने के लिए कि एप्लिकेशन पहले से खुला है या नहीं

Function GetX(Str As String) As Object
    Dim app As Object
    On Error Resume Next

    Set app = GetObject(, Str)
    If Err.Number <> 0 Then
        Set app = CreateObject(Str)
        app.Visible = False
        app.Clear
    End If

    Set GetX = app
End Function

फिर मॉड्यूल में फ़ंक्शन को कॉल करें

Set ProjApp = GetX("MSProject.Application")
projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
Set prj = Projects("Name of my project")
0
Cyril GUICHARD 9 अगस्त 2018, 16:52