Página 1 de 1

Retornar Nº da linha

Enviado: 19 Nov 2020 às 13:04
por SandroLima
Boa tarde.

Na macro da planilha anexa preciso de ajuda com duas necessidades:

1) A macro me retorna o número do registro da célula selecionada... como faço para que me retorne o nº da linha também?
Por exemplo no caso da planilha, caso eu estivesse com a célula de registro 468 selecionada a macro me retornasse "Linha 20"

2)Tenho um trecho de código que faz referência as células da Coluna 2 da planilha
Código: Selecionar todos
If IsNumeric(Cells(ActiveCell.Row, 2)) Then
        N_Reg_Ativo = Cells(ActiveCell.Row, 2).Value
    End If
A tabela pode mudar de posição na planilha... como substituo o trecho do código acima para referenciar especificamente a coluna Registro em vez de coluna 2?

Segue planilha anexa para verificação.

Obrigado a quem puder ajudar.

Re: Retornar Nº da lina

Enviado: 19 Nov 2020 às 20:19
por Strogonoff
Boa noite!!!
Tente isso
Dim iVerifLin as Integer
If IsNumeric(Cells(ActiveCell.Row, 2)) Then
N_Reg_Ativo = Cells(ActiveCell.Row, 2).Value
iVerifLin = Range("B:B").find( N_Reg_Ativo).Row
End If

Re: Retornar Nº da lina

Enviado: 20 Nov 2020 às 10:32
por SandroLima
Bom dia.

Funciona adequadamente a localização do número da linha... obrigado pela contribuição.

Ainda gostaria de ajuda para alterar essa parte do código:
If IsNumeric(Cells(ActiveCell.Row, 2)) Then
N_Reg_Ativo = Cells(ActiveCell.Row, 2).Value
End If
Como a tabela pode mudar de posição na planilha necessito substituir o trecho do código acima para referenciar especificamente a coluna Registro em vez da coluna 2.

Re: Retornar Nº da linha

Enviado: 24 Nov 2020 às 13:00
por Strogonoff
use a mesma formatação do codigo que passei, trocando o final o Row por column.
Ficando
variavel = range(a linha que deseja).find( a variavel procurada).column..

essa função find é uma mao na roda, não acha?
Abraço

Re: Retornar Nº da linha

Enviado: 25 Nov 2020 às 17:17
por SandroLima
Excelente a função find.
use a mesma formatação do codigo que passei, trocando o final o Row por column.
Ficando
variavel = range(a linha que deseja).find( a variavel procurada).column..
Não é exatamente essa a necessidade.

Nesse trecho do código :
Código: Selecionar todos
Dim iVerifLin as Integer
If IsNumeric(Cells(ActiveCell.Row, 2)) Then
N_Reg_Ativo = Cells(ActiveCell.Row, 2).Value
iVerifLin = Range("B:B").find( N_Reg_Ativo).Row
End If
Queria substituir o "2" pela coluna específica, no caso a coluna [Registro].
Vou escrever erroneamente mas seria algo nesse sentido:
Código: Selecionar todos
Dim iVerifLin as Integer
If IsNumeric(Cells(ActiveCell.Row, .ListColumns("Registro"))) Then
N_Reg_Ativo = Cells(ActiveCell.Row, ListColumns("Registro")).Value
iVerifLin = Range(ListColumns("Registro")).find( N_Reg_Ativo).Row
End If
Nesse sentido... gostaria assim pq a tabela pode mudar de posição na planilha e pode acontecer de a Coluna [Registro] não ser sempre a Coluna 2.

Re: Retornar Nº da linha

Enviado: 25 Nov 2020 às 19:20
por Strogonoff
amigo
Boa noite!!!
deixa ver se eu entendi.
você tem um valor que pode estar mudando a coluna,certo? e esse valor está na variável registro, seria isso
o cabeçalho da coluna é sempre registro?
faça um while cells(1,iultcol).value <>"" ' levando em conta que o cabeçalho está na linha 1
if cells(1,iultcol).value = registro then
numero da coluna = iultcol
iultcol = iultcol + 1
wend

sua linha de programação ficaria
N_Reg_Ativo = Cells(ActiveCell.Row,numero da coluna)).Value

se ficar uma duvida é so falar..
seria interessante uma planilha exemplo... com nomes ficticios, se ficou alguma duvida...
estou a disposião
abraço

Re: Retornar Nº da linha

Enviado: 26 Nov 2020 às 10:14
por SandroLima
Bom dia
deixa ver se eu entendi.
você tem um valor que pode estar mudando a coluna,certo? e esse valor está na variável registro, seria isso
o cabeçalho da coluna é sempre registro?
Isso... o valor procurado está sempre na coluna registro... o que pode mudar é a posição da tabela na planilha.

No caso a tabela inicia na coluna 2 da planilha mas pode iniciar em outra coluna.
Mas quero sempre apontar para a coluna Registro.

Tentei fazer da seguinte forma mas não funcionou:
Código: Selecionar todos
Sub Novo_Parcelamento()
    
    Dim Plan As Worksheet
    Dim Tabela As ListObject
    Dim Matriz() As Variant
    Dim Col_Zero As Long, Col_Reg As Long
    Dim N_Reg_Ativo As Long
    Dim N_Reg_Buscado As Integer
    Dim Linha As Long
    
    
    Set Plan = Wsh_AtivDiarias
    Set Tabela = Plan.ListObjects("TB_AtivDiarias")
    
    Matriz = Tabela.DataBodyRange.Value
    
    Col_Zero = Tabela.DataBodyRange.Range("A1").Column - 1
    Col_Reg = Tabela.ListColumns("Registro").DataBodyRange.Column - Col_Zero
    
    If IsNumeric(Cells(ActiveCell.Row, Col_Reg)) Then
        N_Reg_Ativo = Cells(ActiveCell.Row, Col_Reg).Value
        Linha = Range(Col_Reg).Find(N_Reg_Ativo).Row
    End If
    
    MsgBox N_Reg_Ativo
    
    MsgBox Linha
    
End Sub
se ficar uma duvida é so falar..
seria interessante uma planilha exemplo... com nomes ficticios, se ficou alguma duvida...
estou a disposião
Havia mandado a planilha de exemplo anexa no início do tópico.... vou enviar novamente