load macro

Status
Niet open voor verdere reacties.

flats

Gebruiker
Lid geworden
7 mei 2015
Berichten
171
Beste allemaal, Ik zoek mij te pletter maar geraak er niet uit, waarschijnlijk een kleine fout maar zie het niet.
De macro moet de gebruiker het “load” scherm tonen, dat is okee, kiest hij het bestand “machinelijst.xls , dan doet de macro wat hij moet doen.
Echter, selecteert men een bestand anders dan “machinelijst.xls” dan verschijnt MsgBox … niet en loopt het mis. Bedoeling is om bij het selecteren van een file die niet aan het gevraagde voldoet (machinelijst) de macro die MsgBox toont en de verkeerd gekozen file niet opent om vervolgens te stoppen.
Weet iemand raad ?
Hieronder de macro zoals die nu staat:
Sub refresh()
'
' refresh Macro
' De macro is opgenomen op 29/04/2018 door Fernand.
machinelijst = Application.GetOpenFilename(FileFilter:="Excel Files(machinelijst.xls),.xls", Title:="SELECTEER MACHINELIJST (bestand)")
Workbooks.Open (machinelijst)
If (machinelijst) = False Then
MsgBox "Gestopt omdat u de juiste file niet koos"
Else
Range("B3:F102").Select
Selection.Copy
Windows("aanmaak-versie-2018.xls").Activate
Sheets("Mach_list").Select
Range("B3").Select
ActiveSheet.Paste
Range("B3").Select
Sheets("HOME-BER").Select
Range("C2").Select
Windows("machinelijst.xls").Activate
Windows("machinelijst.xls").Close

End Sub
 
Maak er eens dit van:
Code:
Sub refresh()
[COLOR="#008000"]    '
    ' refresh Macro
    ' De macro is opgenomen op 29/04/2018 door Fernand.[/COLOR]
    machinelijst = Application.GetOpenFilename(FileFilter:="Excel Files(machinelijst.xls),.xls", Title:="SELECTEER MACHINELIJST (bestand)")
    If  machinelijst = False Then
        MsgBox "Gestopt omdat u de juiste file niet koos"
    Else
        Workbooks.Open (machinelijst)
        Range("B3:F102").Select
        Selection.Copy
        Windows("aanmaak-versie-2018.xls").Activate
        Sheets("Mach_list").Select
        Range("B3").Select
        ActiveSheet.Paste
        Range("B3").Select
        Sheets("HOME-BER").Select
        Range("C2").Select
        Windows("machinelijst.xls").Activate
        Windows("machinelijst.xls").Close
    End If
End Sub

Het gedeelte in de Else sectie kan overigens anders en veel netter.
 
Laatst bewerkt:
nog niet

Ook niet hoor, bij keuze van een bestand anders dan "machinelijst" komt de MsgBox niet te voorschijn en loopt de macro op fout bij "Windows("machinelijst.xls").Activate" wat normaal is, machinelijst.xls is niet geopend.
 
Ze moeten wel het juiste bestand kiezen uiteraard.
Je zal dus een controle moeten doen of dat wel het geval is, dat doe je nu niet.

Bijvoorbeeld zo:
Code:
Sub refresh()
[COLOR="#008000"]    '
    ' refresh Macro
    ' De macro is opgenomen op 29/04/2018 door Fernand.[/COLOR]
    machinelijst = Application.GetOpenFilename(FileFilter:="Excel Files(machinelijst.xls),.xls", Title:="SELECTEER MACHINELIJST (bestand)")
    If machinelijst = False [COLOR="#FF0000"]Or InStr("machinelijst", 1) = 0[/COLOR] Then
        MsgBox "Gestopt omdat u de juiste file niet koos"
    Else
        Workbooks.Open (machinelijst)
        Range("B3:F102").Select
        Selection.Copy
        Windows("aanmaak-versie-2018.xls").Activate
        Sheets("Mach_list").Select
        Range("B3").Select
        ActiveSheet.Paste
        Range("B3").Select
        Sheets("HOME-BER").Select
        Range("C2").Select
        Windows("machinelijst.xls").Activate
        Windows("machinelijst.xls").Close
    End If
End Sub
 
Laatst bewerkt:
exact

