مشكلة فتح excel 2007 في مثيل جديد باستخدام VBA (باستخدام OLE و لا بد كائن الإطار)

StackOverflow https://stackoverflow.com/questions/839243

  •  22-07-2019
  •  | 
  •  

سؤال

لدي مشكلة إنشاء مثيل جديد من excel 2007 باستخدام VBA (من Access 2002).

في البداية لقد أسأت فهم المشكلة أكثر تعقيدا مما كنت اعتقد.

Set myXL = CreateObject("Excel.Application")

يخلق العمليات الجديدة (اعتقد انها لم) ، ولكن لا يزال شيء غريب يحدث.يمكنني استخدام OLE لتخزين ملفات Excel في SQL Server زرع قاعدة البيانات.

هذا هو وظيفة حدود ملف excel إلى شكل:

Public Function OpenExcelObjFrame() As BoundObjectFrame
    Dim myXL As Object

    Set myXL = CreateObject("Excel.Application") '#1

    Set gTempWorkbook = myXL.Workbooks.Add
    myXL.Visible = True               '#2

    DoCmd.OpenForm "Excel_OBJ"
    Forms("Excel_OBJ").Visible = False
    Forms("Excel_OBJ").RecordSource = "SELECT Excel_File FROM Excel_File_Obj;"
    Set OpenExcelObjFrame = Forms("Excel_OBJ").Excel_File
End Function

السياق:

Dim tExcelObjFrame As BoundObjectFrame
Set tExcelObjFrame = OpenExcelObjFrame()

tExcelObjFrame.Verb = acOLEVerbOpen
tExcelObjFrame.Action = acOLEActivate '#3

الإعلان 1 2 عملية excel.exe يبدأ

الإعلان 2 إضافة هذا السطر إلى التحقق من ما يحدث 2nd عملية

الإعلان 3 أوله حدود الملف إلى القائمة excel سبيل المثال ، 2 عملية قتل هنا :/

وبالتالي فإن المشكلة هي:

  1. لماذا tExcelObjFrame.العمل = acOLEActivate يقتل 2 عملية

  2. كيفية فرض الكائن الإطار لتفعيل ملف excel في 2nd عملية

تحرير

لقد وجدت تفسير جزئي هنا (مع عدم وجود حل واضح):

http://www.xtremevbtalk.com/showthread.php?t=292170

  1. إذا لا مثيل من Excel قيد التشغيل ، OLE يخلق مثيل من Excel عند الوصول إلى الكائن ، إما مباشرة أو من خلال programmation.
  2. إذا مثيل من Excel قيد التشغيل ، ثم وهذا هو المثال الذي يستخدم من قبل كائن OLE.

المشكلة هي أنه كائن OLE يختار الخطأ excel سبيل المثال.السؤال هو إذا كان هناك طريقة نقطة أوله إلى نسخة معينة.

نفس المشكلة الموضحة هنا (لا يوجد حل معين):

http://groups.google.com/group/microsoft.public.win32.programmer.ole/browse_thread/thread/9c4cde2a79453037

هل كانت مفيدة؟

المحلول

تحديث:
كنت أحاول الإتصال بك التعليمات البرمجية الموجودة على محطة العمل:

Set myXL = CreateObject("Excel.Application")

ويبدو أن يعمل كما كنت طالبا.
لقد كانت عملية واحدة مفتوحة ، ثم تشغيل هذا الخط ويخلق عملية أخرى.

لقد تم التحقيق أبعد قليلا و اتضح أن هذا هو قليلا من شاءت من Excel 2007.
كل شيء كنت أنظر يؤدي بي إلى ويندوز نوع الملف (انتقل الحق إلى أسفل) أو التسجيل الخارقة, التي هي في الأساس تغيير نفس الشيء في هذه الحالة.

وأنا أعلم أن في VBA يمكنك اللعب مع مفاتيح التسجيل مع CreateNewKey و SetKeyValue, ولكن لست متأكدا من أن كنت تريد أن تفعل ذلك.

نصائح أخرى

Sub New_Excel()

'Create a Microsoft Excel instance via code using late binding. (No references required)

Dim xlApp As Object

Dim wbExcel As Object

'Create a new instance of Excel

Set xlApp = CreateObject("Excel.Application")

'Open workbook

Set wbExcel = xlApp.Workbooks.Open("Book1")  'or you may place here the complete name and path of the file you want to open upon the creation of the new instance

'Set the instance of Excel visible. (It's been hiding until now)

xlApp.visible = True

'Release the workbook and application objects to free up memory

Set wbExcel = Nothing

Set xlApp = Nothing

End Sub

لدي مشاكل مماثلة فقط عند محاولة فتح عدة مصنفات في الفرد Excel 2007 الحالات - في Excel 2003 وهذا عمل جيد ولكن الآن أنها كلها مفتوحة في نفس الحالة.

أنا لا أعرف إذا كان هذا سوف يحل المشكلة أيضا ، ولكن أنا ثابت عليه (أو جعلت من العمل الطريقة التي أردت!) بقول Excel عدم استخدام DDE (خيارات متقدمة, العامة, تجاهل التطبيقات الأخرى التي تستخدم DDE).ملاحظة إذا قمت بذلك سوف تحتاج إلى تغيير جميع أنواع الملفات في مستكشف أن بدء تشغيل Excel كما أنها استخدام DDE افتراضيا - تعديل خيارات الملف قم بإلغاء تحديد "استخدام DDE" و إضافة "%1" إلى نهاية سطر الأوامر.

(في الواقع, أعتقد أن هذا قد يجيب على تعليق من اندي الجواب ، حيث واحد فقط Excel سبيل المثال كان يجري إنشاؤها ، ولكن ليس بالضرورة مساعدة في السؤال الأصلي ، حيث مثيلات متعددة هي فتحت)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top