Por favor, dê uma olhada em "VBA Early Binding" e "VBA Late Binding". para vantagens e desvantagens de ambos os métodos.
Você está usando o Earling Binding nesta linha: Set oFS = New FileSystemObject
. "Novo" é um bom indicador de que a vinculação antecipada é usada. É por isso que você precisa ativar uma referência em todas as máquinas onde a macro é executada.
Se você usa Late Binding, não é necessário habilitar referências. A macro funcionaria em todas as máquinas.
Vocêpodeconvertervinculaçãoantecipada
DimoFSAsFileSystemObjectSetoFS=NewFileSystemObject
paraligaçãotardia
DimoFSAsObjectSetoFS=CreateObject("Scripting.FileSystemObject")
Atenção: Se você usar Late Binding, valores numéricos subjacentes de variáveis nomeadas são desconhecidos para o sistema. Você precisa converter essas variáveis nomeadas em seu valor numérico correspondente.
Para obter o valor numérico, reative temporariamente sua biblioteca (por exemplo, Microsoft Scripting Runtime ), vá até o editor do VBA e abra a janela imediata ( CTRL + < kbd> G ). Escreva por exemplo ?TemporaryFolder
na janela imediata e pressione enter. Como você pode ver na captura de tela 2
é o valor da nossa variável denominada TemporaryFolder
Repita as etapas para todas as outras variáveis problemáticas e substitua-as por seus valores. Por fim, desmarque a referência da biblioteca e seu código está sendo executado em todas as máquinas, independentemente de a biblioteca estar ativada ou não.
oFS.GetSpecialFolder(TemporaryFolder) 'with Early Binding
oFS.GetSpecialFolder(2) 'with Late Binding