O tipo de '<variablename>' é ambíguo porque os limites de loop e a variável de etapa não são expandidos para o mesmo tipo

Seu código contém um loop For...Next no qual o compilador não pode inferir um tipo de dados para a variável de controle de loop porque as seguintes condições são verdadeiras:

  • O tipo de dados da variável de controle de loop não é especificado com uma cláusula As.

  • Os limites de loop e a variável de etapa contêm pelo menos dois tipos de dados.

  • Existe mais de uma conversão possível entre os tipos de dados.

  • Não há o melhor tipo entre os candidatos, de modo que a escolha do tipo para a variável de controle de loop seja ambígua.

Por exemplo, o seguinte loop tem um limite de loop do tipo Integer e um limite de loop do tipo UInteger:

Dim m As Integer = 1  
Dim n As UInteger = 10  
' Not valid.  
' For i = m To n  
    ' Loop processing.  
' Next  

Há uma possível conversão entre Integer e UInteger e uma possível conversão entre UInteger e Integer, mas ambas são conversões de restrição, portanto, nenhuma das duas é a melhor opção.

No exemplo a seguir, uma terceira variável de tipo Double é adicionada. Ambos Integer e UInteger têm conversões de expansão padrão para Double, o que faz a conversão para Double a melhor opção. A inferência de tipo atribui à variável de controle de loop i o tipo de dados Double.

Dim stepVar As Double = 1  
' Valid.  
For i = m To n Step stepVar  
    ' Loop processing.  
Next  

ID do Erro: BC30983

Para corrigir este erro

  • Converta explicitamente uma das variáveis em um tipo para o qual as outras têm uma conversão de expansão, por exemplo:

    For i = m To CLng(n)  
    
  • Use uma cláusula As para especificar o tipo da variável de controle:

    For i As Double = m To n
    

Confira também