Yep, exact, dat is het gedeelte waar ik niet aan uit geraak of weet hoe dat moet.
Ga uw voorstel direct proberen he
 
Laatst bewerkt:
Zie m'n aanvulling in #4.
 
bijna

Komt al dichter, toont de MsgBox, maar ook bij keuze van het juiste bestand
 
Uit andere bron, deze macro toegestuurd gekregen en werkt, misschien interessant voor de leden hier, toch heel erg bedankt voor het helpen zoeken hoor. Ik ga proberen hierop verder te werken
Sub refresh2()
'
Dim strCheck As String

machinelijst = Application.GetOpenFilename(FileFilter:="Excel Files(machinelijst.xls),.xls", Title:="SELECTEER MACHINELIJST (bestand)")
strCheck = Dir(machinelijst, vbDirectory) 'strip directory from "machinelijst"

If strCheck <> "machinelijst.xls" Then
MsgBox "Gestopt omdat u de juiste file niet koos"
Else
Workbooks.Open (machinelijst)
Range("B3:F102").Select
Selection.Copy
Windows("aanmaak-versie-2018.xls").Activate
Sheets("Mach_list").Select
Range("B3").Select
ActiveSheet.Paste
Range("B3").Select
Sheets("HOME-BER").Select
Range("C2").Select
Windows("machinelijst.xls").Activate
Windows("machinelijst.xls").Close
End If

End Sub
 
Ik zat niet op te letten:

Code:
Sub refresh()
[COLOR="#008000"]    '
    ' refresh Macro
    ' De macro is opgenomen op 29/04/2018 door Fernand.[/COLOR]
    machinelijst = Application.GetOpenFilename(FileFilter:="Excel Files(machinelijst.xls),.xls", Title:="SELECTEER MACHINELIJST (bestand)")
    If TypeName(machinelijst) = "Boolean" Or InStr(1, machinelijst, "machinelijst") = 0 Then
        MsgBox "Gestopt omdat u de juiste file niet koos"
    Else
        Workbooks.Open (machinelijst)
        Range("B3:F102").Select
        Selection.Copy
        Windows("aanmaak-versie-2018.xls").Activate
        Sheets("Mach_list").Select
        Range("B3").Select
        ActiveSheet.Paste
        Range("B3").Select
        Sheets("HOME-BER").Select
        Range("C2").Select
        Windows("machinelijst.xls").Activate
        Windows("machinelijst.xls").Close
    End If
End Sub
 
Laatst bewerkt:
De oplossing in #8 gaat fout als er geen bestand wordt gekozen.
 
Als ik het goed heb, heeft uw macro daar geen probleem mee, lijkt goed te werken ook als ik op het keuzescherm niets selecteer en afsluit komt de MsgBox correct te verschijnen en sluit goed af
 
Het probleem met GetOpenFilename is dat deze zowel een Boolean als een String kan opleveren.
Mijn oplossing controleert op beide situaties.
 
Dat verdiend een donatie, dat kan hier ergens meen ik gezien te hebben
 
iets moelijker denk ik

Denk dat dit wat lastiger wordt, ik zou graag de macro op de een of andere manier moeten zien aan te passen volgens het bestand van waaruit de macro gestart wordt.
Macro: (deel van)
Windows("Draaien-2018.xls").Activate
Sheets("Mach_list").Select

Als diezelfde macro zou gestart worden vanuit bijvoorbeeld “Keren-2017.xls” zou de regel :
- Windows("Draaien-2018.xls").Activate automatisch veranderd moeten worden in :
- Windows("Keren-2017.xls").Activate

Ik vraag mij af of zoiets wel mogelijk is ?
 
Het document waar de macro in het VBA project zit en waar hij dus wordt gestart is altijd ThisWorkbook.
Het actieve werkboek, die dus door de macro actief is gemaakt, is altijd ActiveWorkbook.

Je kan dus altijd kijken naar ThsiWorkbook.Name en ActiveWorkbook.name om uit te vinden wat er moet gebeuren.
 
ThisWorkbook.Activate

Blijkt gewoon simpel deze regel : Windows("Draaien-2018.xls").Activate vervangen met ThisWorkbook.Activate :)
 
Iets anders, zou iemand weten hoe je een bestandsnaam kan beschermen tegen wijzigen terwijl het bestand wel kan/mag gebruikt worden ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan