2012-10-18 16 views
8

Questa domanda è stata modificata a causa di lunghi commenti e aggiornamenti dalle risposte proposte.Excel VBA Aprire la cartella di lavoro, eseguire azioni, salvare con nome, chiudere

Come richiesto qui è il modulo 13;

Sub SaveInFormat() 
Application.DisplayAlerts = False 
Workbooks.Application.ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data\" & Format(Date, "yyyymm") & "DB" & ".xlsx", leFormat:=51 
Application.DisplayAlerts = True 
End Sub 

Inoltre ci sono problemi con l'ErrorHandling, so che ho sbagliato con esso, ma io sono più interessato a fissare la funzione di chiusura al momento prima di entrare in esso. Ecco il codice di gestione degli errori che ha bisogno di qualche lavoro

Sub test() 

Dim wk As String, yr As String, fname As String, fpath As String 
Dim owb As Workbook 

wk = ComboBox1.Value 
yr = ComboBox2.Value 
fname = yr & "W" & wk 
fpath = "C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data" 
owb = Application.Workbooks.Open(fpath & "\" & fname) 
On Error GoTo ErrorHandler: 
ErrorHandler: 
If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then Exit Sub Else Call Clear 

'Do Some Stuff 

Call Module13.SaveInFormat 

owb.Close 

questo è il vostro codice di prova più il mio cambiamento del percorso del file e il nome

+2

bene, ho visto solo questo come la tua domanda: "In generale io voglio una funzione per un pulsante nel mio form utente per aprire alcune cartelle di lavoro e sia eseguire alcune azioni , salvare in un formato e quindi chiudere o aprire una cartella di lavoro e visualizzare le informazioni. " - Questi sono tutti compiti sereni, che sono abbastanza facili da ottenere soluzioni per in Excel-help o in rete - le tue domande qui sono un po 'come "carino per favore, fai il mio lavoro" - scomposizione per unire più domande relative al codice . – Jook

risposta

8

Dopo la discussione distacco risposta aggiornamento: Manipolazione

Option Explicit 
Sub test() 

    Dim wk As String, yr As String 
    Dim fname As String, fpath As String 
    Dim owb As Workbook 

    With Application 
     .DisplayAlerts = False 
     .ScreenUpdating = False 
     .EnableEvents = False 
    End With 

    wk = ComboBox1.Value 
    yr = ComboBox2.Value 
    fname = yr & "W" & wk 
    fpath = "C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data" 

    On Error GoTo ErrorHandler 
    Set owb = Application.Workbooks.Open(fpath & "\" & fname) 

    'Do Some Stuff 

    With owb 
     .SaveAs fpath & Format(Date, "yyyymm") & "DB" & ".xlsx", 51 
     .Close 
    End With 

    With Application 
     .DisplayAlerts = True 
     .ScreenUpdating = True 
     .EnableEvents = True 
    End With 

Exit Sub 
ErrorHandler: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then 

Else: Call Clear 

End Sub 

errore:

Si potrebbe provare qualcosa di simile per la cattura di un errore specifico:

On Error Resume Next 
    Set owb = Application.Workbooks.Open(fpath & "\" & fname) 
    If Err.Number = 1004 Then 
    GoTo FileNotFound 
    Else 
    End If 

    ... 
    Exit Sub 
    FileNotFound: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then 

    Else: Call Clear 
+0

Rimuovere la riga 'owb.close' se non è più aperta comunque. Aggiungi un'altra riga per fare riferimento al nome della tua nuova cartella di lavoro se desideri chiuderla dopo averla salvata. –

+0

Sì, lo stesso metodo può essere applicato come: '.SaveAs mypath &" \ "& yr & mnth' –

+0

Se torniamo indietro un po ', dichiarate' oWB' come una cartella di lavoro e Impostatela sulla cartella di lavoro che viene aperta in base sui valori derivati ​​dalle caselle combinate? Se ti capisco, esegui altre azioni su questa cartella di lavoro che è stata aperta e salvala come nome file diverso (YYYYMMDB.xlsx)? In tal caso, dovresti comunque essere in grado di utilizzare la variabile 'oWB' per chiudere la cartella di lavoro. –

2

cercherò di rispondere ad alcune cose diverse, ma il mio contributo non può coprire tutte le vostre domande. Forse molti di noi possono prendere diversi pezzi da questo. Tuttavia, questa informazione dovrebbe essere utile per te. Qui andiamo ..

apertura di un file separato:

ChDir "[Path here]"       'get into the right folder here 
Workbooks.Open Filename:= "[Path here]"  'include the filename in this path 

'copy data into current workbook or whatever you want here 

ActiveWindow.Close       'closes out the file 

apertura di un file con Data Specifica se esistente:

Non sono sicuro di come cercare la tua directory per vedere se esiste un file, ma nel mio caso non mi preoccuperei di cercarlo, proverei solo ad aprirlo e inserire qualche errore in modo che, se non esiste, mostri questo messaggio o fai xyz.

qualche errore di comune controllando dichiarazioni:

On Error Resume Next 'if error occurs continues on to the next line (ignores it) 

ChDir "[Path here]"       
Workbooks.Open Filename:= "[Path here]"  'try to open file here 

O (opzione migliore):

if one doesn't exist then bring up either a message box or dialogue box to say "the file does not exist, would you like to create a new one?

si sarebbe molto probabilmente si desidera utilizzare il GoTo ErrorHandler indicato di seguito per raggiungere questo

On Error GoTo ErrorHandler: 

ChDir "[Path here]"       
Workbooks.Open Filename:= "[Path here]"  'try to open file here 

ErrorHandler: 
'Display error message or any code you want to run on error here 

Molto più informazioni Gestione degli errori qui: http://www.cpearson.com/excel/errorhandling.htm


Anche se volete saperne di più o bisogno di conoscere più in generale in VBA mi sento di raccomandare il sito di Siddharth Rout, lui ha un sacco di esercitazioni e codice di esempio qui: http://www.siddharthrout.com/vb-dot-net-and-excel/

Spero che questo aiuti!


esempio su come garantire il codice di errore non viene eseguito ogni volta:

se si esegue il debug attraverso il codice senza il Exit Sub PRIMA che il gestore degli errori vi accorgerete subito il gestore di errori verrà eseguito ogni volta regrld di se c'è un errore o no.Il link sotto l'esempio di codice mostra una risposta precedente a questa domanda.

Sub Macro 

    On Error GoTo ErrorHandler: 

    ChDir "[Path here]"       
    Workbooks.Open Filename:= "[Path here]"  'try to open file here 

    Exit Sub  'Code will exit BEFORE ErrorHandler if everything goes smoothly 
        'Otherwise, on error, ErrorHandler will be run 

    ErrorHandler: 
    'Display error message or any code you want to run on error here 

    End Sub 

Inoltre, un'occhiata a questo altro problema nel avete bisogno di più riferimento a come funziona: goto block not working VBA


+0

Grazie, purtroppo sto lasciando il lavoro ora, ma guarderò questo domani – JamesDev

+0

sembra bello guardare avanti da voi –

+0

Ho usato la gestione degli errori per far apparire un messaggio se il tentativo di apertura del file fallisce. Sfortunatamente, quando il file aperto funziona, ricevo ancora il messaggio – JamesDev