2009-02-10 8 views
1

Je distribue un classeur Excel à un certain nombre d'utilisateurs, et ils sont supposé pour avoir un fichier de macros particulier pré-installé dans leur dossier XLSTART.Comment puis-je avoir une macro VBA effectuer une recherche/remplacement dans des formules à travers un classeur entier?

Si elles ne sont pas la macro correctement installé, et ils envoient le classeur vers moi, toutes les formules en fonction il inclure le chemin complet de la macro, par exemple:

'C:\Documents and Settings\richard.tallent\Application Data\ 
Microsoft\Excel\XLSTART\pcs.xls'!MyMacroFunction() 

Je veux créer une macro rapide que je peux utiliser pour supprimer le chemin incorrect de chaque formule dans le classeur.

J'ai réussi à récupérer le dossier spécial en utilisant GetSpecialFolder (une fonction externe qui fonctionne très bien), mais l'appel Replace lui-même affiché ci-dessous déclenche une "erreur définie par l'application ou définie par l'objet". L'automatisation de la recherche et du remplacement n'est pas exactement mon point fort, qu'est-ce que je fais de mal?

J'ai déjà commenté certains des paramètres qui ne semblent pas essentiels.

Répondre

1

les opérations suivantes:

Sub FormulaFindAndReplace(phrase As String) 
    For Each Sheet_Select In ActiveWorkbook.Worksheets 
    Sheet_Select.Activate 
    Set Found_Link = Cells.Find(what:=phrase, After:=ActiveCell, _ 
     LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, _ 
     searchdirection:=xlNext, MatchCase:=False) 
    While UCase(TypeName(Found_Link)) <> UCase("Nothing") 
     Found_Link.Activate 
     Found_Link.Formula = Replace(Found_Link.Formula, phrase, "") 
     Set Found_Link = Cells.FindNext(After:=ActiveCell) 
    Wend 
    Next Sheet_Select 
End Sub 

J'ai appelé cela avec:

FormulaFindAndReplace "'" & GetSpecialFolder(AppDataFolder) & "\Microsoft\Excel\XLSTART\mymacro.xls'!" 

Cela a été piraté à partir de:

Macros to Delete Formula Links

2

Il n'y a pas besoin d'utiliser une telle fonction , vous pouvez simplement utiliser l'instruction suivante:

'Replace with a reference to other workbook 
    xlBook.ChangeLink Name:= _ 
    "C:\LISTADOS\reporte_gestion_sucursales\modelo_vaciado\modelo_reporte.xlsx", _ 
    NewName:=fileIn2, Type:=xlExcelLinks