Página 1 de 1

Gerar número da ordem de serviço

Enviado: 01 Set 2020 às 16:21
por amarall04
Boa tarde,

Estou buscando melhorar as minhas planilhas de trabalho então venho me aperfeiçoando e aplicando algumas macros e gostaria de uma ajuda para escrever a macro para a função abaixo, pois não estou conseguindo.

O numero da O.S é composto da sigla da filial seguido pelo ano vigente e o numero sequencial, porém não estou conseguindo escrever a macro.
EX.: DP2020/001234 OU;
TE2020/001235

A ideia é entrar com o nome da empresa e automaticamente gerar o numero conforme o modelo.

Empresa____________N.° Ord. Serviço
EMPRESA 1 (DP)__________DP2020/001234
EMPRESA 2 (TE)__________TE2020/001235

Desde ja agradeço a ajuda.

Grato.

Fabio

Re: Gerar número da ordem de serviço

Enviado: 02 Set 2020 às 09:14
por babdallas
Anexa um pequeno exemplo, por favor.

Re: Gerar número da ordem de serviço

Enviado: 02 Set 2020 às 09:50
por amarall04
Blz,

eu adicionei o modelo e deixei em amarelo a célula que gera seria o código. hoje eu fiz através de fórmulas, mas não consigo converter em vba.

Re: Gerar número da ordem de serviço

Enviado: 02 Set 2020 às 10:59
por babdallas
A partir da linha 16, cada linha soma 1 no código (a partir do 1234)?

Re: Gerar número da ordem de serviço

Enviado: 02 Set 2020 às 11:44
por babdallas
Veja se ajuda:
Código: Selecionar todos
Option Explicit

Public Function GerarOS(ByVal strEmpresa As String, _
                        ByVal lngIni As Long, _
                        ByVal lngAno As Long) As String
    Dim strCod      As String
    Dim dicEmp      As Object
    Dim lobTab      As ListObject
    Dim lngLin      As Long
    
    Set lobTab = wshAux.ListObjects("tbEmp")
    Set dicEmp = VBA.CreateObject("Scripting.Dictionary")
    
    For lngLin = 1 To lobTab.DataBodyRange.Rows.Count
        If Not dicEmp.Exists(lobTab.DataBodyRange.Cells(lngLin, 1).Value2) Then
            dicEmp.Add lobTab.DataBodyRange.Cells(lngLin, 1).Value2, _
                        lobTab.DataBodyRange.Cells(lngLin, 2).Value2
        End If
    Next lngLin
    
    strCod = dicEmp(strEmpresa) & lngAno & "/" & _
                VBA.String(6 - VBA.Len(lngIni), "00") & _
                (lngIni + Application.Caller.Row - 16)
    
    GerarOS = strCod
    
    Set dicEmp = Nothing
    Set lobTab = Nothing
End Function

Re: Gerar número da ordem de serviço

Enviado: 02 Set 2020 às 13:27
por amarall04
babdallas escreveu:A partir da linha 16, cada linha soma 1 no código (a partir do 1234)?
Sim, mas este valor será atualizado na aplicação da tabela. Pelo que eu entendi você me indicou uma função e estou tentando entende-la. o intuito de gerar o código que seja feito a partir do momento que insiro a o nome da empresa e caso eu altere o nome da empresa ele altere o código.

Desde ja agradeço a atenção.

Re: Gerar número da ordem de serviço

Enviado: 02 Set 2020 às 13:40
por babdallas
Uma pequena correção para tornar a função volátil. Esta função tem como argumentos o nome da empresa, o valor inicial do número sequencial e o ano.
Código: Selecionar todos
Option Explicit

Public Function GerarOS(ByVal strEmpresa As String, _
                        ByVal lngIni As Long, _
                        ByVal lngAno As Long) As String
    Dim strCod      As String
    Dim dicEmp      As Object
    Dim lobTab      As ListObject
    Dim lngLin      As Long
    
    Application.Volatile
    
    Set lobTab = wshAux.ListObjects("tbEmp")
    Set dicEmp = VBA.CreateObject("Scripting.Dictionary")
    
    For lngLin = 1 To lobTab.DataBodyRange.Rows.Count
        If Not dicEmp.Exists(lobTab.DataBodyRange.Cells(lngLin, 1).Value2) Then
            dicEmp.Add lobTab.DataBodyRange.Cells(lngLin, 1).Value2, _
                        lobTab.DataBodyRange.Cells(lngLin, 2).Value2
        End If
    Next lngLin
    
    strCod = dicEmp(strEmpresa) & lngAno & "/" & _
                VBA.String(6 - VBA.Len(lngIni), "00") & _
                (lngIni + Application.Caller.Row - 16)
    
    GerarOS = strCod
    
    Set dicEmp = Nothing
    Set lobTab = Nothing
End Function

Gerar número da ordem de serviço

Enviado: 03 Set 2020 às 22:29
por amarall04
Boa noite, desculpe a demora mas estava em viajem... obrigado me ajudou muito.