Trying to open the workbook in separate instance

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

Not sure whether I am doing it right. Please advise me.

I am trying to open one workbook in new instance. But some where it is not working fine. Below is the code for your reference. I am trying to open the form named 'Loginfrm' in the new instance.

Suppose if another workbook is already open then the current code freezes that workbook also. Ideally this should not be happening.

Private Sub Workbook_Open() Call New_Excel  Dim xlWrkBk As Excel.Workbook Dim xlApp As New Excel.Application  Set xlWrkBk = xlApp.ActiveWorkbook xlApp.Visible = True 'ThisWorkbook.Windows(1).Visible = False LoginFrm.Show  End Sub 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, 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 wbExcel = xlApp.Workbooks.Add    '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

回答1:

I am going to show you how to run a macro in another instance of excel ,which in your case will display a UserForm1


1) Create a new workbook
2) Open the VBE (Visual Basic Editor) - ALT + F11
3) Insert new UserForm and Module (right click in the project explorer then Insert). Your screen should look similar to the below picture:



4) Add References for the Microsoft Visual Basic for Applications Extensibility 5.3
note: I have this already in my code, but you have to make sure you have properly attached it

5) In the newly created Module1 insert the code

Sub Main()     AddReferences     AddComponent "UserForm1", "UserForm1.frm" End Sub  Private Sub AddReferences()     '   Name:            VBIDE     '   Description:     Microsoft Visual Basic for Applications Extensibility 5.3     '   GUID:            {0002E157-0000-0000-C000-000000000046}     '   Major:           5     '   Minor:           3     '   FullPath:        C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB     On Error Resume Next     ThisWorkbook.VBProject.References.AddFromGuid GUID:="{0002E157-0000-0000-C000-000000000046}", _                                                   Major:=5, Minor:=3 End Sub  Sub AddComponent(theComponent$, fileName$)      ' export     Application.VBE.ActiveVBProject.VBComponents(theComponent).Export ThisWorkbook.Path & "\" & fileName      Dim xApp As Excel.Application     Set xApp = New Excel.Application     xApp.Visible = True      Dim wb As Excel.Workbook     Set wb = xApp.Workbooks.Add      wb.VBProject.VBComponents.Import ThisWorkbook.Path & "\" & fileName      CreateAModule wb     xApp.Run "MacroToExecute"      xApp.DisplayAlerts = False     wb.Save     wb.Close     Set wb = Nothing     xApp.Quit     Set xApp = Nothing     Application.DisplayAlerts = True End Sub  Sub CreateAModule(ByRef wb As Workbook)      Dim VBProj As VBIDE.VBProject     Dim VBComp As VBIDE.vbComponent     Dim CodeMod As VBIDE.CodeModule      Set VBProj = wb.VBProject     Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)     Set CodeMod = VBComp.CodeModule      With CodeMod         .DeleteLines 1, .CountOfLines         .InsertLines 1, "Public Sub MacroToExecute()"         .InsertLines 2, "    UserForm1.Show"         .InsertLines 3, "End Sub"     End With End Sub


6) Now, run the Main Macro and you will be shown the Userform1



回答2:

I'm just a newbie, but this worked for me. This code appears to open your file in a new instance of Excel. Copy and paste this vba code into the ThisWorkBook object:

Option Explicit  Dim objExcel As Excel.Application  Dim FileName As String  Public Sub workbook_open()     FileName = ThisWorkbook.FullName     If vbReadOnly  0 Then         Exit Sub     Else         objExcel.Workbooks.Open FileName:=FileName         ThisWorkbook.Saved = True         ThisWorkbook.Close         objExcel.Quit     End If End Sub


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!