Est-il un moyen pour DIR(chemin) en VBA pour gérer les chaînes de plus de 260?
Donné le fragment de code suivant:
Dim s As String: s = "S:\vic\bla\[..insert more here..]\data.xml"
Debug.Print Len(s)
Debug.Print Dir(s)
Si Len(s) >= 260
j'ai un message d'erreur indiquant que le suivant:
Run-time error '53':
File not found
Si la chaîne est inférieure à 260, il fonctionne très bien et affiche le comportement attendu pour à la fois et non les fichiers trouvés.
Est là pour obtenir DIR travailler avec longtemps (>260) noms de chemin d'accès?
Notes
- Fichier de restructuration n'est pas une option
- Je suis en cours d'exécution ce dans Excel 2007
comme un correctif à court terme, vous pouvez re-map le plus profond dossier dont vous avez besoin pour obtenir les fichiers
Pouvez-vous développer?
Pourquoi avez-vous besoin Dir? Vous ne pas afficher les caractères génériques dans votre exemple, est-il donc possible que FileSystemObject serait travailler pour vous?
Très bonne question. J'ai seulement besoin de vérifier que le fichier existe - donc, si je peux le faire avec une autre méthode, je suis ouvert à il
En fonction de votre dernier commentaire, je fournis le code qui va vous dire si un fichier existe indépendamment de la profondeur dans la structure de répertoire. Vous pourriez envisager l'édition de votre question, de sorte qu'il reflète ce que tu voulais dire... de cette façon, la réponse aura plus de sens pour les gens qui ne lisent pas les commentaires.
Pouvez-vous développer?
Pourquoi avez-vous besoin Dir? Vous ne pas afficher les caractères génériques dans votre exemple, est-il donc possible que FileSystemObject serait travailler pour vous?
Très bonne question. J'ai seulement besoin de vérifier que le fichier existe - donc, si je peux le faire avec une autre méthode, je suis ouvert à il
En fonction de votre dernier commentaire, je fournis le code qui va vous dire si un fichier existe indépendamment de la profondeur dans la structure de répertoire. Vous pourriez envisager l'édition de votre question, de sorte qu'il reflète ce que tu voulais dire... de cette façon, la réponse aura plus de sens pour les gens qui ne lisent pas les commentaires.
OriginalL'auteur Chris | 2013-02-06
Vous devez vous connecter pour publier un commentaire.
Voici un code qui devrait fonctionner indépendamment de la profondeur...
Fondamentalement, il indique les chemins d'accès relatifs - si vous n'appelez jamais
dir
avec une longue chaîneChDir pathFragment
ligne lorsque l' (absolue) chemin de croix de la de 260 caractères seuil.c'est étrange... quelle plateforme utilisez-vous (version de l'OS, Bureau)?
Windows XP & Office 2007. Les fichiers sont sur un disque réseau.
OriginalL'auteur Floris
Peu de temps mis (pour répondre à la réponse de titre): Non. VBA
Dir
fonction ne fonctionne tout simplement pas avec les chemins au-delà de 260 caractères.Version longue: http://msdn.microsoft.com/en-us/library/aa365247(SV.85).aspx#maximum_path_length (puis Ctrl+F et de la recherche pour "260")
Je pense que la section à propos de de Fichier Win32 espaces de noms est utile de donner un essai:
Il doit y avoir une fonction API Win32, vous pouvez
DECLARE
et à utiliser, mais ce n'est pas à l'aide de laDIR
fonction. Désolé, de ne pas avoir un long chemin à portée de main pour tester quoi que ce soit...OriginalL'auteur Mathieu Guindon
Je n'ai aucun moyen de tester cela, de sorte que vous n'avez que quelques notes manuscrites sur une approche possible.
Aussi, concernant le commentaire ci-dessus:
OriginalL'auteur Fionnuala
J'ai trouvé cette page MS:
Nommage des Fichiers, des Chemins et des espaces de noms
Donc pour un très long chemin UNC-je modifier le début du chemin d'accès, comme indiqué ci-dessous, et cela fonctionne.
OriginalL'auteur ChipsLetten
Puisque je ne pouvais pas envoyer une réponse à l'observation qui avait le deepfileexists code, voici le code modifié, de sorte que vous pouvez trouver des chemins d'accès réseau (depuis qu'il m'a répondu qu'il avait un emplacement réseau)
Vous avez besoin d'une fonction qui s'appelle system32 faire un chemin direct vers un lecteur réseau. J'ai obtenu le code de ici
voici le code à insérer la fonction privée dans le haut du module ou il l'habitude de travailler. il conserve la fonction liée spécifiquement à ce module, si vous voulez l'ouvrir à l'ensemble du classeur tomber le privé.
puis heres la fonction avec le code modifié pour accepter que quand il y a un lecteur réseau en commençant par \
OriginalL'auteur enthuse