Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Tweede map openen via VBA  (gelezen 5703 keer)

0 leden en 1 gast bekijken dit topic.

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Tweede map openen via VBA
« Gepost op: 09 mei 2007, 15:04:11 »
Hoi,

Ik wil een map openen in mijn code, maar als die al open staat, krijg je iedere keer een foutmelding dat deze map reeds geopend is, en de rest van de instructies wordt niet meer uitgevoerd.

iemand een ideetje hoe ik deze foutmeldingen kan elimineren?

spyder
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Tweede map openen via VBA
« Reactie #1 Gepost op: 09 mei 2007, 18:23:38 »
Spyder, Ik dacht dat er een IsOpen functie standaard in VBA Excel zat... Helaas... :'(

Toch maar ff voor je op het net gezocht, en de volgende leuke functie gevonden.The function below can be used to determine if a workbook is open or not:
Function WorkbookOpen(WorkBookName As String) As Boolean
' returns TRUE if the workbook is open
    WorkbookOpen = False
    On Error GoTo WorkBookNotOpen
    If Len(Application.WorkBooks(WorkBookName).Name) > 0 Then
        WorkbookOpen = True
        Exit Function
    End If
WorkBookNotOpen:
End Function

Example:
If Not WorkbookOpen("MyWorkbookName.xls") Then
    Workbooks.Open "MyWorkbookName.xls"
End If
(broninformatie: exeltip.com)

Ik hoop dat je hier iets mee kan. Je kan dus testen of het bestand openstaat. Zo ja, sla het stukje code over die zorgt voor het openen van het bewuste bestand, Zo nee, laat het bestand dan openen.

Groet, Leo
______________________________

Groet, Leo

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Tweede map openen via VBA
« Reactie #2 Gepost op: 09 mei 2007, 18:41:28 »
Spyder, wat voor coderegel gebruik je dan? Als ik deze uittest    Workbooks.Open Filename:="[je bestandsnaam].xls"...dan krijg ik geen enkele foutmelding. Het maakt Excel dan duidelijk niet uit of het bestand openstaat of niet. Staat tie open, dan gaat de code gewoon door. Is het bestand nog gesloten, wordt die met deze coderegel geopend...

Groet, Leo
______________________________

Groet, Leo

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: Tweede map openen via VBA
« Reactie #3 Gepost op: 09 mei 2007, 19:49:53 »
Hoi Leo,

