• 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.

Opgelost Controleren op meer geopende documenten

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

ramons1986

Gebruiker
Lid geworden
19 jul 2013
Berichten
38
Goedemiddag,

Ik draai een complete offerte, order en facturatie in Excel en haal via een macro info op uit een extern werkblad en in datzelfde werkblad plaats ik weer info uit het blad waarin ik op dat moment werk. Om dit goed te laten verlopen is het belangrijk dat er op dat moment geen ander Excel document geopend is omdat de betreffende info dan in een verkeerd document geplaatst kan worden. Nu is mijn vraag of er een formule is die weergeeft of er meerdere Excel documenten geopend zijn? Als deze er is kan ik op die manier namelijk de macro blokken tot een ander bestand gesloten is.

I.v.m. de privacy kan ik dit bestand helaas niet online plaatsen, echter gaat het ook enkel om de vraag of er een formule bestaat die weergeeft of er meerdere Excel documenten geopend zijn.

Bij voorbaat dank voor het reageren.
 
Als je toch al met een macro werkt:
Code:
Sub Test()
    For Each wb In Workbooks
        lijst = lijst & wb.Name & vbCrLf
    Next
    MsgBox "Aantal geopende documenten : " & Workbooks.Count & vbCrLf & lijst
End Sub
 
Om dit goed te laten verlopen is het belangrijk dat er op dat moment geen ander Excel document geopend is omdat de betreffende info dan in een verkeerd document geplaatst kan worden.

Als je het correct programmeert kan dat niet gebeuren. De controle waarom je vraagt is overbodig.
 
Als je het correct programmeert kan dat niet gebeuren. De controle waarom je vraagt is overbodig.
Ik denk dat dat niet klopt omdat ik steeds met gewijzigde bestandnamen te maken heb, daardoor kan ik dit m.i. niet in de macro opnemen. Of ik weet wellicht niet hoe dat geprogrammeerd kan worden.
 
Als je toch al met een macro werkt:
Code:
Sub Test()
    For Each wb In Workbooks
        lijst = lijst & wb.Name & vbCrLf
    Next
    MsgBox "Aantal geopende documenten : " & Workbooks.Count & vbCrLf & lijst
End Sub
Dank je we, op zich is dit al een mooie sap in de goeie richting echter is dit nog geen formule waarmee ik een macro kan tegenhouden, kan ik er ook een celwaarde aan hangen? Stel dat er 2 geopende documenten zijn, kan een cel dan '2' weergeven want dan kan ik de macro zo instellen dat als die celwaarde >=1 dat die dan niet doorgaat.
 
Ik denk dat dat niet klopt omdat ik steeds met gewijzigde bestandnamen te maken heb, daardoor kan ik dit m.i. niet in de macro opnemen. Of ik weet wellicht niet hoe dat geprogrammeerd kan worden.
Daarvoor helpt het plaatsen van je huidige code en een heldere beschrijving van de situatie waarin je werkt.
 
Daarvoor helpt het plaatsen van je huidige code en een heldere beschrijving van de situatie waarin je werkt.
Dat begrijp ik inderdaad maar omdat de documentnaam steeds wijzigt dacht ik dat een celwaarde makkelijker as, daarom vroeg ik eigenlijk specifiek daarnaar, maar hierbij dan alsnog de code die het documentnummer ophaalt en waarin je ziet dat die na het openen van de nummerijst terug gaat naar Workbook 1, hier is voor gekozen omdat de naam dus steeds wijzigt. Na het opslaan heet dit bestandje Pietje 101, en als er hier een bevestiging van wordt gemaakt heet deze Pietje 201,101.

If Range("B21") = "Offerte nr:" Then

Workbooks.Open Filename:="\\Data\AAA KLANTBESTANDEN\1AA Nummerlijst.xlsm"
Sheets("OFFERTE").Select

Range("AC1").Select
Selection.Copy
Workbooks(1).Activate
Range("C21").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Workbooks("1AA Nummerlijst.xlsm").Activate
Application.Run "'1AA Nummerlijst.xlsm'!Vind_off_nr"
Workbooks(1).Activate

Range("G16").Select
ActiveCell.FormulaR1C1 = "=R[-1]C"
Range("H16").Select
ActiveCell.FormulaR1C1 = "=R[-4]C[4]"
Range("G16:H16").Select
Selection.Copy
Workbooks("1AA Nummerlijst.xlsm").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

ActiveWorkbook.Save
ActiveWorkbook.Close

Range("G16:H16").Select
Selection.ClearContents

End If
 
Je hoeft niet steeds te switchen van workbook en te activeren.
Het boek waar de code staat heet "Thisworkbook", en de andere heeft een naam.
Dus 'Activate' en 'Select' zijn volledig overbodig.
 
