Terminado

Programacion Vba Excel

Publicado el 25 Mayo, 2020 en Programación y Tecnología

Sobre este proyecto

Abierto

Hola
Me podrían brindar un suporte sobre un código VBA que estoy trabajando en excel; el concepto es hacer un código que trabaje en una columna con las siguientes condiciones:

- Celda con Lista desplegable que incluya un guion de concatenar, donde se ha unido un numero y una descripción, luego devolver solo el numero.
- Celda con Lista desplegable con cualquier numero o texto que no contenga el guion.
- Celda con cualquier numero o letra.


He logrado encontrar y evaluar algunos códigos que describo a continuación; El código 1 y 2 funcionan mas o menos igual, pero el problema es que no devuelve el numero donde se encuentra el guion; mientras que el codigo 3 funciona bien para devolver el numero que tiene el guión, pero para el resto de celdas no funciona, borra todo.

CODIGO 1
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim m
  Dim n%
If Target.Column = 1 Then
  m = Target.Value
  application.EnableEvents = True
ElseIf Target.Column = 1 Then

    n = InStr(1, Target.Value, " - ")
    Application.EnableEvents = False
      Target.Value = Left(Target.Value, n)
    Application.EnableEvents = True
End If
End Sub

CODIGO 2
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n As String
Dim m As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Target.Column = 1 Then
  If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
    GoTo Exitsub
  Else: If Target.Value = "" Then GoTo Exitsub Else
    Application.EnableEvents = False
    m = Target.Value
    Application.Undo
  n = InStr(1, Target.Value, " - ")
      If n = "" Then
        Target.Value = m
      Else
        If InStr(1, n, m) = 0 Then
            Target.Value = n & "," & m
      Else:
        Target.Value = n
      End If
    End If
  End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub

CODIGO 3

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim n%
  If Target.Column = 1 Then
    n = InStr(1, Target.Value, " - ")
      Application.EnableEvents = False
          Target.Value = Left(Target.Value, n)
      Application.EnableEvents = True
End If
End Sub

INDIQUE PRIMERO SI SE PUEDE HACER Y EN CUANTO TIEMPO LO PODRIA TENER LISTO
SALUDOS

Categoría Programación y Tecnología
Subcategoría Otros

Plazo de Entrega: No definido

Habilidades necesarias

Otros proyectos publicados por G.