Ik vind het ook straf. :-[

Ik voer zojuist de volgende code uit (dit is ook ook de code die me eerder de foutmelding bezorgde),
Workbooks.Open ("C:\Documents and Settings\Danny\Bureaublad\Bestelbon\Bonnummer.xls")

  en raad eens?? ??? ???

Geen enkele foutmelding. :-[ :-[
Ik heb ook geen verklaring waarom het nu wel lukt, en daarstraks niet.  :(

Ik ga het dan voorlopig zonder die extra code proberen, en als ik die melding terug krijg laat ik het je weten. ;)

spyder
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Tweede map openen via VBA
« Reactie #4 Gepost op: 09 mei 2007, 22:16:48 »
Hi, mensen,

De goedkoopste oplossing is "displayalerts" uitzetten (en weer aanzetten !!!) Daar komen we aan het einde op terug...
Het hangt er natuurlijk van af wat je wil doen. Heeft het enig belang dat wijzigingen opgeslagen worden, dan moet je anders te werk gaan.

De elegantste oplossing is toch een functie zoals Leo van het net haalde.
Zo doe ik het bijvoorbeeld
Private Function WorkbookIsOpen(wbname) As Boolean
    Dim x As Workbook
    On Error Resume Next
    Set x = Workbooks(wbname)
    WorkbookIsOpen = Err = 0
End Function
testen met
Sub test()
MsgBox WorkbookIsOpen("map1.xls")
End Sub

Nu de reden waarom je de ene keer wel de melding krijgt en de andere keer niet. Zolang je niets wijzigt is er geen vuiltje aan de lucht, een waarschuwing is dan overbodig. Maar wijzig je in tussentijd wel wat ... Paar voorbeeldjes:
Option Explicit

Sub test1()
'no problem !
Dim WbFullName As String

WbFullName = "C:\windows\desktop\test.xls"

Workbooks.Open WbFullName
Workbooks.Open WbFullName

End Sub

Sub test2()
'TROUBLE !!
Dim WbFullName As String

WbFullName = "C:\windows\desktop\test.xls"

Workbooks.Open WbFullName
Range("A1") = 123456
Workbooks.Open WbFullName

End Sub

Sub test3()
'NO problem
Dim WbFullName As String

WbFullName = "C:\windows\desktop\test.xls"

Workbooks.Open WbFullName
Range("A1") = 123456

Application.DisplayAlerts = False
Workbooks.Open WbFullName
Application.DisplayAlerts = True

End Sub
beste groeten,
Erik

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: Tweede map openen via VBA
« Reactie #5 Gepost op: 09 mei 2007, 23:31:08 »
Hoi Erik en Leo,


Nu de reden waarom je de ene keer wel de melding krijgt en de andere keer niet. Zolang je niets wijzigt is er geen vuiltje aan de lucht, een waarschuwing is dan overbodig. Maar wijzig je in tussentijd wel wat ... Paar voorbeeldjes:
Door te spelen met die code (en tot vervelens toe alles stap voor stap uit te voeren :'()was ik hier  ook zonet tot eigen scha en schande achter gekomen :-[
Want nu het een "beetje foutvrij" is, lukt het allemaal zoals ik het in gedachten had (wat natuurlijk niet wil zeggen dat het perfect is ;D)

Ik ga jullie code zeker nog uittesten, (foutmeldingen kan je mijns insziens het beste voorkomen) maar dat zal iets voor het weekend zijn.   ;)

Alvast hartelijk bedankt. :)
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Tweede map openen via VBA
« Reactie #6 Gepost op: 10 mei 2007, 10:07:24 »
Citaat
foutmeldingen kan je mijns insziens het beste voorkomen
Dat is inderdaad duidelijk. Niets zo vervelend als "druk OK om het proces af te sluiten". Dikwijls heeft dan een deel van de (minder gezonde) code wijzigingen aangebracht, zonder de zaak te kunnen afmaken.

We zorgen dus zeker voor 2 dingen.
1. fouten "behandelen"
2. handelingen op de werkbladen "bundelen"

1. "behandelen"
De gemakkelijkste - maar wel meest naïeve - is het permanent inschakelen van "kijk maar de andere kant op en loop door", zoals met de lijn
On Error Resume NextAlles gaat dan "prima", zelfs als alles misloopt  :( ??? In bepaalde "loops" kan dat goed zijn.
NB: bij "End Sub" of "End Function" houdt de werking van "On Error" op, dus in de bovenstaande voorbeelden is er geen probleem
In het algemeen moeten we er echter voor zorgen fouten "gericht" te onderscheppen. Je checkt iets via een functie: dat is meestal checken of bepaalde objecten of data "bestaan" ("hebben we al een blad met die naam?") of een bepaalde inhoud hebben. Naargelang "waar" of "onwaar" gaat de code de ene of de andere kant uit en vraagt eventueel de gebruiker om iets te beslissen.
2. "bundelen"
Je wil absoluut vermijden dat er iets fataals gebeurt, wanneer je code al een deel van de handelingen heeft verricht. Bij grotere operaties kunnen we de gebruiker vragen of hij het goed vindt dat er "gesaved" wordt. Dan gaan we zoveel mogelijk "in memory" uitrekenen en pas op het einde de hele zaak in 1 keer naar de werkmap schrijven.* Als er onderweg iets fout loopt, zelfs iets wat we echt niet voorzien hadden (een echte bug dus) staat ons project nog netjes op het scherm.

*Deze aanpak laat code ook sneller verlopen.

Hmm, misschien toch maar eens een boek schrijven.  :)

beste groeten,
Erik

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: Tweede map openen via VBA
« Reactie #7 Gepost op: 10 mei 2007, 11:18:59 »
Hmm, misschien toch maar eens een boek schrijven.  :)
Wanneer breng je hem uit?  ;D
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Tweede map openen via VBA
« Reactie #8 Gepost op: 10 mei 2007, 11:32:53 »
Wanneer breng je hem uit?  ;D
Als ik ooit eens mijn PM, die je nog steeds tegoed hebt, beëindig, zal ik je daarover misschien ook wat schrijven :-)

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Tweede map openen via VBA
« Reactie #9 Gepost op: 11 mei 2007, 13:46:46 »
Erik, óók ik zal ff inhaken op...
Citaat
Hmm, misschien toch maar eens een boek schrijven
Wat denk je van de werktitel 'Erik van Geit Excelleert' en als ondertitel 'hoe moeilijke Excel vraagstukken makkelijk gemaakt worden'... ;D Ik wens je alvast alle succes, en we horen 't wel wanneer die bij de boekhandel ligt!
(want waar rook is, is vuur... ;))

Dan mijn visie over het 'On Error Resume Next'... Ik wil die nog wel 'ns inzetten als ik weet dat er op een bepaald punt een fout door een gebruiker gemaakt kan worden omdat tie 't een of ander niet gedaan heeft waardoor er een officiele Excelfoutmelding ontstaat. Mijn 'next' is in dat geval een 'if' waarin ik het 'err.number' afvang. Maar ik ben het met je eens dat als je programmeerkennis zo groot is dat je altijd alles netjes kan afvangen, dat dat een stuk beter is!

Trouwens, bedankt nog voor je uitleg over het feit waarom de code vastloopt bij het openen van reeds geopend workbook waar je iets in hebt veranderd. (we leren toch véél van je! Prettig!)

Groet, Leo
______________________________

Groet, Leo

 


www.combell.com