Visual Basic para Aplicaciones - Escribir en un rango determinado VBA

Life is soft - evento anual de software empresarial
 
Vista:

Escribir en un rango determinado VBA

Publicado por Pablo (77 intervenciones) el 04/11/2013 11:16:02
Sigo a vueltas con lo mio.
Solucionados los temas de llenar combos y usar sus datos.

Ahora se me presenta un problema. En mi parte de trabajo (albarán, factura, etc) los chicos usan repuestos. Ellos anotan el part number y las unidades que usan. Al cliente al final le llega una factura con el part number, la descripción, el precio unitario, las unidades y el precio total.

Algunos clientes se quejan de que el precio de algunos repuestos es elevado, pero el mecánico no sabe que precio tiene un determinado repuesto en casa del cliente.

Bien, he creado una tabla con los repuestos, descripción y precio y ahora quiero pasarla al parte. Lo que sabe el mecánico es el part number ya que viene en la caja, así es que al posicionarse en una celda determinada le aparece un formulario en el que introduce el part number. El formulario le escribe en el parte el part number, la descripción y el precio unitario.

Ahora bien. He reservado 10 líneas para los repuestos, y solo esas 10.

Necesito que si el rango reservado para los repuestos está vacio escriba en la primera celda, luego en la segunda y así hasta la décima. Y que le envíe un mensaje de aviso diciendo que ha llegado a la décima.

He buscado como hacerlo y no encuentro la forma de que lo haga en un rango acotado, porque me da error. He intentado referenciar el rango de varias formas, pero no lo admite.

La información que encuentro se refiere a escribir en una lista partiendo de la última fila ocupada, y yo tengo filas ocupadas por encima y por debajo del rango.

Quizá debería trabajar con el offset de la celda en cuestión.

¿Alguna sugerencia?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Escribir en un rango determinado VBA [Mi solución]

Publicado por Pablo (77 intervenciones) el 10/11/2013 13:33:29
Al final encontré una solución razonable a mi problema.

Todos los foros que hablan del tema lo hacen para listas interminables, que llegan hasta el final de la hoja. Probando, probando encontré que el "final" de mi hoja era la fila 27.

Este es mi código. Advierto que no sé programar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Private Sub CommandButton1_Click()
On Error Resume Next
 
Dim material As String
Dim contador As Integer
Dim celdalibre As Integer
 
    'buscando la última celda libre de la lista de repuestos.
    celdalibre = Range("H21").End(xlUp).Row + 1
 
    material = Me.ComboBox1.Value
 
    'Declaración de variables.
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim cs, sPath As String
    Dim sql, arr() As String
    Dim descripcion, precio As String
    Dim i, z As Single
 
 
    'Este es el path de la base de datos. En realidad puede estar en cualquier sitio.
    sPath = ThisWorkbook.Path & "\DB\db.accdb"
    cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath & ";Persist Security Info=False;"
 
    Set cn = New ADODB.Connection
    cn.Open cs
 
    Set rs = New ADODB.Recordset
    With rs
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockOptimistic
    End With
 
    'Vamos a crear un array con los datos que obtengamos de la consulta.
    sql = "SELECT [Item Description],[Price] FROM repuestos WHERE [Item Number] = '" & material & "'"
 
    rs.Open sql, cn
        descripcion = rs![Item Description]
        precio = rs![Price]
 
    'Despedida y cierre.
    rs.Close
    cn.Close
 
    Set rs = Nothing
    Set cn = Nothing
 
    'Nos cercioramos que la celda dónde queremos escribir esta vacia
    'De lo contrario que de un aviso.
    If Worksheets("hoja1").Range("H" & celdalibre).Value = "" Then
 
        'escribimos la referencia y el precio unitario.
        Worksheets("hoja1").Range("H" & celdalibre).Select
        Worksheets("hoja1").Range("H" & celdalibre).Value = Format(material, "@")
        ActiveCell.Offset(0, 1).Value = descripcion
        ActiveCell.Offset(0, 10).Value = TextBox1
        ActiveCell.Offset(0, 11).Value = Format(precio, "#,##0.00")
 
        'pasamos a la celda siguiente:
        Worksheets("hoja1").Range("H" & celdalibre + 1).Select
 
 
        'Limpiamos el formulario para que el usuario sepa que se ha introducido.
        Me.ComboBox1.Value = vbNullString
        Me.TextBox1.Value = vbNullString
 
        Else
        MsgBox "No se pueden introducir mas repuestos en este parte."
        Exit Sub
 
    End If
 
 
        'Cuando llega a la última línea disponible, da un aviso.
        If celdalibre = 21 Then
            MsgBox "Hemos llegado al final"
            Unload Me
            Exit Sub
        End If
 
        If Err.Number <> 0 Then
            MsgBox "Error " & Err & ": " & Error(Err.Number)
            Exit Sub
        End If
 
'y con esto y un bizcocho...
End Sub

Seguro que admite sugerencias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

Escribir en un rango determinado VBA [Mi solución]

Publicado por xve (15 intervenciones) el 10/11/2013 19:06:26
Muy bueno Pablo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar