locked
datashowform RRS feed

  • Pergunta

  • No excel 2007 tenho uma planilha cadasatro de clientes. Uso o datashowform para atualizar dados dos clientes. Para acrescentar um cliente clico em novo, ao inves dele selecionar a linha do próximo código vago 4504 ele seleciona a ultima linha em branco abaixo do código 6000. O que eu queria é que ele selecionasse a linha logo abaixo do nome Zulau.

    Pergunta 1) É possível programar o datashowform para fazer o que quero?

    Pergunta 2) Se não é possível tem ouro procedimento para fazer a atualização, adicionar, eleiminar etc... ou seja, administrar o cadastro a partir da planilha.

     

    CONTROLE Cliente Código Endereço CEP Cidade Estado CNPJ/CPF etc....
    3501 Zalio 1120   80 Blala Pra 111111111  
    3502 Zélio 1318   80 Blala Pra 222222  
    3503 Zulua 2853   80 Blala Pra 77777777  
    3504   4504            
    3505            4505            
               ...              ...            
    5000   6000            

    sábado, 21 de agosto de 2010 16:31

Respostas

  • Sub ShowDataForm2()
      'Considerações:
      'Coluna A: CONTROLE
      'Coluna B: Nome
      'Coluna C: Código
      'Opcionalmente, estou escondendo as colunas de CONTROLE e Código para chamar o ShowDataForm
      
      
      Dim rLastOld As Long
      Dim rLastNew As Long
      Dim nCount As Long
      
      rLastOld = Cells(Rows.Count, "B").End(xlUp).Row
      Range("A:A,C:C").EntireColumn.Hidden = True
      ActiveSheet.ShowDataForm
      Range("A:A,C:C").EntireColumn.Hidden = False
      rLastNew = Cells(Rows.Count, "B").End(xlUp).Row
      
      If rLastNew > rLastOld Then
        For nCount = rLastOld + 1 To rLastNew
          Cells(nCount, "A") = IIf(IsNumeric(Cells(nCount - 1, "A")), Cells(nCount - 1, "A") + 1, 1)
          Cells(nCount, "C") = WorksheetFunction.Max(Columns("C")) + 1
        Next nCount
      End If
      
    End Sub
    sábado, 21 de agosto de 2010 22:57
  • Mestre Felipe,

    Sua solução foi perfeita. Obrigado

    Sessentão Aprendiz

    domingo, 22 de agosto de 2010 00:33

Todas as Respostas

  • Não tem jeito. Para fazer do jeito que você quer, deve-se criar um formulário personalizado no VBA (ou seja, respondendo a pergunta 2: é possível, mas envolve um pouco de programação).

    Mas posso dar uma sugestão: por que não remove as colunas de CONTROLE e Código e, após a rotina do DataShowForm ser executada, preenchê-las automaticamente? Isso é fácil, basta definir as regras de preenchimento.

    *obs: Zálio, Zélio, Zulau? Que nomes são esses? hahaha

    sábado, 21 de agosto de 2010 20:24
  • Felipe

    Após o datashowform tem uma rotina que põe os nomes em ordem alfabética, então os nomes com Z foi só para demosntrar que eles são os ultimos da lista, cujo o controle está em ordem crescente, mas o códito do cliente é atribuido a ele no momento em que ele é cadastrado. Concordo com vc que são nomes estranhos hahahah.

    Após rodar o datashowform e adiconar um novo cliente, tenho que programar duas rotina:

    1 - Adicionar mais um em relação ao cliente anterior (coluna A), ou seja vai ter um novo nome na coluna B e tenho adiconar o numero de controle que é um a mais do que o controle do cliente existente antes dele.

    Na coluna controle os numeros vão de 1 a infinito

    2 - A outra rotina é o colocar o código do novo cliente que deverá ser um númro acima do maior existente entre todos os clientes listados na coluna código que é a coluna C.

    Acredito que já descrevi o problema, agora só me resta aprender com fazer estas dus rotinas para incluir na macro antes de refazer a ordem alfabética. Vc me ensina?  

    sábado, 21 de agosto de 2010 21:52
  • Sub ShowDataForm2()
      'Considerações:
      'Coluna A: CONTROLE
      'Coluna B: Nome
      'Coluna C: Código
      'Opcionalmente, estou escondendo as colunas de CONTROLE e Código para chamar o ShowDataForm
      
      
      Dim rLastOld As Long
      Dim rLastNew As Long
      Dim nCount As Long
      
      rLastOld = Cells(Rows.Count, "B").End(xlUp).Row
      Range("A:A,C:C").EntireColumn.Hidden = True
      ActiveSheet.ShowDataForm
      Range("A:A,C:C").EntireColumn.Hidden = False
      rLastNew = Cells(Rows.Count, "B").End(xlUp).Row
      
      If rLastNew > rLastOld Then
        For nCount = rLastOld + 1 To rLastNew
          Cells(nCount, "A") = IIf(IsNumeric(Cells(nCount - 1, "A")), Cells(nCount - 1, "A") + 1, 1)
          Cells(nCount, "C") = WorksheetFunction.Max(Columns("C")) + 1
        Next nCount
      End If
      
    End Sub
    sábado, 21 de agosto de 2010 22:57
  • Mestre Felipe,

    Sua solução foi perfeita. Obrigado

    Sessentão Aprendiz

    domingo, 22 de agosto de 2010 00:33