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
#63203
VBA
Finalidade:
Copiar as informações da BASE e trazer para a declaração de forma que siga constantemente até que seja encontrada uma celula vazia

Como iria funcionar:
Ao clicar no "botão executar"
Copia a informação da primeira Linha da guia "BASE" , ou seja de A1:D1 e cola na na guia DECLARAÇÃO a partir da celular B5
1º Iria aparecer assim: PARA PESSOAL 1 UF: AC

E seguiria um LOOP constante, ou seja, a próxima seria copia da A2:D2
2º Copia A2:D2 PARA PESSOAL 2 UF: AC
3º Copia A3:D3 PARA PESSOAL 3 UF: AC
4º ... PARA PESSOAL 4 UF: AC
5º ... PARA PESSOAL 5 UF: AC
6º ... PARA PESSOAL 6 UF: AL
7º ... PARA PESSOAL 7 UF: AL
8º ... PARA PESSOAL 8 UF: AL
9º ... PARA PESSOAL 9 UF: AL
10º ... PARA PESSOAL 10 UF: AL
11º ... PARA PESSOAL 11 UF: AL
12º ... PARA PESSOAL 12 UF: AM
13º ... PARA PESSOAL 13 UF: AM

Até encontrar a ultima celular vazia e para ....

Obs: A cada loop ele salva o arquivo (mas já tenho esse CÓD. Preciso mesmo apenas a configuração do loop

O MODELO DA PLANILHA ESTÁ NO ANEXO QUEM PUDER AJUDAR MONTANDO O CÓD E COMPARTILHAR SUPER

AGRADEÇO
VBA - CRIANDO LOOP COPIA E COLA.xlsx
Você não está autorizado a ver ou baixar esse anexo.
#63214
Código: Selecionar todos
Public Sub CopiarDados()
    Dim lngUltLin           As Long
    Dim arr                 As Variant
    
    With wshBD
        lngUltLin = .Cells(.Rows.Count, 1).End(xlUp).Row
        arr = .Range("A1").Resize(lngUltLin, 4).Value2
        wshDec.Range("B5").Resize(UBound(arr, 1), UBound(arr, 2)).Value2 = arr
    
        .Range("A1").Resize(lngUltLin, 4).Copy
        wshDec.Range("B5").Resize(UBound(arr, 1), UBound(arr, 2)).PasteSpecial xlPasteFormats
    End With
End Sub
Você não está autorizado a ver ou baixar esse anexo.
luizpaps agradeceu por isso
#63222
achei bem enxuto esse código, tinha pensado em um loop, mas essa macro sua ficou bem melhor, poderia fazer o favor de explicar essa linha:
wshDec.Range("B5").Resize(UBound(arr, 1), UBound(arr, 2)).PasteSpecial xlPasteFormats
porque tem esse 1 e esse 2 depois do array
#63237
A matriz arr possui duas dimensões, sendo a primeira dimensão representando as linhas do intervalo copiado e a segunda dimensão representando as colunas do intervalo copiado. Ou seja, o tamanho deste array representa quantas linhas e quantas colunas eu preciso para redimensionar o intervalo para colar.
Logo, ubound(arr,1) pega o número máximo de linhas. ubound(arr,2), pega o número máximo de colunas. Neste caso, 1 representa a primeira dimensão da arr e 2 representa a segunda dimensão da arr.
Ai eu utilizo isso para redimensionar a célula que vai receber os dados copiados. Desta forma, a célula é transformada em um intervalo do mesmo tamanho dos dados copiados.
Não sei se ficou claro.
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