J'ai un problème avec du code VBA dans mon classeur Excel principal. J'ai deux morceaux de code. Code A fonctionne bien. Code B ne fonctionne pas bien.
Le premier morceau de code (Code A), qui fonctionne correctement, crée un répertoire et enregistre le classeur Excel dans celui-ci, avec le nom du répertoire et du fichier extrait de la cellule B4.
La deuxième partie du code (Code B) va dans un répertoire et ouvre une boîte de dialogue Enregistrer sous. Elle est supposée remplir la zone de nom de fichier initiale avec les informations de la cellule B4. Cependant, tout fonctionne sauf le nom de fichier initial qui n'est pas rempli automatiquement. Il l'habitude de; cela fonctionnait juste avant que je change toutes les références de macros pour les lecteurs mappés (je les ai modifiées des lecteurs de lettre mappés au chemin UNC afin que le fichier puisse être utilisé sur le réseau, c'est-à-dire Z: \ In Progress \ to \ 10.0.0.4 \ data \ en cours).
Ce qui est étrange, c'est que je n'ai aucun problème à accéder au réseau après avoir changé de lecteur mappé -> chemins UNC. Il semble juste être ce petit problème.
J'ai compilé le projet et l'ai débogué.
Si quelqu'un a une idée sur la façon de renseigner le nom de fichier initial pour le code B, ce serait très apprécié.
CODE A
Option Explicit
Sub SaveAsNewJobtoIP()
'This macro creates a New Folder in the In Progress File, named off the BILLING CLIENT Name.
Dim Path As String
Dim InitialName As String
Dim sFileSaveName As Variant
Path = "\\10.0.0.4\data\In Progress\"
If Len(Dir("\\10.0.0.4\data\In Progress\" & ActiveSheet.Range("B4").Value, vbDirectory)) = 0 Then
MkDir Path & ActiveSheet.Range("B4").Value
End If
'This macro saves the workbook with a Dialog and an Initial Filename
InitialName = ActiveSheet.Range("B4").Value & " " & ActiveSheet.Range("H2") & " " & ActiveSheet.Range("I2") & " " & ActiveSheet.Range("J2")
sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Path & InitialName, FileFilter:="Excel Files (*.xlsm), *.xlsm")
If sFileSaveName <> False Then
ActiveWorkbook.SaveAs sFileSaveName
End If
End Sub
CODE B
Option Explicit
Sub SaveAsNewQuoteinJCF()
'This macro saves the workbook with a Dialog and an Initial Filename
Dim Path As String
Dim InitialName As String
Dim sFileSaveName As Variant
Path = "\\10.0.0.4\data\Job Cost Folder\Jill\"
InitialName = "Estimate " & ActiveSheet.Range("B4").Value
sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Path & InitialName, FileFilter:="Excel Files (*.xlsm), *.xlsm")
If sFileSaveName <> False Then
ActiveWorkbook.SaveAs sFileSaveName
End If
End Sub
la source
10.0.0.4
. À l'exception de la clause if, je ne vois aucune différence entre les deux blocs de code.GetSaveAsFilename
ait des problèmes avec les points comme nom de dossier, comme le suggère @Ramhound. Essayez de changer votre chemin enC:\folder.with.periods\Estimate
et vous verrez que la zone de nom de fichier est également vide.Réponses:
Il a fallu un peu de recherche et essayer de comprendre le paysage de mon réseau local, mais j'ai compris, à l'aide de commentaires, que tout ce que j'avais à faire pour résoudre le problème était le suivant:
Remplacez le chemin UNC par le nom réel de l'ordinateur. Alors j'ai changé
et le problème a été résolu. Je pensais que le 10.0.0.4 était le nom de l’ordinateur serveur, mais c’était en fait un chemin. Le passage du chemin UNC au nom de l'ordinateur réel a également résolu un autre problème: les macros recevaient des erreurs d'exécution (1004) car le chemin UNC de mon collègue était en réalité 10.0.0.3.
la source