none
Alterar Tipo Moeda VBA Excel - Erro 1004 RRS feed

  • Pergunta

  • Olá 

    Tenho um ficheiro Excel que é usado para fazer orçamentos e uma vez que os orçamentos podem ser feitos em vários tipos de moeda, Euro, Dólar, etc eu estou a tentar arranjar uma forma de alterar o formato das células que estão formatadas como moeda através de uma combobox. Ou seja, o utilizador selecciona na combobox a moeda a utilizar naquele orçamento e as células formatadas como moeda assumem essa "moeda", por exemplo, se o utilizador escolher dólar a célula passa a apresentar os valores 100,00 USD ou $100,00 (depende como eu colocar o formato).

    Já consegui fazer isto no entanto funciona apenas para intervalos finitos, ou seja, A1:A100 por exemplo. Mas eu não sei se os itens de um orçamento vão terminar na linha 100 ou se num qualquer caso vou ter 500 linhas. Para além disso eu tenho várias colunas com diversas células formatadas como moeda.
    O que estou a tentar fazer é tornar o meu código dinâmico.

    Neste momento tenho o seguinte,

    Eu leio o formato inicial através de uma combobox, por exemplo, se a combobox estiver como EUR isso significa que as células estão formatadas naquele momento como EUR, então eu uso o evento DropButtonclick() para obter o estado inicial e passo esse valor para uma variável global chamada oldformat.

    Private Sub ComboBox1_DropButtonClick()
    
    inicial = Me.ComboBox1.Value
    
    Select Case inicial
    
    Case "EUR"
    
        oldFormat = "#.##0 €"
    
    Case "GBP"
    
        oldFormat = "[$£-809]#.##0"
    
    Case "USD"
    
        oldFormat = "#.##0 [$USD]"
    
    End Select
    
    End Sub


    A variável oldformat é declarada,

    Public oldformat As String

    Depois disto eu uso o evento change da combobox para ler o novo valor, e coloco-o na variável newformat

    Private Sub ComboBox1_Change()
       
        Dim ws As Worksheet
        Dim newFormat As String
    
        'On Error Resume Next
      
    newValue = Me.ComboBox1.Value
    
    Select Case newValue
    
    Case "EUR"
    
        newFormat = "#.##0 €"
    
    Case "GBP"
    
        newFormat = "[$£-809]#.##0"
    
    Case "USD"
    
        newFormat = "#.##0 [$USD]"
    
    End Select
    
    'Set rNextCell = Application.FindFormat
    
        For Each ws In ActiveWorkbook.Worksheets
        
         Application.FindFormat.Clear
         Application.FindFormat.NumberFormat = oldFormat
         Application.ReplaceFormat.Clear
         Application.ReplaceFormat.NumberFormat = newFormat
         
         ws.Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder _
         :=xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
        
        Next ws
    End Sub

    E ao mesmo tempo tento fazer um find/replace pelo livro do excel de forma a substituir o formato inicial pelo novo e aqui está o problema.

    Não estou a conseguir atribuir o valor das variáveis oldformat e newformat à propriedade Numberformat

    Obtenho o erro Run-time error '1004': Application-defined or object-defined error nas linhas

    Application.FindFormat.NumberFormat = oldformat
    Application.ReplaceFormat.NumberFormat = newFormat

    Alguém me consegue ajudar?

    terça-feira, 12 de agosto de 2014 11:31