Jump to content

smartacm

Members
  • Content Count

    62
  • Joined

  • Last visited

  • Days Won

    1

smartacm last won the day on January 12 2011

smartacm had the most liked content!

About smartacm

  • Rank
    Advanced Member
  • Birthday 01/14/1983
  1. Hola! Concuerdo con ello, lo mejor que puedes hacer es la separación manual en tu base de datos, te llevará un rato pero tendrás los datos separados para futuras consultas! Es una buena anotación para todos y así si hacemos una base de datos como la tuya tenemos que separarlos!! Suerte!
  2. Hola! Con respecto a el uso de sólo números en un texbox puedes usar esto: Ojo, sólo números no punto ni coma, pero los puedes agregar a las sentencias Private Sub Litros_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 End If End Sub[/CODE] y lo de mostrar el formulario anterior a la edición (Principal) En logar de mostrarlo otra vez lo cual es incorrecto puedes probar cerrando el forulario de edición: [CODE]Private Sub CancelarREG_Click() Unload Me End Sub[/CODE] Con la sentencia unload Me se cierra el formulario Para las demás te puedo recomendar, no usar el botón de deshacer registro anterior, puedes usar un formulario más para eliminar registros y así sólo eliminar los que requieras. Estoy preparando un ejemplo de edición de registros en excel por medio de formularios, lo subiré próximamente, puede que te dé ideas!! Salu2!
  3. Veo que usas una versión de excel reciente, si sabes manejar la novedad de las tablas sería más fácil solucionar tu situación!
  4. Re: limpiar contenido celdas Por que no pruebas con esto, puede que te dé una idea! Sub rpueba() Dim valorActual As String Dim celda As Object Dim rango As Range Set rango = ActiveSheet.Range("A2:" & Sheets("Hoja1").Range("A65536").End(xlUp).Address) For Each celda In rango If celda.Value = "" Then celda.Value = valorActual Else valorActual = celda.Value End If Next End Sub[/CODE] Salu2!
  5. Hola! Revisa con esta modificación, si revisas el archivo modifiqué tu tab (Le agregé una fila después del cabecero), esto por qué? La merdad me gusata más así ya que para seleccionar todo el contenido sólo basta con la referencia CurrentRegion.select, si no se coloca la fila en blanco también considera los cabeceros Sub copiar() ' ' prueba Macro ' Macro grabada el 10/5/2010 por conta3 ' Range("A3").CurrentRegion.Select 'Se modifico la hoja con una fila luego del cabecero Selection.Copy Sheets("Hoja0").Select Range("A65536").End(xlUp).Select 'Se modificó para pegar la información al final de la información (Ojo aquí tienes celdas en blanco) Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A" & Range("A1").End(xlDown).Row + 1).Activate Sheets("tab").Select Range("A3").Select End Sub [/CODE]A ver que te parece o te puede dar una idea de como modificarla! Salu2! selec.zip
  6. Sería genial que ya todo te lo hiciera la PC, pero es una buena práctica el irse acostumbrando a tabular el código. A lo mejor Microsoft no ha cambiado VBA para que compremos el paquete completo de Visual Studio, el cual só te hace las tabulaciones e incluso te termina las sentencias como IF, Case, etc... Mientras no integre las nuevas funcionalidades es bueno tener esa costumbre!!! Bueno, esa es mi opinión! Salu2!
  7. Hola! Esto es un tanto más complicado, pero les será fácil entender la idea!!! Este ejemplo crea un menú inicial (MiMenuExcel) en cual tiene 2 opciones 1. Actualizar módulos - Dependiendo de los datos que se anexen en la Hoja1 en la columna A genera una macro para cada opción 2. Actualiza Menú - Esta lo que hace es crearte un botón en el menú por cada celda con datos en la columna A Lo importante de este ejemplo es que se agregan procedimientos y opciones en el menú dependiendo de las celdas con datos en la Hoja1 Algo importante, para poder ejecutar la primer opción en la seguridad de las macros en excel debe estar habilitada la opción de Acceso a Proyecto de VB ya que la macro lo que hace es escribir en un módulo independiente los procesos de cada botón del menú. A demás si lo quieren usar en un libro nuevo (Con su código Propio) deben agregar la referencia "Microsoft Visual Basic for Applications Extensibility X.X" Nota: primero hay que darle a la opción 1 y luego a la 2 Salu2! Creas Prodedimientos con Código.zip
  8. Hola! Supongamos que tu aplicación tiene estas rutas: miDirectorio - LibroPrincipal miDirectorio/A - LibroA miDirectorio/B - LibroB miDirectorio/C - LibroC miDirectorio/D - LibroD Lo prmero es conocer la ruta de tu archivo principal, esto sería con ThisWorkbook.Path Con esto independientemente de donde se encuentre el directorio te dará algo como esto: C:\miDirectorio 'Si está en C:\ C:\...\misDoctos\miDirectorio Con ello puedes ir jugando con las carpetas, por ejemplo: ThisWorkbook.Path & "\B\" = C:\miDirectorio\B\ ThisWorkbook.Path & "\C\" = C:\miDirectorio\C\ Salu2!
  9. Hola! Les dejo un aporte para importar datos de Access a Excel! Primedo deben de agregar la referencia "Microsoft ActiveX Data Object 2.8 Library" Esto es en la opción Referencias del menú Herramientas en VB. Sub importarDeAccess() 'Variables de la conección Dim miConn As ADODB.Connection Dim miRset As ADODB.Recordset Dim miBase, miSQL As String Dim miTabla As String Dim misCampos As Long Dim i As Long 'Colocar la ruta del archivo, en este caso la base 'Esta en la carpeta donde esta el archivo miBase = ThisWorkbook.Path & "\" & "db.mdb" 'Nombre de la tabla del archivo Access miTabla = "salarios_2003" 'Se crea y abre la conección Set miConn = New ADODB.Connection Set miRset = New ADODB.Recordset miConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source =" & miBase & ";" 'Se genera Consulta SQL miSQL = "SELECT * FROM " & strTabla & "" miRset.Open miSQL, miConn 'Se copian datos a la hoja ActiveSheet.Cells(2, 1).CopyFromRecordset miRset 'Se copian los títulos de las Columnas misCampos = miRset.Fields.Count For i = 0 To misCampos - 1 ActiveSheet.Cells(1, i + 1).Value = miRset.Fields(i).Name Next 'desconectar miRset.Close: Set miRset = Nothing miConn.Close: Set miConn = Nothing End Sub [/CODE] En realidad es bastante fácil una vez que se entiende cómo accede a los datos de acuerdo a las sentencias SQL que se realicen La próxima subiré un ejemplo de lo que se puede hacer con ello! Salu2!
  10. Hola! Yo uso la referencia "Microsoft Scripting Runtime", ésta la agrego a mi proyecto y puedo trabajar de este modo: Private Sub Archivos(Directorio As String) 'Variable de tipo FILE y FOLDER para listar los archivos de un path Dim misArchivos As File Dim miDirectorio As Folder Dim fso As FileSystemObject 'Nuevo objeto FileSystemObject Set fso = New FileSystemObject ' Obtiene el directorio Set miDirectorio = fso.GetFolder(Directorio) ' Lista los ficheros de esta carpeta For Each misArchivos In miDirectorio.Files ActiveCell = misArchivos.Name ActiveCell.Offset(0, 1) = misArchivos.Path ActiveCell.Offset(0, 2) = misArchivos.DateCreated ActiveCell.Offset(1, 0).Activate Next misArchivos End Sub[/CODE] Salu2!
  11. Hola! Les dejo un aporte que puede que les interese. Cuantas veces no he querido colocar en mi macro un formulario parametrizable por el usuario si que él pudiera ver dónde se guarda esa información, después de pensar un poco me dí cuenta que no era tan difícil. Este método sólo funcionaría si se guarda el libro como un complemento (xla), tal como el ejemplo que les anexo! La idea es guardar el parámetro en el complemento, en una hoja del mismo! En el ejemplo hay 2 macros que pueden ejecutarlas con Alt+F8 Configurar: Abre el Form para configuración generaRepeticiones: Genera las repeticiones en el libro abierto Lo que hace es generar repeticiones de una palabra de acuerdo a la configuración dada el el formulario. Si alguién se le ocurrió una forma distinta sería bueno ver más opciones Salu2! ConfiguraciondeMacros.zip
  12. Re: Ayuda con macro Hola! Ups!!! El problema es que no le estas colocando nombre al archivo!! Si revisas tu código estas copiando las columas de la C a la T, pero en ningun momento estas copiando el valor de la celda "A1" prueba con esto: Sub guardar() NArchivo = Range("A1").Value Columns("C:T").Select Selection.Copy Workbooks.Add Columns("C:T").Select ActiveSheet.Paste Range("C1:T62").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False NombreArchivo = "D:\Archivo de Facturas\" ActiveWorkbook.SaveAs NombreArchivo & NArchivo, , , , , , , , , , , False ActiveWindow.Close End Sub [/CODE] Si revisas el código sólo moví de lugar la sentencia "NArchivo = Range("A1").Value" Esto para que te asigne el valor de la celda "A1" del primer libro que tienes y no al que pegas los valores! Hay que tener cuidado al asignar valores a las variables!!!! Salu2!
  13. Re: Macro para formulario (crear hoja de calculo segun cliente) Hola! Prueba colocando esta funsión en un módulo: Public Function existeHoja(libro As Workbook, hoja As String) As Boolean Dim resultado As Boolean resultado = False Dim hojas As Worksheet For Each hojas In libro.Sheets If hojas.Name = hoja Then resultado = True End If Next existeHoja = resultado End Function[/CODE] Lo que hace es buscar una hoja en un libro determinado si existe retorna verdadero de lo contrario retorna falso. Y en tu formulario prueba colocando esta sentencia para agregar una nueva hoja o seleccionarla: [CODE]'***** Tu código anterior ***** 'Sheets("hoja1").Select 'Sheets("Hoja1").Copy After:=Sheets(Sheets.Count) 'Sheets(Sheets.Count).Select 'Sheets(Sheets.Count).Name = ComboBox2 '***** LA MODIFICACIÓN ***** Dim miHoja As Worksheet If existeHoja(ThisWorkbook, Me.ComboBox2.Text) = True Then ThisWorkbook.Sheets(Me.ComboBox2.Text).Select Else Set miHoja = ThisWorkbook.Sheets.Add miHoja.Name = Me.ComboBox2.Text miHoja.Move after:=Sheets(ThisWorkbook.Sheets.Count) Set miHoja = Nothing End If[/CODE] Si revisas es mucho más limpio usar una variable de hoja y darle un Set para asignarle un nombre o cambiarla de lugar Con ello ya no te debería de mandar error y así puedes reutilizar la funsión para otras sentencias que quieras colocar! Salu2!
  14. No entiendo muy bien para qué utilizarias eso, pero por que no pruebas esto: Private Sub UserForm_Initialize() Dim miRango As Range Dim celdas As Object Set miRango = Range("I1:K2, F1:G2") For Each celdas In miRango Me.ComboBox1.AddItem celdas.Address(rowabsolute:=False, columnabsolute:=False) Next End Sub[/CODE] Salu2!
  15. Re: Protección máxima a una Macro Eso que comentas pasa siempre. La primer proteción que yo tendría sería la contraseña del proyecto. La segunda es no distribuir el código en el libro que envio La tercera colocar mi macro como complemento de excel en una carpeta que sólo yo tenga acceso, esto es quitarle acceso incluso a los administradores de res, esto para que no puedan accesar a ella sin mi permiso. Con ello garantizo que no puedan ver el código. Lo que me gusta hacer para evitar plagio de información es hacer el código lo más complejo que pueda para que les cueste trabajo leer la información, esto es: 1. Usar nombres de variables que sólo yo entienda y no un nombre relativo a su acción (Claro que debes seguir un código propio, sino la depuración sería fatal!) 2. No dejar filas en blanco en el código, usar ":" para colocar varias líneas en una sóla, etc... La vertad esto podría caer en malas prácticas de programación pero es una forma de proteger tu trabajo, a demás de que la depuración sería más laboriosa, pero si tu haces la macro sabes donde cambiarle! Salu2!
×
×
  • Create New...

Important Information

Privacy Policy