Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por SandroLima
#60641
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.
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por SandroLima em 20 Nov 2020 às 10:59, em um total de 1 vez.
Por Strogonoff
#60658
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
SandroLima agradeceu por isso
Por SandroLima
#60661
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.
Por Strogonoff
#60771
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
Por SandroLima
#60792
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.
Por Strogonoff
#60795
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
Por SandroLima
#60799
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
Você não está autorizado a ver ou baixar esse anexo.

Olá pessoal, espero que estejam bem. Tenho[…]

Boa noite. Sou novo no VBA, veja se resolve o seu […]

Top, asism ficou bem melhor, Muito Obrigado

Erro em tempo de Execução...

Bom dia amigos, neste código abaixo esta da[…]

Boa tarde. Segue uma opção. At&ea[…]

Leitura de planilha fechada

Consegui explicar :) :shock: :?: :?: N&at[…]

Bom-dia! Numa pasta do servidor [ D:\Server\BemVi[…]

Enviando email outlook

Boa tarde! Estou usando o codigo abaixo e esta fun[…]