• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Userform - probleem indien excel reeds geopend

Status
Niet open voor verdere reacties.

bartverhulst

Gebruiker
Lid geworden
11 aug 2011
Berichten
16
Hallo,
Als ik mijn userform open als er reeds een sessie van excel open staat heeft dit tot resultaat dat alles verborgen wordt (Application.Visible = False). Bij het afsluiten van de userform wordt automatisch de toepassing excel gesloten dus ook de bestanden die reeds open stonden (ActiveWorkbook.Close SaveChanges:=True).

Is er een mogelijkheid om ofwel :
- de userform te openen in een tweede excel sessie (bij voorkeur)
- een controle te zetten bij het openen van de userform dat de andere excelbestanden eerst moeten afgeloten worden alvorens het userform te gebruiken.

Alvast bedankt voor jullie hulp
Bart
 
Ik weet dat je een tweede sessie kan starten buiten VBA, ik heb het echter nog nooit geprobeerd in Excel zelf.

optie twee kan je doen door de "workbooks" property een-voor-een te doorlopen. mogelijk heeft workbooks collectie ook een count optie.

Voor optie 1 zou ik dit proberen:

Code:
Sub openfile()
    Dim myExcel as object
    Dim myWorkbook as object
    Set myExcel = Application.CreateObject("Excel.Application")
    myExcel.Visible = True
    'myExcel.Documents.Open("deExcel.xls")
    myWorkbook = myExcel.workbooks.add
    myworkbook.sheets(1).cells(1,1).value = "test"
    myExcel.Close
End Sub

als het goed gaat blijft de origine excel behouden
 
Goedemorgen,
Ik heb deze code even uitgeprobeerd (geplaatst in de 'general' van de workbook) maar het wordt nog steeds geopend in de reeds open excel sessie. Misschien heb ik wel 2 stukken code hierin voor de opening van het workbook

Code:
Sub openfile()
    Dim myExcel As Object
    Dim myWorkbook As Object
    Set myExcel = Application.CreateObject("Excel.Application")
    myExcel.Visible = True
    'myExcel.Documents.Open("deExcel.xls")
    myWorkbook = myExcel.Workbooks.Add
    myWorkbook.Sheets(1).Cells(1, 1).Value = "test"
    myExcel.Close
End Sub

Private Sub Workbook_Open()
With ThisWorkbook
    If .ReadOnly Then
       MsgBox "Probeer later nog eens"
        .Application.Visible = False
        .Close
    Else
       Application.Visible = False
       Formnaam.Show
    End If
End With
End Sub


Mogelijk is dit een oorzaak dat het niet zou werken. Ik heb het ook uitgeprobeerd in een nieuw bestand maar dat werkt ook niet.
Alvast bedankt voor de hulp
Bart
 
Er zat nog een foutje in mijn code:

Code:
Sub openfile()
    Dim myExcel As Object
    Dim myWorkbook As Object
    Set myExcel = CreateObject("Excel.Application")
    myExcel.Visible = True
    'myExcel.Documents.Open("deExcel.xls")
    Set myWorkbook = myExcel.Workbooks.Add
    myWorkbook.Sheets(1).Cells(1, 1).Value = "test"
    myExcel.Quit
End Sub

Om deze code te laten werken moet je de code wel zelf actief aanroepen! Ik heb het nog even getest en het opent een nieuwe instance van excel. als de code excel.quit bereikt wordt de originele file niet afgesloten.

Zet deze code in een schoon werkboek, alt-F11 om naar vba te gaan. "insert" menu -> module. Vervolgens in de module deze code plakken. Vervolgens even de macro runnen vanuit VBA. Je zult zien dat er een nieuwe excel geopend wordt en vervolgens wordt excel weer afgesloten. na het afsluiten blijft je orginele excel intact
 
Laatst bewerkt:
Beste Wampier,
Ik heb je code even uitgeprobeerd maar het lukt niet zoals ik het zou willen (ofwel doe ik nog iets fout). Ik heb dus in een nieuwe excel bestand deze code geplaatst in een module + in ThisWorkbook deze module aangeroepen om uit te voeren
Code:
Private Sub Workbook_Open()
  openfile
End Sub

Als ik nu een ander excel bestand open en dan dit nieuw bestand open dan opent er zich wel een nieuwe sessie die echter terug wordt afgesloten maar de 2 bestanden zijn geopend in dezelfde sessie en niet beide in een aparte sessie.

Kan je nog eens helpen?
Alvast bedankt
Bart
 
Dat klopt. OP deze manier triggered mijn routine pas als er in je eerste sessie een nieuw bestand wordt geopend.

Code:
Sessie 1:
hoofbestand
tweede bestand -> trigger sub 

sessie 2:
getriggered vanuit tweede bestand sessie 1
nieuwe file
meteen weer afgesloten.
sessie 2 eindigt

