Word 2007 - Uso de curingas em campos

2

Eu preciso criar um campo no Word 2007 que exibirá algum texto quando o arquivo não estiver no diretório esperado (uma pasta chamada "Release"). O mapeamento da unidade e as pastas de nível superior podem ser diferentes em cada máquina e para cada documento.

Eu tentei usar

{IF "{FILENAME \ p}"="* Liberar *" "OK" "DOCUMENTO FORA DE DATA"}

Mas isso não dá resultados corretos. Eu também tentei usar o COMPARE, mas não tive sucesso. Acontece que não posso usar dois curingas de cada vez, veja: O curinga do campo de mesclagem do Word não corresponde corretamente

Alguém conhece uma solução alternativa para isso ou alguém pode sugerir uma solução alternativa?

Não consigo implementar facilmente uma solução de VBA, pois nenhum dos usuários ativará os certificados de macro ou de confiança do documento, e o gerenciamento está relutante em permitir locais confiáveis.

    
por Redchair 27.03.2014 / 07:30

1 resposta

1

Para futuros leitores, a sugestão original (na parte inferior) ainda pode ser útil, desde que você saiba que os caminhos são curtos.

Modifiquei a sugestão recente porque, em sua forma original, quando o documento não estava na pasta Release, mas existia um documento com o mesmo nome e campos na pasta Release, esse documento tentava se incluir até que o Word chegasse à sua limite de aninhamento de campo (em torno de 19/20 níveis) e, em seguida, aparece um diálogo de erro. O outro problema que pode existir com essa abordagem é que o Word pode abrir um diálogo em alguns casos de qualquer maneira (descobri que isso aconteceu com o Word 2010 / Win 7 quando o documento estava em um caminho UNC, mas não em um driveletter: Não sei exatamente quais circunstâncias e configurações causarão esse problema.AFAICS o campo ainda funciona corretamente nessa situação, mas o pop-up de diálogo quase certamente seria inquietante (no mínimo) para um usuário final).

Para fazer isso funcionar, você precisa inserir um marcador que não inclua o campo {IF}. Para tornar mais difícil para o usuário excluir, você pode, por exemplo, clicar logo antes do "Erro!" texto e insira um marcador de ponto lá. Eu usei o nome do marcador "bkmk_release"

Caso contrário, o melhor que posso gerenciar é isso, que depende de um "truque" do nome do caminho do Windows que geralmente funciona no Word e funciona além do limite de 128 caracteres (suspeito que o próximo limite seja um total de 256 caracteres .):

{ IF "{ INCLUDETEXT "{ FILENAME \p }\..\..\Release\{ FILENAME }" bkmk_rlease }" = "Error! Include may not refer to itself." "DOCUMENT OUT OF DATE" "OK" }

i.e. provavelmente não funcionará se seu arquivo puder estar legitimamente em um endereço http: //. Tal como está, depende de uma configuração em inglês. Você pode melhorar isso usando

{ IF "{ INCLUDETEXT "{ FILENAME \p }\..\..\Release\{ FILENAME }" bkmk_release }" = "{ INCLUDETEXT "{ FILENAME \p }" }" "DOCUMENT OUT OF DATE" "OK" }

mas não verifiquei.

Em outras palavras, se o arquivo estiver na pasta Release, ele está tentando se incluir e o INCLUDETEXT deve retornar o erro. Se o arquivo não estiver na pasta Release, o includetext tentará abrir o arquivo com o mesmo nome na pasta Release. Se isso não existir, você verá um erro diferente (provavelmente mais de uma possibilidade), por exemplo. não existe, nome inválido. O único problema é se ele existe e contém o texto "Erro! Incluir não pode se referir a si mesmo". : -)

Pode haver alguns outros "casos de borda", por ex. se o documento estiver na pasta de nível superior.

A sugestão original:

Desde que o Release seja sempre a pasta que contém o arquivo, não uma pasta mais acima na hierarquia, algo assim deve ser feito:

{ IF "{ INCLUDETEXT "{ FILENAME \p }\..\..\Release\{ FILENAME }" }" = "{ INCLUDETEXT "{ FILENAME \p }" }" "DOCUMENT OUT OF DATE" "OK" }

Apesar de pensarmos mais sobre isso, pode haver um problema com nomes de caminhos mais longos - até 128 caracteres podem ser uma limitação, o que descartaria isso em alguns cenários.

    
por 27.03.2014 / 09:05