Jump to content

paikerr

Members
  • Content Count

    129
  • Joined

  • Last visited

Everything posted by paikerr

  1. Ya... Y yo también soy uno de esos. Precisamente gracias a vuestro apoyo, me estoy dando cuenta de muchos erróres estúpidos que cometo. Sin embargo, había pensado en matricularme en alguna académia, o en algún curso de formación o algo así, para perfeccionar mis conocimientos y tal... Quizás vosotrxs podríais aconsejarme alguna de ellas, si sabéis de alguna claro.
  2. Hola a todxs, Trabajando con una hoja de datos, me he dado cuenta que al pulsar la combinación de teclas "Ctrl. + Fin", me está guiando desde la celda A1 hasta la celda A2339. O dicho con otras palabras, tengo un montonazo de celdas vacías que me están haciendo pesar aun más el archivo innecesariamente. Mi pregunta es: ¿A alguien se le ha ocurrido alguna macro que solucione este problema? Post-data: He consultado previamente la siguiente macro, pero resulta muy complicada para mis entendederas... Jejeje. ¿No hay algo más sencillo?
  3. Hola a todxs, Perdonárme por colar este tema dentro de esta sección, pero estoy consultando algunas escuelas de formación avanzada en Macros y VBAs aquí en España, y me gustaría saber si tenéis opinión de algunas de ellas, y cuál me recomendaríais. Personalmente prefiero la opción online, puesto que siempre deja la posibilidad de preparártelo a tu ritmo y a tu manera. Gracias de antemano por vuestro tiempo.
  4. Claro... Es que me resultó bastante chocante que tu propuesta se basara en Do While/Loop, y un tipo tan experimentado como @Antoni decidiera utilizar For/Next. He ahí mi duda. No es por otra cosa. De todos modos, gracias a los dos por la aportación.
  5. Y For/Next no trabaja en memoria???
  6. Hola a todxs, Adjunto el archivo con el código que quiero depurar, y hacerlo mucho más sencillito: ayudaexcel.xlsm Gracias de antemano.
  7. Tú es que ya estás hecho todo un experto con estas cosas... Jajaja.
  8. ¿Y conocen otros complementos de Excel parecidos?
  9. Hola a todxs, Supongamos que tengo un número de cuatro cifras como el siguiente: 1024. Pues bien, necesito redondear la última cifra a las decenas. De modo que si la unidad es igual o mayor que 5, le sume una unidad a las decenas; y si es menor que 5, se mantenga como tal y como está. Y una vez hecho lo anterior, eliminar las unidades directamente del número. En nuestro ejemplo, quedaría algo así: 102 El paso siguiente sería tal que, necesito intoducir una coma flotante entre las unidades de millar y las centenas. Para que finalmente quedara algo así: 1,02 Otro ejemplo, sería como el siguiente: 1168 > 117 > 1,17 Comparto el único código que se me ha ocurrido hasta el momento, pero que de alguna manera resulta ser bastante funcional: ... If Cells(1, 1) >= 1000 Then If Mid(Cells(1, 1), 4) <= 4 Then Cells(1, 1).Select With Selection ' Texto de las celdas: .FormulaR1C1 = "1" & Mid(Cells(1, 1), 1, 3) .Replace What:="11", Replacement:="1," .Replace What:="1,1,", Replacement:="1,11" ' Formato de las celdas: .NumberFormat = "0.00" End With ElseIf Mid(Cells(1, 1), 4) > 4 Then Cells(1, 1).Select With Selection ' Texto de las celdas: .FormulaR1C1 = "1" & Mid(Cells(1, 1), 1, 3) + 1 .Replace What:="11", Replacement:="1," .Replace What:="1,1,", Replacement:="1,11" ' Formato de las celdas: .NumberFormat = "0.00" End With End If End If ... En fin... Espero vuestras críticas y correciones sobre mi código. O incluso, una idea mejor. Saludos.
  10. Me puedes detallar en qué consiste la función UBound. He buscado información por Internet, pero no he encontrado nada que me pueda servir de orientación. Gracias de antemano.
  11. A mí me pasa igual... La verdad es que no se pierde nada por tenerlo instalado. Alguna vez he instalado otros complementos y se me ha desinstalado o deshabilitado, y luego pierdes tiempo en volver a instalarlo. Desconozco si existen más complementos parecidos o más sencillitos (en el número de funciones, me refiero).
  12. Toma mi corazoncito... y un besito de buenas noches también!
  13. Pues eso. Si os habéis descargado ASAP Utilities y habéis trabajado con él, ¿qué opinión tenéis al respecto: es bueno, es malo, les hay mejores, etc.?
  14. Hola a todxs, ¿Es posible hacer algo cómo lo siguiente? Sub Pruebas() Ciudades$, i% Ciudades = Array("Madrid", "Tokyo", "Paris", "New York", "Londres", "Berlin", "Roma") For i = 0 To 6 If Cells(i + 1, 1) = Ciudades(i) Then Cells(i + 1, 1).Font.Bold = "True" Next i End Sub Inicialmente tenemos un vector con unas ciudades predefinidas por el usuario, seguido de un bucle For que recorre tanto el Array como las Filas. De modo que, si el nombre de la ciudad coincide con el valor de la celda, entonces destaca la celda en negrita. Sin embargo, el bucle no hace nada... ¿Qué estoy haciendo mal? Necesito que me inspiréis otra vez con vuestros conocimientos. Gracias de antemano.
  15. Vale, creo que ya lo voy pillando... Lo primero que observo es que al introducir la propiedad .NumberFormat = "@", es como si "obligaras al código" a convertirse en un String. Porque si hiciera lo siguiente: Sub Pruebas_3() Dim LaQuiniela() Dim i As Byte LaQuiniela = Array("Equipo local", "Equipo visitante", "1", "X", "2") For i = 0 To 4 'Cells(1, i + 1).NumberFormat = "@" Cells(1, i + 1) = LaQuiniela(i) MsgBox TypeName(Cells(1, i + 1).Value) Next i End Sub Vemos como los datos [2] y [4] son declarados como un tipo Double. O también podría hacer, lo que ya hice con la tilde antes del número: Sub Pruebas_3() Dim LaQuiniela() Dim i As Byte LaQuiniela = Array("Equipo local", "Equipo visitante", "'1", "X", "'2") For i = 0 To 4 'Cells(1, i + 1).NumberFormat = "@" Cells(1, i + 1) = LaQuiniela(i) MsgBox TypeName(Cells(1, i + 1).Value) Next i End Sub Efectivamente. NO. Es lo que planteé al inicio de la conversación, ¿cómo forzar a que un Array que contiene números, se convierta en una cadena de caracteres? Y la respuesta a lo anterior, en base a nuestras conversaciones, es la siguiente: - O bien, introducir una tilde justo delante del número. - O bien, introducir la propiedad .NumberFormat = "@" antes del Array. Pero siempre sin declarar explícita o implícitamente la variable LaQuiniela como un tipo String, porque de ser así daría un error de compilación. ¿Verdad?
  16. Pero si aplico lo siguiente, no funciona: Sub Pruebas() Dim LaQuiniela As String, i% LaQuiniela = Array("Equipo local", "Equipo visitante", "'1", "X", "'2") For i = 0 To 4 Cells(1, i + 1).NumberFormat = "@" Cells(1, i + 1) = LaQuiniela(i) Next i End Sub Desde el preciso momento en el que declaro todos los valores del Array como una cadena de caracteres, entonces da error de compilación. Lo que tú haces con el código de Pruebas_3, es declarar un Array como Variant. Pero, ¿y si lo declaro como un String?
  17. A ver, chicxs. Vuelvo a tener otro problema parecido. Supongamos el siguiente código: Sub Pruebas() Dim LaQuiniela As Variant LaQuiniela = Array("Equipo local", "Equipo visitante", "1", "X", "2") For i = 0 To 4 Cells(1, i + 1).FormulaR1C1 = LaQuiniela(i) MsgBox TypeName(Cells(1, i + 1).Value) Next i End Sub Veremos como los datos [2] y [4], los reconoce como datos de tipo Double. Sin embargo, lo que yo quiero es que los reconozca como un tipo String, pero para ello lo único que se me ha ocurrido es poner delante del número el signo '. De modo que, el código quedaría del siguiente modo: Sub Pruebas() Dim LaQuiniela As Variant LaQuiniela = Array("Equipo local", "Equipo visitante", "'1", "X", "'2") For i = 0 To 4 Cells(1, i + 1).FormulaR1C1 = LaQuiniela(i) MsgBox TypeName(Cells(1, i + 1).Value) Next i End Sub Y ahora si, veremos como ya reconoce el dato como una cadena de caracteres. Sin embargo, desde el momento en el que declaro el Array como un tipo String, me indica un error que desconozco: "Error de compilación. Se esperaba una matriz". Aquí os dejo el código: Sub Pruebas() Dim LaQuiniela As String LaQuiniela = Array("Equipo local", "Equipo visitante", "'1", "X", "'2") For i = 0 To 4 Cells(1, i + 1).FormulaR1C1 = LaQuiniela(i) MsgBox TypeName(Cells(1, i + 1).Value) Next i End Sub ¿Me podéis echar un cable con este tema? Gracias de antemano.
  18. Sobretodo porque una misma variable la llamo cerca de doscientas mil veces dentro del mismo procedimiento y también dentro del mismo módulo. De manera que si me equivoco al escribirla, pues Option Explicit corrije a tiempo mi error. Además de ser maníatico con ciertas cosas, pues prefiero que todas mis variables estén declaradas explícitamente y no dé lugar a posibles errores tontos. Saludos, y gracias a todxs.
  19. Muchas gracias a todos. Option Explicit lo necesito, porque el código mostrado es una parte muy pequeña de una aplicación bastante más completa en donde tengo declaradas otras 10-15 variables más. De modo que, no puedo operar sin Option Explicit. Es correcto eso que me decías, Cacho R. No me había detenido a pensar en ello, pues es verdad que MsgBox devuelve valores entre 1 y 7. Aunque en tal caso, sería más lógico trabajar con datos de tipo Byte en todas las respuestas (vbYes, vbNo, vbOK, vbCancel, vbRetry, etc.). ¿O más bien MsgBox opera con datos de tipo Long porque toma valores superiores a 255, tal y como se puede ver en el cuadro de https://msdn.microsoft.com/es-es/vba/language-reference-vba/articles/msgbox-function?
  20. Hola a todxs, Tengo el siguiente código: CASO 1) Option Explicit Sub PRUEBAS() Dim Respuesta As Boolean Respuesta = MsgBox("¿Están correctos todos los datos?", vbYesNo + vbQuestion + vbDefaultButton1) MsgBox TypeName(Respuesta) If Respuesta = vbYes Then Call Default.DATABASE Else Exit Sub End If End Sub El caso es que si declaro la variable Respuesta de tipo Boolean, no se llega a ejecutar el código contenido dentro del módulo Default.DATABASE. - - - - - - - - - - - - - - - - - - - CASO 2) Option Explicit Sub PRUEBAS() Dim Respuesta As Variant Respuesta = MsgBox("¿Están correctos todos los datos?", vbYesNo + vbQuestion + vbDefaultButton1) MsgBox TypeName(Respuesta) If Respuesta = vbYes Then Call Default.DATABASE Else Exit Sub End If End Sub Si declaro la variable Respuesta de tipo Variant, se autocorrige la variable como de tipo Long y consume 4 bytes. - - - - - - - - - - - - - - - - - - - CASO 3) Option Explicit Sub PRUEBAS() Dim Respuesta As Byte Respuesta = MsgBox("¿Están correctos todos los datos?", vbYesNo + vbQuestion + vbDefaultButton1) MsgBox TypeName(Respuesta) If Respuesta = 6 Then Call Default.DATABASE Else Exit Sub End If End Sub Lo único que se me ha ocurrido ha sido declarar la variable de tipo Byte, para que no consuma tanta memoria. - - - - - - - - - - - - - - - - - - - En resumen, he puesto estos tres ejemplos porque lo que realmente quiero es declarar la variable Respuesta de tipo booleano dado que hay dos posibles resultados (vbYes y vbNo), pero eso no es posible porque nunca llega a ejecutar el resto del código. De manera que me veo en la obligación de declararla de tipo Variant o de tipo Byte, para evitar problemas durante la ejecución. Me podéis ilustrar un poco acerca de cómo debería de hacerlo. Saludos, y gracias de antemano por vuestro tiempo.
  21. Hola a todxs, Una pregunta de teoría: ¿Para qué sirve el módulo ThisWorkbook? Entiendo que sea un módulo de clase en donde están alojados todos los eventos asociados a los procedimientos, pero no termino de entender por qué permite insertar también declaraciones, procedimientos y ejecutarlos, y no se hace mejor esto desde los módulos estándares. En fin... Que tengo un poco de cacao mental en este tema, y no es algo que te expliquen en detalle dentro de los cursos avanzados de Excel.
  22. Perfecto. Aclarado y muy bien explicado todo. Un 10, y mil gracias.
  23. Hola a todxs, Tengo este código: Sub Pruebas() Dim Tortilla As Variant Tortilla = Array("Huevos", "Patatas", "Cebolla", "Aceite", "Sal") For i = 0 to 4 Cells(1, 1).FormulaR1C1 = "INGREDIENTES" Cells(2, 1).FormulaR1C1 = Tortilla(i) Next i End Sub Como ven, la variable Tortilla está declarada como tipo Variant() dentro de un Array. Mi pregunta es la siguiente: Dado que todos los datos contenidos dentro del Array son una cadena de caracteres, ¿es posible declarar los Arrays con otro tipo de variables (por ejemplo, Dim Tortilla As String), o por el contrario todos los Arrays tienen que ser declarados como tipo Variant para evitar así problemas durante la ejecución del código?
  24. En resumen, que no se puede llamar a la variables desde otro módulo. Si desde dentro del mismo módulo, pero no desde otro. ¿Es así?
×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png