Notifications
Clear all

Excel VBA - Importar dados de uma outra planilha com check

6 Posts
3 Usuários
0 Reactions
1,186 Visualizações
(@brumoal)
Posts: 0
New Member
Topic starter
 

Olá gente boa!
Sou novato por aqui e também em programação em VBA.
Gostaria muito de contar com a ajuda dos senhores(as)!

Estou precisando de um código que ao clicar em um determinado botão (serão 30 no total), abra a opção para realizar a importação de uma outra planilha que estará na minha rede (é importante que o arquivo seja selecionado de qualquer diretório).
Essa planilha que será importada terá um padrão definido (por exemplo, a célula A1 terá o mesmo nome do botão, esse dado deverá ser checado, e os dados a serem copiados estarão na range "A6:S56" da sheet com mesmo nome). Tudo em valores (texto e números).

Ao terminar a importação, seria importante retornar uma mensagem (sucesso ou falha caso não seja a planilha padrão) e também ter um "ok" ao lado do botão.

Até a parte de selecionar a planilha a ser importada eu consegui fazer (contando com a ajuda aqui do fórum em tópicos parecidos), depois disso faltou conhecimento.

Usei esse código para abrir a caixa e tentei ligar com um outro para copiar... não deu certo.

Sub Import()
Dim File As String
Dim FileToOpen
FileToOpen = Application.GetOpenFilename _
(Title:="Selecione o arquivo a ser importado", _
FileFilter:="Text Files *.xlsx (*.xlsx),")
File = FileToOpen
If FileToOpen = False Then
MsgBox "Você clicou em cancelar. Especifique um Arquivo.", vbExclamation
Exit Sub
Else: ImpTextFile FName:=File, Sep:="|"
End If
End Sub
 
 
 
Esse outro seria o código para copiar... furado! Aqui eu fui misturando tudo...

Function ImpTextFile(FName As String, Sep As String)
 
Dim RowNdx As Long
Dim ColNdx As Integer
Dim TempVal As Variant
Dim WholeLine As String
Dim Pos As Integer
Dim NextPos As Integer
Dim SaveColNdx As Integer

D1_.Activate
Range("A1:S57").ClearContents
D1_.Cells(1, 1).Select
 
Application.ScreenUpdating = False
 
On Error GoTo EndMacro:
SaveColNdx = ActiveCell.Column
RowNdx = ActiveCell.Row
 
Open FName For Input Access Read As #1
 
While Not EOF(1)
    Line Input #1, WholeLine
    If Right(WholeLine, 1) <> Sep Then
        WholeLine = WholeLine & Sep
    End If
    ColNdx = SaveColNdx
    Pos = 1
    NextPos = InStr(Pos, WholeLine, Sep)
    While NextPos >= 1
        TempVal = Mid(WholeLine, Pos, NextPos - Pos)
        Cells(RowNdx, ColNdx).Value = TempVal
        Pos = NextPos + 1
        ColNdx = ColNdx + 1
        NextPos = InStr(Pos, WholeLine, Sep)
    Wend
    RowNdx = RowNdx + 1
Wend
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #1
End Function

Alguém consegue me salvar?

 
Postado : 21/02/2017 1:16 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde brumoal

Para facilitar a tua participação no fórum, sugiro tomar conhecimento do conteúdo dos links abaixo:
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

[]s

 
Postado : 21/02/2017 2:46 pm
(@brumoal)
Posts: 0
New Member
Topic starter
 

Peço desculpas.

Será necessário apagar e refazer o tópico?

 
Postado : 21/02/2017 2:56 pm
(@brunoxro)
Posts: 0
New Member
 

Boa tarde brumoal,

Dê uma olhada no código que coloquei no módulo 2 do arquivo em anexo.

Não é um macro genérica que montei, no caso vai funcionar apenas para a planilha chamada 'D2'.
Para outras planilhas você apenas terá que copiar/colar a macro e alterar no código o nome da planilha de destino dos valores. Também não coloquei o 'OK' no txt e sim numa célula.

Teste e de retorno.

att,

 
Postado : 21/02/2017 3:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Brumal

Você compactou o teu arquivo, no teu caso eu só iria postar os links para teu conhecimento, mas como copie e colei o texto de outro tópico, acabei me esquecendo de apagar a parte do arquivo não compactado.

Fique tranquilo, pode seguir com o tópico.

[]s

 
Postado : 21/02/2017 4:14 pm
(@brumoal)
Posts: 0
New Member
Topic starter
 

Muito obrigado, Bruno!

O código funciona bem!

Depois de inserir a mensagem aqui, eu acabei evoluindo para um outro código que também funcionou legal, exceto pelo "ok".

Sub ImportD1()

Dim File As String
Dim FileToOpen

FileToOpen = Application.GetOpenFilename(Title:="Selecione o arquivo a ser importado", FileFilter:="Text Files *.xlsx (*.xlsx),")

File = FileToOpen

If FileToOpen = False Then
MsgBox "Você clicou em cancelar. Especifique um Arquivo.", vbExclamation

Exit Sub

Else:
'Abre e copia os dados da planilha selecionada
Workbooks.Open (File)
Range("A1:S57").Select
Selection.Copy
'Abre e cola os dados na sheet de referência
D1_.Activate
Range("A1").Select
ActiveSheet.Paste
Range("A1").Select
'Fecha a planilha selecionada
Workbooks.Open (File)
ActiveWorkbook.Close
'Retorna ao painel de importação
Painel_.Activate

MsgBox "Arquivo importado com sucesso!", vbExclamation

End If

End Sub

 
Postado : 24/02/2017 12:43 pm