Ir para conteúdo
Fórum Script Brasil
  • 0

Cópia De Uma Linha Inteira


bonoddr

Pergunta

Posts Recomendados

  • 0

Não sei se a linha para "cortar" uma linha inteira e "colar" é este, mas foi o que eu achei:

para celulaV=Cells(7,3) e celulaP=Cells(6,3)

Range(celulaV).EntireRow.Cut (Range(celulaP).EntireRow.PasteSpecial)

Toda ajuda é bem-vinda, estou pesquisando também. Valeu!

bonoddr

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal progredi muito, estou pesquisando direto, mas preciso de uma única informação... Quero saber como faço pra percorrer as linhas do excel e como saber que cheguei ao final delas. Gostaria de saber quais as propriedades e métodos que devo utilizar, e como uso o EOF nessa história toda. Valeu!

bonoddr

Link para o comentário
Compartilhar em outros sites

  • 0

Brother....

Te passei via PM, mas acho que ainda não viu...

Tudo bem biggrin.gif

Para linhas:

Application.ThisWorkbook.WorkSheet(nome ou index da planilha).UserRange.Rows.Count

Para colunas:

Application.ThisWorkbook.WorkSheet(nome ou index da planilha).UserRange.Columns.Count

Acho que esse método resulta em um Integer

Abraços,

William Rodrigues

Link para o comentário
Compartilhar em outros sites

  • 0

Independente disso cara, comparando com métodos de acesso a bancos de dados em VB, você chega ao final dos registros de uma tabela, por exemplo, com algo assim: RecordSet.EOF

Percorre os registros com algo assim: RecordSet.Count

Quero simplesmente saber como fazer as mesmas coisas, só que em VBA excel. Qualquer coisa, eu te mandei uma PM explicando mais detalhadamente. Valeu e esperando respostas,

bonoddr

OBS.: você me deu uma idéia, para quando uma linha inteira for vazia, encerre a contagem, mas ainda preciso de um método que conte o número de linhas. E ainda um outro que reconheça uma linha inteira como vazia.

Link para o comentário
Compartilhar em outros sites

  • 0

O problema é justamente que uma planilha do Excel não é como uma tabela, ou seja, não existe um EOF. Em uma tabela, mesmo que um registro esteja vazio em todos os campos, o espaço dele é ocupado. Já em uma planilha do Excel isso não é necessariamente verdade, ainda mais se considerarmos que não existem campos e registros numa planilha. Essa idéia é apenas uma abstração nossa.

De qualquer forma, se quiser saber quantas linhas e colunas existem, basta ver o conteúdo das propriedades Rows.Count e Columns.Count.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Complementando a resposta acima, assim você pode saber se uma linha inteira está vazia (nesse exemplo é verificada a primeira linha):

    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    valores = Selection.Value
    retorno = True
    For Each elemento In valores
        If elemento <> vbNullString Then
            retorno = False
            Exit For
        End If
    Next elemento
    MsgBox retorno

Se retorno for True é porque ela está vazia, caso contrário (False) tem alguma coluna com texto.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara muito obrigado! Este seu código me ajudou muito.. Mas tem um porém, no exemplo abaixo, quando coloco pra exibir o conteúdo de Rows.Count, ele retorna o número = 65536. porque isso???

E, ao invés de usar o número fixo (conta < 4), gostaria de usar algo assim:

(conta < Rows.Count), sacou?

Sub teste()
Dim conta As Integer
conta = 1

While (conta < 4)
    Range("A" & conta).Select
    Range(Selection, Selection.End(xlToRight)).Select
    valores = Selection.Value
    retorno = True
    For Each elemento In valores
        If elemento <> vbNullString Then
            retorno = False
            'valores = Selection.Delete
            Exit For
        End If
    Next elemento
    MsgBox retorno
    MsgBox Rows.Count
conta = conta + 1
Wend
End Sub

Ah, mais uma coisa: no código tá comentado, eu gostaria de remover uma linha inteira quando ela for nula. É dessa maneira que procedo?

Agradeço pela ajuda! Tudo o que ajudou até agora foi bastante! cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

hummm valeu mesmo.. Então como faço para Rows.Count retornar o número de linhas que realmente estão preenchidas na planilha?

por exemplo, tenho uma planilha de 8000 linhas, então quero que Rows.Count retorne o valor 8000 ao invés do número total de linhas de uma planilha (inclusive linhas nulas), sacou?

