Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
Por FelipeArruda
Posts
#11706
Boa tarde!
Gostaria de saber se é possível ler através de uma macro(contar a quantidade de linhas não vazias) de outra planilha sem precisar abri-la.

Atualmente tenho uma planilhar em excel que tem alguns nomes das planilhas que são importadas de um sistema, preciso que através de uma coluna (que contenha os nomes) vá ate o diretório (por uma variável) e localize os arquivos que contenha os nomes e para cada planilha ele abra e faça uma contagem das linhas não vazias.

A respeito da contagem, já consegui fazer, porém esbarrei em não conseguir fazer com que ao executar o macro ele vá até o diretório e localize a planilhas.

Ex: através de uma coluna em uma planilha padrão ele vá ao diretório localize a planilha e faça a contagem das linhas.
Avatar do usuário
Por DJunqueira
Avatar
#11721
Se vc tem o diretório e tem o nome da planilha vc não precisa de macro p/ contar o número de linhas com valor, basta usar a função:
=CONT.VALORES('D:\nomediretório\Planilhas\[NomePlanilha.xlsx]Plan1'!A:A)

Vc tb pode fazer Nova Consulta em Dados p/ retornar o número de linha em cada arquivo q vc desejar. Depois é só clicar no botão Atualizar.
Por FelipeArruda
Posts
#11734
Entendi, porém eu tenho cerca de 100+ planilhas neste diretório que precisa ser feito a contagem e os números de registros variam de acordo com a planilha, algumas eu tenho poucos registros outras eu tenho quase milhões de registros, por isso achei mais fácil fazer uma macro que pega os valores e pare quando for a célula vazia.

Concorda comigo? Ou tem outra solução que possa me ajudar?

Att
#11799
Bom dia!!

Isso deve ajudar, no mais é só adaptar.
Código: Selecionar todos
Sub AleVBA_2322()
    Dim wb As Workbook, wbXLS As Workbook
    Dim sPath As String, sFilename As String
    Dim NbRows As Integer, rg As Range
    DisplayAlerts = False
    Set wb = ThisWorkbook
    Application.ScreenUpdating = False
    sPath = "C:\Users\AleVBA\"       'Caminho de arquivos XLS
    sFilename = Dir(sPath & "*.xls")
    On Error Resume Next
    Do While Len(sFilename) > 0
        If sFilename <> ThisWorkbook.FullName Then
            Set wbXLS = Workbooks.Open(sPath & sFilename)           'Abre arquivos
            NbRows = wbXLS.Sheets(1).Range("A60000").End(xlUp).Row  'Num de linhas (favor ajustar qtd lin para seu caso)
'Na guia de nome AleVBA abaixo, coluna A ficará os nomes e Coluna B qtd de linhas
            Set rg = wb.Worksheets("AleVBA").Range("A60000").End(xlUp).Offset(1, 0)
            rg = sFilename
            rg.Offset(0, 1) = NbRows
            wbXLS.Close False   'Fecha os arquivos
        End If
        sFilename = Dir
    Loop
    Application.ScreenUpdating = True
    DisplayAlerts = True
End Sub
Att
#11834
Agora estou com um pouco de dificuldade de encontrar a planilha aberta.

Tenho uma planilha(Padrao.xlsm) que os valores iram ser gravados nela, e ao clicar no botão de atualizar os dados ele abre as planilhas faz a contagem e guarda na variável.

Porém não estou conseguindo fazer com que ele grave essas informações na planilha(Padrao.xlsm), pois quando mando ele abrir as outras planilhas para fazer a contagem ele grava na planilha em aberta(de contagem).

Há uma forma de pegar essas planilha e gravar nela?
Código: Selecionar todos
Sub atualizaDados()
    Dim sPath As String
    Dim linha As Integer
    Dim coluna As Integer
    
    Dim wb As Workbook, wbXLS As Workbook
    
    Dim a As String
    Dim b As String
    Dim qtd As Integer
    
    varColuna = 1
    varLinha = 1
    varConteudo = 1
    
    'Define a linha e coluna que ira comecar
    linha = 3
    coluna = 2
    
    'Caminho da pasta dos arquivos
    sPath = "C:\Users\felipe.arruda\Desktop\Nova pasta\"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set arquivo = FSO.GetFolder(sPath)
    
    'Varre cada linha da coluna (linha x coluna)
    While Cells(linha, coluna).Value <> Empty
            a = UCase("sgu_" & Cells(linha, coluna).Value & ".csv")
        For Each arq In arquivo.Files
            b = UCase(arq.Name)
        
            If a = b Then
                'Abre o arquivo
                Set wbook = Application.Workbooks.Open(sPath & arq.Name)
                
                'Faz a contagem de linhas no arquivo
                Do While varConteudo <> Empty
                    varLinha = varLinha + 1
                    varConteudo = Cells(varLinha, varColuna).Value
                Loop
                
                'Alimenta a planilha
                Sheets(1).ActiveCell.Offset("C", linha).Value = "a"
                'Fecha o arquivo
                
                wbook.Close
            End If
            
        Next arq
        linha = linha + 1
    Wend
        
End Sub
#11835
Boa tarde!!!

Se você observou o código na linha
Código: Selecionar todos
Set wb = ThisWorkbook
O arquivo (somente o arquivo) que estiver aberto e com o código dentro e com uma guia chamada "AleVBA" conforme abaixo.
Código: Selecionar todos
Set rg = wb.Worksheets("AleVBA").Range("A60000").End(xlUp).Offset(1, 0)
Então os dados serão mostrados neste arquivo.

Por tanto, insira o código dentro do arquivo Padrao.xlsm, deixe só esse arquivo aberto, rode a macro!!
Não se esqueça até apontar o caminho dos arquivos de deseja contar as linhas
Código: Selecionar todos
sPath = "C:\Users\AleVBA\"   
Att
Por FelipeArruda
Posts
#11851
Meu caro muito obrigado pela ajuda.
Consegui progredir...
Irei terminar de fazer o que preciso, e assim que conseguir concretizar irei fechar o tópico, por enquanto deixarei aberto para não ficar criando outros.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord