introducir datos con Userform basandose en 2 factores

3 envíos / 0 nuevos
Último envío
Oscar Seijas
Imagen de Oscar Seijas
Offline
última acción: Hace 3 semanas 2 días
alta: 24/02/2019 - 00:56
Puntos: 35
introducir datos con Userform basandose en 2 factores

Buenas noches, Soy de venezuela y estoy tratando de aprender un poco más de Excel, para paliar un poco la crítica situación económica que tenemos en el pais.
Co la ayuda de otro amigo he avanzado bastante en este proyecto pero todavia tengo 2 problemas que resolver...

Esta hoja al ejecutar el Userform, la macro busca en la columna C,  EL NOMBRE programado en el formulario y se ubica en el RANGO DEL MES INDICADO,  y RELLENA las celdas  en las columnas  correspondientes  a D1, D2,D3,D4,D5, Y D6, del mes en cuestión, EL PROBLEMA ES QUE ME SOBREESCRIBE LAS CELDA SI YA ESTAN LLENAS , NECESITO ME INDIQUE ERROR Y SE DETENGA SI LAS CELDAS YA ESTÁN LLENAS.

 

OTRO PROBLEMA ES QUE SOLO ME FUNCIONA PARA  EL PRIMER MES, (Septiembre) necesito me funcione para los demás meses.

 

Soy un novato en programación con excel  y he estado recibiendo ayuda de amigos  y aprendiendo un poco con este proyecto, pero es muy avanzado para mi nivel, asi que agradezco enormente la ayuda que puedan brindarme.

 

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 día 9 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 9975
¡Ánimo Venezuela!Duda 1: no

¡Ánimo Venezuela!

Duda 1: no sobrescribir valores

Para detectar si una celda está vacía o no, para no sobrescribir su valor, puedes emplear la función IsEmpty

Así que puedes comprobar si alguna celda está llena antes de escribir en ellas por ejemplo con algo así (Adjunto ejemplo también):

bl_continuar = True

With ActiveCell

For i = 1 To 6

bl_continuar = bl_continuar And IsEmpty(.Offset(0, i))

Next

End With

If bl_continuar Then

ActiveCell.Offset(0, 1).Value = Me.D_1.Text

ActiveCell.Offset(0, 2).Value = Me.D_2.Text

ActiveCell.Offset(0, 3).Value = Me.D_3.Text

ActiveCell.Offset(0, 4).Value = Me.D_4.Text

ActiveCell.Offset(0, 5).Value = Me.D_5.Text

ActiveCell.Offset(0, 6).Value = Me.D_6.Text

MsgBox "Los datos se guardarón correctamente", vbInformation

Else

MsgBox "Hay valores previos en la hoja" & vbCrLf & _

"No se anotan para no sobrescribirlos", vbOKOnly + vbExclamation

End If

 

 

Duda2: el mes

Pues esto depende de cómo se la hoja ¿las columnas siempre están en el mismo sitio? quiero decir, que si septiembre siempre está en la celda E2 y diciembre siempre está en la celda AC2

Si las posiciones son fijas, haz una función que te devuelva la columna de cada mes. por ejemplo

Si en el futuro cambian los meses de posición, sólo tendrás que retocar esta función que devuelve como resultado la columna de cada mes

Private Function columnadelmes(miMes As String) As String

    ' devuelve la posición de cada mes en la hoja

    Select Case miMes

        Case "Septiembre"

            columnadelmes = "E"

        Case "Octubre"

            columnadelmes = "M"

        Case "Noviembre"

            columnadelmes = "U"

        Case "Diciembre"

            columnadelmes = "AC"

        Case "Enero"

            columnadelmes = "AK"

        Case "Febrero"

            columnadelmes = "AS"

        Case "Marzo"

            columnadelmes = "BA"

        Case "Abril"

            columnadelmes = "BI"

        Case "Mayo"

            columnadelmes = "BQ"

        Case "Junio"

            columnadelmes = "BY"

        Case "Julio"

            columnadelmes = "CG"

        Case "Agosto"

            columnadelmes = "CO"

    End Select

End Function

Para obtener la posición de la celda donde apuntar, modifícalo para utilizar esta función

Range(columnadelmes(Me.cboMes) & m_row).Select

Te sobraría el select case del mes en tu procedimiento principal

Adjunto ejemplo

 

Data Tools Suite
datos y tablas con Excel

Oscar Seijas
Imagen de Oscar Seijas
Offline
última acción: Hace 3 semanas 2 días
alta: 24/02/2019 - 00:56
Puntos: 35
agradecimiento a PACOMEGIA.

Gracias por dedicar su tiempo a ayudar... Muy agradecido, todo funciona a la perfección segun lo ue necesito.