none
DÚVIDA SOBRE UM CÓDIGO DE VBA RRS feed

  • Pergunta

  • Fiz uma PLANILHA MESTRE com vários dados de um cliente, o meu objetivo é: Criar um VBA que abra qualquer arquivo em excel e que eu importe células escolhidas para preencher todos os dados da PLANILHA MESTRE, por exemplo, todo arquivo de excel que eu abrir com o botão IMPORTAR DADOS, automaticamente ele vai capturar apenas as células que eu escolher, porém o meu programa ele captura mas fica com problemas de configuração de VALOR ou NÚMERO, gostaria de saber como proceder esse problema. Por exemplo, as células "J8, "J17:JJ25" e "J28:J38" de qualquer planilha que eu abrir quero que importe para essa PLANILHA MESTRE nas células "B5", "B7", "B8:B13" e etc.
    Private Sub btExecuta_Click()
    
    Application.ScreenUpdating = False
    
    'Definição das variaveis
    
    Dim W              As Worksheet 'planilha ativa
    Dim Wnew           As Workbook  'manipula a pasta de trabalho para copiar os dados
    Dim ArqParaabrir   As Variant   'a rotina abre o arquivo
    Dim A              As Integer   'loop
    Dim nomearquivo    As String
    
    
    'Capturar arquivos para tratamento
    
    ArqParaabrir = Application.GetOpenFilename("Arquivo do Excel (*.xlsx), *.xl*", _
                   Title:="Escolha o arquivo para ser importado", _
                   MultiSelect:=True)   'importa vários arquivos simultaneamente
                   
                   
    If Not IsArray(ArqParaabrir) Then  'checando se a planilha tem uma rede de dados
    
    If ArqParaabrir = "" Or ArqParaabrir = False Then 'verificar se é ou não uma rede de dados do ArqParaAbrir
    
    msgbox "Processo cancelado, nenhum arquivo escolhido", vbOKOnly, "Processo abortado"
    Exit Sub
    
    End If
    
    End If
    
    
    
    Set W = Sheets("PLAN MESTRE") 'Início da importação dos dados
    
    'Loop para importação dos arquivos
    
    For A = LBound(ArqParaabrir) To UBound(ArqParaabrir)
    
    nomearquivo = ArqParaabrir(A)
    
    Application.Workbooks.Open (nomearquivo)
    
    Set Wnew = ActiveWorkbook  'manipula
    
    'INFORMAÇÕES GERAIS
    
    '1
    
    ActiveSheet.Range("b5").UnMerge
    ActiveSheet.Range("b5").Font.Bold = False
    ActiveSheet.Range("b5").Font.Size = 10
    ActiveSheet.Range("b5").Font.Name = "Arial"
    ActiveSheet.Range("b5").HorizontalAlignment = xlCenter
    ActiveSheet.Range("b5").VerticalAlignment = xlCenter
    ActiveSheet.Range("b5").Borders(xlEdgeLeft).LineStyle = xlContinuous
    ActiveSheet.Range("b5").Borders(xlEdgeLeft).Weight = xlThin
    ActiveSheet.Range("b5").Borders(xlEdgeRight).LineStyle = xlContinuous
    ActiveSheet.Range("b5").Borders(xlEdgeRight).Weight = xlThin
    ActiveSheet.Range("b5").Borders(xlEdgeTop).LineStyle = xlContinuous
    ActiveSheet.Range("b5").Borders(xlEdgeTop).Weight = xlThin
    ActiveSheet.Range("b5").Borders(xlEdgeBottom).LineStyle = xlContinuous
    ActiveSheet.Range("b5").Borders(xlEdgeBottom).Weight = xlThin
    ActiveSheet.Range("b5").Select
    
    Selection.Copy Destination:=W.Cells(W.Rows.Count, 1).End(xlUp).Offset(1, 0) 'copiar os dados para o destino
    
    
    Selection.Copy Destination:=W.Cells(W.Rows.Count, 35).End(xlUp).Offset(1, 0) 'copiar os dados para o destino
    
    Application.DisplayAlerts = False
    
    ActiveWorkbook.Close savechanges:=False
    
    
    Application.DisplayAlerts = True
    
    Next A
    
    Application.ScreenUpdating = True
    
    
    msgbox "Processo concluído"
    
    End Sub

    domingo, 4 de setembro de 2016 14:25

Todas as Respostas

  • Nesse trecho, eu quero que "B5" de qualquer planilha apareça em "A4" na "Planilha Mestre", porém se eu abrir 20 planilhas diferentes em que o "B5" importe, na Planilha Mestre fica dando erros de valor ou número.
    domingo, 4 de setembro de 2016 14:26
  • Miguel, boa tarde.

    Você poderia postar um link com a planilha mestre e outras planilhas que você usa para importação?

    Ao invés de usar o seguinte código:

    Selection.Copy Destination:=W.Cells(W.Rows.Count, 1).End(xlUp).Offset(1, 0)

    Você pode fazer o seguinte:

    Selection.Copy

    W.Cells(W.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial(xlPasteValues)

    Possivelmente isso irá corrigir alguns problemas de valores.

    Depois me fala se deu certo!

    quarta-feira, 7 de setembro de 2016 18:03