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

Assuntos que não estiverem relacionados as categorias acima. Se não souber em qual categoria sua mensagem se encaixa, envie aqui.
  • Avatar do usuário
  • Avatar do usuário
  • Avatar do usuário
  • Avatar do usuário
Avatar do usuário
Por Sandman
Posts Avatar
#519
Boa noite pessoal,

Estou tentando elaborar uma planilha, porem estou com algumas dificuldades, seguinte, preciso de uma forma de gerar um código novo para cada produto cadastrado, quanto a geração de código tranquilo, usei uma função maximo para pegar o maior valor da coluna codigo, ou seja, o ultimo que foi gerado e acrescento +1, porem eu precisaria que esses códigos fossem igual em um banco de dados com chave primaria, ou seja, precisaria que eles fossem unicos, assim, se eu adicionar um produto que ficou com o codigo 4, e logo depois apagar esse registro, preciso que o proximo seja gerado com o codigo 5, em banco de dados é facil resolver isso, mas aqui não tive uma ideia ainda de como fazer isso, alguem teria alguma ideia ae?

Desde já muito obrigado :D

grande abraço e viva o Excel \o/
Avatar do usuário
Por alexandrevba
Avatar
#521
Boa noite!!

Assim como em outra postagem minha ainda hoje, você vai fazer uma verificação.
Código: Selecionar todos
If Application.WorksheetFunction.CountIf(Worksheets("Plan1").Range("A1:A10"), Criterio) > 0 Then 
        MsgBox ("Duplicados!") 
    End If 
Att
Por duds
Posts
#523
Boa noite pessoal,

Primeiramente, alexandre de acordo com o que ele falou, acho que esse metodo que voce usou mais cedo no meu topico geraria um pequeno problema, se ele verificasse o último registro e usasse o mesmo de base para um novo registro, caso esse último registro fosse apagado, haveriam dois registros com o mesmo código, por isso acredito que possa ser de um jeito diferente!
alexandrevba escreveu:Boa noite!!

Assim como em outra postagem minha ainda hoje, você vai fazer uma verificação.
Código: Selecionar todos
If Application.WorksheetFunction.CountIf(Worksheets("Plan1").Range("A1:A10"), Criterio) > 0 Then 
        MsgBox ("Duplicados!") 
    End If 
Att

Então resolvi fazer uma planilha de exemplo, caso fosse para gravar o valor em uma variável, assim que você fechasse o excel a variável resetaria, então usei um método que o Laennder me ensinou em um tópico meu há um certo tempo.
A variável carrega o valor escrito em uma célula que se encontra em uma aba da planilha e então atualizará esse valor com o valor da variável +1. Essa planilha serviria apenas pra isso e para evitar que esse número seja alterado, mude a propriedade da planilha para xlSheetVeryHidden, então essa planilha só poderá ser visualizada se for alterada a propriedade na área de VBA. Pode até colocar senha no VBA para evitar que quem não tenha a senha altere tal propriedade.
Segue em anexo um exemplo apenas com a parte de salvar esse valor, caso queira que eu ensine a fazer o resto, me avise e terei o prazer em mostrar!
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Sandman
Posts Avatar
#529
obrigado pessoal por tentar ajudar, mas ainda to lutando para resolver, duds o esquema que vc fez eu até entendi, mas ele não funciona como eu preciso que funcione, o valor vai sendo incrementado, porem se eu apagar esse valor, por exemplo rodei até o 3, caso eu apague e clique novamente ele ira começar do 1 novamente, e é exatamente isso que não pode acontecer, preciso que o numero gerado seja unico, ou seja foi cadastrado com o numero 3 e depois de algum tempo ou até mesmo logo após o cadastro se tal registro for excluido o proximo já deve ser o 4 entendeu.... quando eu chegar em casa eu postarei aqui a planilha para ver se voces conseguem me ajudar...mas mesmo assim vlew mesmo ;)

ahhh e alexandre, obrigado tambem por tentar ajudar, mas pelo que entendi da sua função ela só me avisaria se ja existe numeros duplicados e não é isso que eu preciso, preciso justamente de algo que controle para que não ocorra duplicações...mas mesmo assim agradeço...

