Sintomas
Quando se faz uma alteração programática para o valor de uma célula numa folha de cálculo do Microsoft Excel, o valor milissegundo que especifica é arredondado para o segundo mais próximo. Esta questão ocorre quando as seguintes condições são verdadeiras:
-
A alteração que faz atribui o formato VBA Date ou o formato Data variante à célula.
-
Faz a alteração programática utilizando um macro Visual Basic para Aplicações ou utilizando um cliente de Automação externa.
Este problema não ocorre quando a alteração que es faz atribui o formato Data ou o formato Hora à célula.
Causa
Este problema ocorre porque o Excel forma formatos internos datam as cordas de acordo com o formato de data e hora especificado no separador Opções Regionais do item Opções Regionais e Linguísticas no Painel de Controlo. Este valor é arredondado para o segundo mais próximo. O Excel atribui este valor à célula e depois recalcula o valor para produzir um novo valor de data para a célula.
Solução
Utilize um dos seguintes métodos para contornar esta questão.
Método 1
Pode converter o valor da data num formato de corda que contenha uma fração de segundo. Este valor de cadeia pode ser atribuído e calculado como um formato de data que mantém os milissegundos.
Método 2
Pode utilizar a propriedade Value2 do objeto Range para reter os milissegundos. Por exemplo, pode utilizar o seguinte código VBA.
Sub CopyValueUsingVBDate() Dim d As Date d = ActiveSheet.Range("A1").Value ActiveSheet.Range("B1").Value2 = dEnd Sub
Para obter informações adicionais, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
182812 Descrição da propriedade Value2 para o objeto Range