Waarom zet je VBA code niet tussen code tags; je komt hier al 11 jaar.

Kan ook zó:
CSS:
If Sheets(1).Range("B21") = "Offerte nr:" Then
 With GetObject("\\Data\AAA KLANTBESTANDEN\1AA Nummerlijst.xlsm")
    ThisWorkbook.Sheet1.Cells(21, 3) = .Sheets("offerte").Cells(1, 29).Value
    .Application.Run "'1AA Nummerlijst.xlsm'!Vind_off_nr"
    .Sheets(1).Cells(1).Resize(, 2) = Array(ThisWorkbook.Sheets(1).Cells(15, 6), ThisWorkbook.Sheets(1).Cells(12, 4))
    .Close -1
  End With
End If

Omdat ik niet weet waar de macro 'vind_off_nr' eindigt weet ik niet waar de gegevens van de volgende regel gezet moeten worden.
Het is overigens niet handig een macro in een ander Excelbestand te laten lopen; dat kan veel eenvoudiger in je eigen macro gedaan worden.
 
Ik kom hier inderdaad al 11 jaar maar ik ben geen programmeur, ik ben maar een gewone commerciële medewerker die ook bovengemiddeld goed overweg kan met Excel, echter ben ik absoluut geen prof. En hoezeer ik jullie hulp oprecht waardeer, schiet deze na het plaatsen van de code zijn doel voorbij, het optimaliseren van een goed werkende code was niet het doel, ik ben echt enkel en alleen zoekende naar een oplossing die voorkomt dat wanneer er meerdere documenten geopend zijn dat dan de betreffende macro wordt uitgevoerd. Ik hoop dat iemand hiermee zou kunnen helpen.
 
Waarom zet je VBA code niet tussen code tags; je komt hier al 11 jaar.

Kan ook zó:
CSS:
If Sheets(1).Range("B21") = "Offerte nr:" Then
 With GetObject("\\Data\AAA KLANTBESTANDEN\1AA Nummerlijst.xlsm")
    ThisWorkbook.Sheet1.Cells(21, 3) = .Sheets("offerte").Cells(1, 29).Value
    .Application.Run "'1AA Nummerlijst.xlsm'!Vind_off_nr"
    .Sheets(1).Cells(1).Resize(, 2) = Array(ThisWorkbook.Sheets(1).Cells(15, 6), ThisWorkbook.Sheets(1).Cells(12, 4))
    .Close -1
  End With
End If

Omdat ik niet weet waar de macro 'vind_off_nr' eindigt weet ik niet waar de gegevens van de volgende regel gezet moeten worden.
Het is overigens niet handig een macro in een ander Excelbestand te laten lopen; dat kan veel eenvoudiger in je eigen macro gedaan worden.
Bedankt voor de reactie, echter wat is het voordeel om de code zo uit te voeren los van het feit dat dit compacter is?
 
Het juiste gebruik van dit forum heeft niets met je funktie te maken en je hoeft er al helemaal niet voor te kunnen programmeren..

Omdat gegevens dan altijd in het juiste bestand worden weggeschreven.

Je hebt de vraag over de inhoud van de macro 'vind_off_nr' nog niet beantwoord.
 
Het juiste gebruik van dit forum heeft niets met je funktie te maken en je hoeft er al helemaal niet voor te kunnen programmeren..

Omdat gegevens dan altijd in het juiste bestand worden weggeschreven.

Je hebt de vraag over de inhoud van de macro 'vind_off_nr' nog niet beantwoord.
wordt een raar gesprek zo, je antwoorden hebben ook niks met mijn vraag te maken en nogmaals ik ben geen professioneel programmeur. Ik vraag enkel om een formule en krijg allemaal uitleg over codes waar ik niet om vraag, gelieve bij de vraag te blijven of niet te antwoorden want dit helpt me helemaal niet. Waarom wordt een eenvoudige vraag zo onnodig zo moeilijk gemaakt?!
 
Laatst bewerkt:
Met een kleine wijziging in je bestaande macro, die inderdaad wat netter en korter kan, maar "if it ain't broken don't fix it":
Vervang
Code:
Workbooks(1)
door
Code:
ThisWorkbook
Daarmee bereik je wat je wilt, de wijzigingen komen niet terecht in een willekeurig ander document dat toevallig openstaat.
 
Met een kleine wijziging in je bestaande macro, die inderdaad wat netter en korter kan, maar "if it ain't broken don't fix it":
Vervang
Code:
Workbooks(1)
door
Code:
ThisWorkbook
Daarmee bereik je wat je wilt, de wijzigingen komen niet terecht in een willekeurig ander document dat toevallig openstaat.
Ontzettend bedankt!! Dit was inderdaad alles wat ik zocht, nog makkelijker!

Opgelost!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan