Sintomas
Quando você faz uma alteração programática para o valor de uma célula em uma planilha do Microsoft Excel, o valor de milissegundo que você especifica é arredondado para o segundo mais próximo. Esse problema ocorre quando as seguintes condições são verdadeiras:
-
A alteração feita atribuirá o formato de data do VBA ou o formato de data variante à célula.
-
Você faz a alteração programática usando uma macro do Visual Basic for Applications ou usando um cliente de automação externo.
Esse problema não ocorre quando a alteração feita por você atribui o formato de data ou o formato de hora à célula.
Causa
Esse problema ocorre porque o Excel formata cadeias de caracteres de data internamente de acordo com o formato de data e hora especificado na guia Opções regionais do item Opções regionais e de idiomas no painel de controle. Esse valor é arredondado para o segundo mais próximo. O Excel atribui esse valor à célula e, em seguida, recalcula o valor para produzir um novo valor de data para a célula.
Solução alternativa
Use um dos seguintes métodos para solucionar esse problema.
Método 1
Você pode converter o valor de data em um formato de cadeia de caracteres que contenha uma fração de um segundo. Esse valor de cadeia de caracteres pode ser atribuído e calculado como um formato de data que mantém os milissegundos.
Método 2
Você pode usar a propriedade value2 do objeto Range para manter os milissegundos. Por exemplo, você pode usar o código VBA a seguir.
Sub CopyValueUsingVBDate() Dim d As Date d = ActiveSheet.Range("A1").Value ActiveSheet.Range("B1").Value2 = dEnd Sub
Para obter informações adicionais, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:
182812 Descrição da propriedade Value2 do objeto Range