na deze reeks eindig je dus met "hoofbestand" en "tweede bestand" in sessie 1. Indien je "tweede bestand" in sessie twee wil, moet je mijn code dus op een andere manier aanroepen en in mijn code "tweede bestand" openen. Dat kan door de line die nu geremarked is (met het "open" commando) te veranderen zodat het "tweede bestand" aanroept.
 
Ik heb je voorstel geprobeerd maar dan krijg ik een run time error '438' Object doesn't support this property or method'.

Als ik dan op 'debug' klik plaatst hij zich op de lijn
Code:
myExcel.Documents.Open ("c:\data\bestand.xls")
.
 
Oeps, dat is de WORD variant. probeer myExcel.workbooks.open

mijn fout
 
Wampier,
Ik heb nu weer wat tijd om mij hiermee bezig te houden.

Ik heb dus een apart excel bestand gemaakt (met de naam test.xls) met een module met volgende code :

Code:
Sub openfile()
    Dim myExcel As Object
    Dim myWorkbook As Object
    Set myExcel = CreateObject("Excel.Application")
    myExcel.Visible = True
    myExcel.Workbooks.Open ("c:\data\ConventiesConventions.xls")
    Set myWorkbook = myExcel.Workbooks.Add
    myWorkbook.Sheets(1).Cells(1, 1).Value = "test"
    ActiveWorkbook.Close SaveChanges:=True
    myExcel.Quit
End Sub

Bij het openen van dit bestand moet automatisch het bestand ConventiesConventions.xls (dit is een userform die geopend wordt waarin de toepassing niet zichtbaar is) geopend worden in een nieuwe sessie. Ik heb nu het probleem dat de code die volgt op 'myExcel.Workbooks.Open ("c:\data\ConventiesConventions.xls")' niet meer wordt uitgevoerd. Ik heb dus in mijn bestand ConventiesConventions.xls volgende code gezet
Code:
Workbooks("test.xls").Close savechanges:=False
.

Resultaat is dat er effectie een 2de sessie geopend wordt en dat mijn userform wel werkt maar dat 'test.xls' niet sluit, dat het openen lang duurt en dat ik volgende boodschap krijg : Microsoft offce excel is waiting for another application to complete an OLE action' met een OK knop. Zelf met het op de ok knop te drukken sluit het bestand niet.

Heb je nog even tijd om hiernaar te kijken?
Alvast bedankt
Bart
 
Wat je moet doen is een referentie nemen terwijl je het workbook opent

Code:
Sub test()
Set myx = CreateObject("Excel.Application")
Set myb = myx.Workbooks.Open("c:\data\ConventiesConventions.xls")
myx.Visible = True
myb.Sheets(1).Cells(1, 1).Value = "test"
myb.Close
myx.Quit
End Sub
Indien er zich een automacro bevind in je file wordt die eerst volledig afgehandeld voordat deze macro verder gaat. wat er nu zal gebeuren als je de macro runt is dat je conventies file wordt geopend, daar kun je dingen doen, of besturen vanuit deze file.

In dit geval wordt de file geopend, cell A1 van het eerste blad aangepast en vervolgens de excel file weer gesloten. Wat er nu verder moet gebeuren is afhankelijk van hoeveel interactie tussen beide excel files je wil. In principe is de file waaruit deze macro wordt aangeroepen de "baas". Als je interactie vanuit je geopende file terug wil naar de hoofdfile wordt het iets ingewikkelder.

*edit* Overigens sluit inderdaad test.xls niet. Je originele vraag was hoe je een tweede sessie kon maken zodat andere files niet hoeven te sluiten. je kunt nu ConventiesConventions.xls gebruiken en sluiten zonder dat andere excel files sluiten.
 
Laatst bewerkt:
Ik denk effectief dat het te moeilijk wordt zeker voor mij als beginneling.
Is er eventueel een mogelijkheid om bij de opening van mijn userform na te gaan of de toepassing excel reeds geopend is en dan een foutboodschap te zetten dat deze eerst moet gesloten worden. Ik heb nu volgende code bij de opening van mijn userform :

Code:
Private Sub Workbook_Open()
  With ThisWorkbook
    If .ReadOnly Then
       MsgBox "andere gebruiker - even wachten aub."
        .Application.Visible = False
        .Close
   Else
       Application.Visible = False
       FormConventiesTaal.Show
   End If
End With
End Sub

Heel erg bedankt voor de hulp
Bart
 
binnen de zelfde instance kun je "workbooks" tellen. als er meer dan 1 workbook is is er een andere workbook open
 
Ik heb voor de code nog wat op internet zitten zoeken en ik heb het volgende gevonden

http://www.vbforums.com/archive/index.php/t-285958.html

Voor wat betreft het openen in een nieuwe excel sessie is een collega met volgende oplossing gekomen. Via een shortcut eerst excel openen en dan het gewenste bestand met volgend pad :
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" / c:\folder\bestand.xls

Bedankt voor de hulp
Bart
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan