Inquiridor
DÚVIDA SOBRE UM CÓDIGO DE VBA

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
- Movido Robson William Silva terça-feira, 6 de setembro de 2016 12:54
Todas as Respostas
-
-
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!