Resumindo: quero poder usar no meu código que exibi:

while (conta < Rows.Count)

ao invés de:

while (conta < 8000)

Dessa maneira, eu posso usar o macro em qualquer planilha, e não em uma específica que contém 8000 linhas.

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

A resposta é que não pode. Rows.Count sempre retornará a quantidade total de linhas de uma planilha, ou seja, se na próxima versão do Excel a quantidade de linhas dobrar, Rows.Count retornará 131072, por exemplo.

No entanto, pode-se fazer quase a mesma coisa que foi feita para descobrir se uma linha está vazia ou não. Ou seja, percorrer todos os elementos de uma coluna e verificar qual a última célula preenchida. É claro que isso só funcionará se todas as outras colunas seguirem o mesmo padrão. O exemplo abaixo mostrará qual a última linha preenchida da coluna "A":

    Dim última As Long
    última = 0
    Columns("A:A").Select
    valor = Selection.Value
    For i = LBound(valor) To UBound(valor)
        elemento = valor(i, 1)
        If elemento <> vbNullString Then
            última = i
        End If
    Next i
    MsgBox "Última linha usada da primeira coluna:" & última

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Aproveitando a oportunidade, queria saber como coloco essas macros em qualquer planilha que eu abrir do excel. Ao invés de ter sempre que criar os módulos e copiar/colar os códigos. Valeu!

bonoddr

Ah lenbrei também, queria fazer como faço em C++, onde cada função retorna um valor específico. Como faço isso em VB, com os Functions ou com os Sub´s? Se puder dar um exemplo...

Link para o comentário
Compartilhar em outros sites

  • 0

Quanto a isso de colocar em todas as planilhas do Excel eu não sei se é possível. No Word existe o Normal.dot que é um "modelo" e tudo que você coloca nele fica disponível, mas não achei algo assim no Excel.

Naquele caso de apagar as linhas, nem reparei que a instrução está no lugar errado do jeito que você colocou. O correto seria:

Sub teste()
 Dim conta As Integer
 conta = 1

 While (conta < 4)
   Range("A" & conta).Select
   Range(Selection, Selection.End(xlToRight)).Select
   valores = Selection.Value
   retorno = True
   For Each elemento In valores
       If elemento <> vbNullString Then
           retorno = False
           Exit For
       End If
   Next elemento
   if retorno then
       Selection.EntireRow.Delete
   endif
   MsgBox retorno
   MsgBox Rows.Count
   conta = conta + 1
 Wend
End Sub
No VB, functions são funções e subs são rotinas, sendo que a primeira pode retornar um valor e a segunda não. Exemplo de uma função:
function Soma(byval n1 as integer, byval n2 as integer) as integer
    Soma = n1+n2
end function
Nesse exemplo acima a função "Soma" terá dois argumentos passados por valor (n1 e n2), ambos inteiros, e retornará também um inteiro. No C++ usa-se a instrução return para retornar o valor, já no VB usa-se o nome da função como se fosse uma variável, atribuindo o valor de retorno à ela. Exemplo de uma rotina:
sub Alô(byval nome as string)
    msgbox "Alô, " & nome
end sub
Repare que na sub não existe o tipo, já que não existe um valor de retorno. Exemplos de uso da função e da rotina acima:
valor = Soma(2, 3)
Alô "bonoddr"

Qualquer dúvida, 'stamos aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Muitíssimo obrigado cara! Eu estou um pouco acostumado a dividir o código em sub-funções em C++ daí me interessou como procedo na mesma linha de estruturação de código pelo VB.

Valeu mesmo, me ajudou bastante!!!

bonoddr

Link para o comentário
Compartilhar em outros sites

  • 0

Mais uma coisinha: eu dividi o meu programa em um arquivo principal e 3 módulos. Como especifico no meu arquivo principal a execução de cada um dos módulos?

Queria saber também se eu posso especificar estes módulos como functions, ou seja, que retornem algum valor que tenha sido especificado por mim. Então, pego este valor e uso no meu sub principal.

Link para o comentário
Compartilhar em outros sites

  • 0

Não sei se entendi bem, mas seria isso?

Sub Principal()
   Rotina1
   Rotina2
   Rotina3
End Sub

Quanto a retornar valores, só as funções podem fazê-lo. Ou você usará alguma propriedade do módulo (variáveis).

Qualquer dúvida, 'stamos aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...