Mise à jour d'un classur et logging à l'aide de VBA

J'ai créé une macro qui devrait actualiser toutes les sources de données. Ses sources de données sont des servers sql, et, en tant que telles, ils tirent automatiquement sur la boîte de dialog de votre choix. Si vous avez déjà entré un mot de passe dans le server depuis la dernière ouverture de Excel, il ne request pas le mot de passe.

J'ai réussi à get le code suivant, mais il ne se comporte pas comme je m'attendais

Sub BSR_Refresher() 'Refreshes the spreadsheet and copys it with today's date 'Clears all filters On Error Resume Next ActiveWorkbook.ShowAllData 'Refreshes Spreadsheet For Each objConnection In ThisWorkbook.Connections 'Get current background-refresh value bBackground = objConnection.OLEDBConnection.BackgroundQuery 'Temporarily disable background-refresh objConnection.OLEDBConnection.BackgroundQuery = False 'Refresh this connection objConnection.Refresh 'Set background-refresh value back to original value objConnection.OLEDBConnection.BackgroundQuery = bBackground Next 'Saves Spreadsheet ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & "\\Company.local\AnyDrive\Company\Projects\Project001\Reporting\Report Updates" & Format(Date, ddmmyyyy) & ".xls" End Sub 

D'après ma connaissance de VBA, cela devrait faire ce qui suit:

1) Effacer tous les filters des tables

2) Exécutez un rafraîchissement de données (cribbed from Here )

3) Enregistrer dans \\Company.local\AnyDrive\Company\Projects\Project001\Reporting\Report Updates (faux noms, structure réelle) avec le nom de file FileName 08/07/2015 (où FileName est le nom actuel du file )

Des indices de pourquoi?

MODIFIER:

Selon les commentaires, il ne sauvegarde pas les documents dont j'ai besoin.

==================

J'ai modifié le code et ça ne fonctionne toujours pas. J'ai déplacé les choses car la boucle entraînait une suppression répétée de l'une des feuilles en raison de l'ajout d'une étape de "supprimer la feuille".

 Sub BSR_Refresher() 'Refreshes the spreadsheet and copys it with today's date ' Gets name to save new workbook as Dim StrSaveName As Ssortingng Dim StrFolderPath As Ssortingng StrSaveName = "Report" & Format(Date, ddmmyyyy) & ".xlsx" StrFolderPath = "\\Company.local\anyDrive\Company\Projects\Project-001\Reporting\Status Report Updates\" StrSaveAs = StrFolderPath & StrSaveName 'Deletes Sheet1, Clears all filters Application.DisplayAlerts = False Sheets("Sheet1").Select ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = True 'Refreshes Spreadsheet On Error Resume Next ActiveWorkbook.ShowAllData For Each objConnection In ThisWorkbook.Connections 'Get current background-refresh value bBackground = objConnection.OLEDBConnection.BackgroundQuery 'Temporarily disable background-refresh objConnection.OLEDBConnection.BackgroundQuery = False 'Refresh this connection objConnection.Refresh 'Set background-refresh value back to original value objConnection.OLEDBConnection.BackgroundQuery = bBackground Next 'Saves Spreadsheet ActiveWorkbook.SaveAs Filename:=StrSaveAs End Sub 

Mon problème est qu'il ne semble pas épargner où il doit être: S

 ActiveWorkbook.Path & "\\Company.local 

Double "\" signe est votre problème. Couper un de ces et vous devriez être bien (ou du less vous allez passer à un autre problème s'il s'avère qu'il y en a un plus tard).

En outre, l'appel de votre projet Project-001 vous mordra une fois que vous avez plusieurs projets et vous ne pouvez pas vous callbacker quel numéro fait quoi. Il est préférable de commencer à donner des noms descriptifs appropriés au début.


Edit: Vous ne spécifiez pas le format de file dans votre SaveAs – cela peut causer des problèmes. Ce code aidera-t-il?

 Sub TestSave() Dim savepath As Ssortingng savepath = ThisWorkbook.Path & "\\testdir\" & "test.xlsm" ThisWorkbook.SaveAs Filename:=savepath, FileFormat:=52 End Sub 

51 est xlsx, 52 est xlsm, 56 est xls

Vous ne pouvez pas inclure des barres obliques dans les noms de file Windows. Vous manquez de marques de discours dans la fonction Format . Changez ce code:

  StrSaveName = "Report" & Format(Date, ddmmyyyy) & ".xlsx" 

À:

  StrSaveName = "Report" & Format(Date, "ddmmyyyy") & ".xlsx" 

pour get la date comme 08072015.

D'ACCORD. Merci à Jacek et Chips. J'ai réussi à résoudre ce problème.

Il semble que j'ai formé datatables «sauvegarder en tant que» à tort. Voici la macro de travail, au cas où quelqu'un d'autre findait la question 🙂

L'étape suivante consiste à faire un show / hide pour que la seule chose qui s'affiche lors de l'input dans le classur soit la page de mise à jour de la feuille de calcul. Je publierai le code pour cela plus tard en tant que commentaire supplémentaire.

 Sub Spreadsheet_Refresher() 'Refreshes the spreadsheet and copys it with today's date ' Gets name to save new workbook as Dim StrSaveName As Ssortingng Dim StrFolderPath As Ssortingng StrSaveName = "Report" & " " & Format(Date, "dd-mm-yyyy") & ".xlsm" StrFolderPath = "\\Company.local\AnyDrive\Company\Projects\001\Reporting\Status Report Updates\" StrSaveAs = StrFolderPath & StrSaveName 'Deletes Update Spreadsheet worksheet Application.DisplayAlerts = False Sheets("Update Spreadsheet").Select ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = True 'Refreshes Spreadsheet For Each objConnection In ThisWorkbook.Connections 'Get current background-refresh value bBackground = objConnection.OLEDBConnection.BackgroundQuery 'Temporarily disable background-refresh objConnection.OLEDBConnection.BackgroundQuery = False 'Refresh this connection objConnection.Refresh 'Set background-refresh value back to original value objConnection.OLEDBConnection.BackgroundQuery = bBackground Next 'Saves Spreadsheet ActiveWorkbook.SaveAs Filename:=StrSaveAs End Sub