abraço
e viva o excel \o/
Avatar do usuário
Por laennder
Avatar
#531
Sandman, eu quando fiz algo semelhante sempre criava uma lista separada com o nome de todas as minhas tabelas, e o seu valor de 'Auto Incremento', daí que ia criar um novo registro, eu buscava esse valor na lista para o ID do registro, e aumentava um no valor. O valor nunca irá se repetir.
Por duds
Posts
#538
Sandman escreveu:obrigado pessoal por tentar ajudar, mas ainda to lutando para resolver, duds o esquema que vc fez eu até entendi, mas ele não funciona como eu preciso que funcione, o valor vai sendo incrementado, porem se eu apagar esse valor, por exemplo rodei até o 3, caso eu apague e clique novamente ele ira começar do 1 novamente, e é exatamente isso que não pode acontecer, preciso que o numero gerado seja unico, ou seja foi cadastrado com o numero 3 e depois de algum tempo ou até mesmo logo após o cadastro se tal registro for excluido o proximo já deve ser o 4 entendeu.... quando eu chegar em casa eu postarei aqui a planilha para ver se voces conseguem me ajudar...mas mesmo assim vlew mesmo ;)

ahhh e alexandre, obrigado tambem por tentar ajudar, mas pelo que entendi da sua função ela só me avisaria se ja existe numeros duplicados e não é isso que eu preciso, preciso justamente de algo que controle para que não ocorra duplicações...mas mesmo assim agradeço...

abraço
e viva o excel \o/

Certo sandman, eu entendi isso por isso comentei, coloque essa célula em uma planilha que não será mexida, alterando a sua preferência para xlSheetVeryHidden e então esse valor nunca será apagado. Dai quando você for adaptar à sua macro, você pode utilizar aquele valor, pois ele nunca será alterado!

Entendeu?
Avatar do usuário
Por Sandman
Posts Avatar
#539
duds escreveu: Certo sandman, eu entendi isso por isso comentei, coloque essa célula em uma planilha que não será mexida, alterando a sua preferência para xlSheetVeryHidden e então esse valor nunca será apagado. Dai quando você for adaptar à sua macro, você pode utilizar aquele valor, pois ele nunca será alterado!

Entendeu?
Hmmm entendi na teoria, mas na pratica acho que não sei fazer isso :lol:
vc poderia me ajudar ? quando eu chegar em casa, posso postar a planilha aqui pra vc dar uma olhada, pode ser?

desde já muito obrigado
abraço ;)
Por duds
Posts
#540
Perfeito, posso adaptar o código para você!
Avatar do usuário
Por FelipeGualberto
Posts Avatar
#1110
Código: Selecionar todos
'Em qual linha começam os dados?
Const DATA_BEGIN_ROW As Long = 2

'Qual dever ser o primeiro ID?

Const FORMULA_MASK As String = "=IFERROR(MATCH(TRUE,SMALL(List,ROW(List)-ROW(FirstCell)+1)-(ROW(List)-ROW(FirstCell)+1)>0,0),MAX(List)+1)"

Sub Main()
    Dim newID As Long
    
    newID = GetNewID(ThisWorkbook.Worksheets("Plan1").Columns("A"))
    Debug.Print newID
End Sub

Private Function GetNewID(pColumn As Range) As Long
    Dim lastRow As Long
    Dim newFormula As String
    Dim newID As Long
    Dim targetColumn As Long
    Dim workRange As Range
    Dim ws As Worksheet
    
    targetColumn = pColumn.Column
    Set ws = pColumn.Worksheet
    lastRow = ws.Cells(ws.Rows.Count, targetColumn).End(xlUp).Row
    
    If lastRow = 1 Then
        newID = 1
    Else
        Set workRange = ws.Cells(DATA_BEGIN_ROW, targetColumn).Resize(lastRow - DATA_BEGIN_ROW + 1)
        newFormula = FORMULA_MASK
        newFormula = Replace(newFormula, "List", workRange.Address)
        newFormula = Replace(newFormula, "FirstCell", workRange(1).Address)
        newID = Evaluate(newFormula)
    End If
    
    GetNewID = newID
End Function
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