Ir ao conteúdo
  • Cadastre-se

Excel Como adicionar um arquivo no VBA com apenas as primeiras letras?


Posts recomendados

Fiz esse macro aqui, porém queria trocar que invés de selecionar sempre o arquivo pelo nome dele selecionar apenas pelo 2021
alguém conseguiria me explicar como fazer?
 

Sub Teste()
'
' Teste Macro
' Teste
'
' Atalho do teclado: Ctrl+Shift+S
'
    Range("A1").Select
    ActiveWorkbook.Queries.Add Name:="2021-01-19-08-37-02", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Fonte = Table.FromColumns({Lines.FromBinary(File.Contents(""C:\Users\ryu.higashi\Desktop\CANTracer\2021-01-19-08-37-02.txt""), null, null, 1252)})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    Fonte"
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=2021-01-19-08-37-02;Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [2021-01-19-08-37-02]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "_2021_01_19_08_37_02"
        .Refresh BackgroundQuery:=False
    End With
End Sub

Ja tentei fazer o uso do Dim, mas não sei explicitamente como fazer!

Link para o comentário
Compartilhar em outros sites

@Midori Então o Arquivo sempre começa com o Ano que seria 2021, e no proximo ano mudaria para 2022, mas não estou conseguindo fazer a implementação desse Começo de nome, assim como em Python, em que eu poderia buscar um arquivo com os 4 primeiros caracteres, por exemplo:

 

Arquivo "2021-01-19-08-37-02"
Outros como "2021-05-19-13-37-02"
Gostaria de buscar apenas "2021-01-19-08-37-02"

Link para o comentário
Compartilhar em outros sites

@Ryu Higashi Você pode fazer um loop no diretório para para listar os arquivos e testar os primeiros 4 caracteres com o ano. Para listar esses arquivos tem a função Dir e para testar você pode usar Left para pegar uma parte o nome, supondo p.ex que os arquivos estejam em C:\Arquivos pode ser feito assim,

 

Sub Macro()
    Dim Arquivo As String
    Dim Ano     As String
    
    Ano = "2021"
    Arquivo = Dir("C:\Arquivos\")
    
    Do While Arquivo <> ""
        If Left(Arquivo, 4) = Ano Then Exit Do
        Arquivo = Dir
    Loop
    MsgBox Arquivo
End Sub

 

Dessa forma a variável Arquivo vai receber o nome do primeiro arquivo encontrado que começa com 2021.

 

Só tem um detalhe, de acordo com a documentação do VBA essa listagem não garante que os arquivos venham numa ordem especifica. Então o ideal seria jogar todos os arquivos de 2001 na planilha, ordenar e pegar o primeiro ou algo assim.

Link para o comentário
Compartilhar em outros sites

9 horas atrás, Ryu Higashi disse:

conseguiria implementar esse codigo Dir dentro do meu?

 

Basicamente só tem que substituir as strings do nome e diretório do arquivo pelas variáveis,

Sub Teste()
    Dim Arquivo     As String
    Dim Diretorio   As String
    Dim Ano         As String
    Dim Nome        As String
    
    Ano = "2021"
    Diretorio = "C:\Arquivos\"
    Arquivo = Dir(Diretorio)
    
    Do While Arquivo <> ""
        If Left(Arquivo, 4) = Ano Then Exit Do
        Arquivo = Dir
    Loop
    
    If Arquivo <> "" Then
        Nome = Mid(Arquivo, 1, Len(Arquivo) - 4)
    
        Range("A1").Select
        ActiveWorkbook.Queries.Add Name:=Nome, Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Fonte = Table." & _
        "FromColumns({Lines.FromBinary(File.Contents(""" & _
        Diretorio & Arquivo & """), null, null, 1252)})" & Chr(13) & _
        "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    Fonte"
    
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
            "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & _
            Nome & ";Extended Properties=""""", Destination:=Range("$A$1")).QueryTable
            .CommandType = xlCmdSql
            .CommandText = Array("SELECT * FROM [" & Nome & "]")
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh BackgroundQuery:=False
        End With
    End If
End Sub

 

7 horas atrás, Ryu Higashi disse:

E outra coisa, saberia me informar onde estudar VBA para se aperfeiçoar?

Achei muito bom o livro Desenvolvendo Macros no Excel do Steven Roman, publicado pela O'Reilly. É um livro antigo mas acho que ainda ajuda a conhecer mais o ambiente do VBA. Além disso tem o help do VBA que direciona para a documentação com F1 sobre algum comando no editor.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...