Ir ao conteúdo

Excel Selecionar periodo com variaveis VBA


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Bom dia!

 

Sei que parece besteria, mas ainda estou me adaptando com o VBA,

 

Tenho um código bem simples, a função dele é percorrer as linhas da coluna a da Sheet "ORÇAAMENTO" e verificar o resultado "INICIO",

se encontrado, guardar o numero da linha na variavel Inicio.

O mesmo para a palavra "FIM", guardar o numero da linha na variavel "Final"

 

Daí pretendo criar um período "A" Inicio até "F" Final e copia-los.

Esse resultado vou colar na Sheet CONTRATO posição "A16".

 

Esse é meu codigo:

<

For Counter = 1 To 200
 Set curCell = Worksheets("ORÇAMENTO").Cells(Counter, 1)
 If curCell.Value = "INICIO" Then Inicio.Value = contaLinha.Row
 If curCell.Value = "FIM" Then Final.Value = contaLinha.Row
 
 Range("A & Inicio : B & Final").Copy
Worksheets("CONTRATO").Range("A16").PasteSpecial
                    
 
 Next Counter

>

 

Aparece p erro '1004 - O método Range do Objeto Global Falhou

 

Onde estou errando?

Desde já Grato!!!

Postado

@Neodenn Como declarou as variáveis Inico e Final? Quando tenta usar a propriedade Value sugere que seja um Range, mas na parte que tenta copiar é como se fosse um inteiro.

 

34 minutos atrás, Neodenn disse:

 Range("A & Inicio : B & Final").Copy

 

No VBA o que está entre em aspas é uma string/texto. Então nessa parte você não está passando um range válido, mas um texto (incluindo "Inicio" e "Final"). Se quiser passar o valor de uma variável terá que concatenar com o operador &.

  • Obrigado 1
Postado

@Midori Então, o código completo está ai, acima do for seria o inicio da sub.

 

Declaro como  Integer?

 

Dim Inicio As Integer

Dim Final As Integer

 

E na Range eu faria como?

 

 Range("A" & Inicio : "B" & Final).Copy

 

Estou perdido rsrsrrsrsr, nem sei se meu codigo está transmitindo a logica do que pretendo fazer.

  • Solução
Postado
58 minutos atrás, Neodenn disse:

Declaro como  Integer?

Pode ser como Integer e nesse caso não existe propriedade para essa variável como fez em Inicio.Value.

 

58 minutos atrás, Neodenn disse:

 Range("A" & Inicio : "B" & Final).Copy

 

Só faltou concatenar Inicio com o outro Range assim,

Range("A" & Inicio & ":B" & Final).Copy

 

Mas antes de tentar copiar você tem que verificar se as variáveis Inicio e Final receberam os valores das linhas. Se rodar o código sem testar essas variáveis vai dar erro já na primeira iteração que não vai ter atribuído esses valores. Uma forma de controlar isso pode ser assim onde o comando de cópia só acontece quando FIM é encontrado e se Inicio for diferente de zero,

Sub Macro()
    Dim Counter As Integer
    Dim Inicio  As Integer
    Dim Final   As Integer
    
    For Counter = 1 To 200
        Dim curCell As Range
        
        Set curCell = Worksheets("ORÇAMENTO").Cells(Counter, 1)
 
        If curCell.Value = "INICIO" Then
            Inicio = curCell.Row
        ElseIf curCell.Value = "FIM" Then
            Final = curCell.Row
            
            If Inicio <> 0 Then
                Range("A" & Inicio & ":B" & Final).Copy
                Worksheets("CONTRATO").Range("A16").PasteSpecial
            End If
            Inicio = 0
        End If
    Next Counter
End Sub

 

  • Obrigado 1
Postado

Deu certo, valeu novamente!!!!

 

Pra quem usar esse codigo futuramente para estudos ou para solucionar algum problema é legal limpar a seleção de copia após a ativação do comando. (   Application.CutCopyMode = False )

 

Para isso, deve-se coloca-la ao final da macro, dessa forma...

<

Sub Macro()

  Dim Counter As Integer
    Dim Inicio  As Integer
    Dim Final   As Integer
    
    For Counter = 1 To 200
        Dim curCell As Range
        
        Set curCell = Worksheets("ORÇAMENTO").Cells(Counter, 1)
 
        If curCell.Value = "INICIO" Then
            Inicio = curCell.Row
        ElseIf curCell.Value = "FIM" Then
            Final = curCell.Row
            
            If Inicio <> 0 Then
                Range("A" & Inicio & ":F" & Final).Copy
                Worksheets("CONTRATO").Range("A19").PasteSpecial
            End If
            Inicio = 0
        End If
    Next Counter
    Application.CutCopyMode = False

End Sub

 

>

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...