Jump to content

avalencia

Members
  • Content Count

    984
  • Joined

  • Last visited

  • Days Won

    32

5 Followers

About avalencia

  • Rank
    Abraham Valencia

Contact Methods

  • Website URL Array

Profile information

  • Gender Array
  • Localización: Array

Converted

  • Campos Array

Recent Profile Visitors

1,258 profile views
  1. Hay algo muy relacionado a las buenas costumbres, como dice Gerson. La declaración de variables es una, no necesariamente obligatoria en VBA, pero que definitivamente ayuda (al menos en "algo") a acelerar los proceso además de ayudar a mejorar el orden o que otros entiendan lo que se está haciendo. Otra buena es el dejar libres dichas variables, como con el uso de Erase o el Nothing con Set. Tampoco necesarios ya que el "End Sub" libera toda la memoria. Yo, como soy de la "vieja guardia", siempre, pero absolutamente los uso. Desde mi "viejo" punto de vista, los buenos programadores jamás dejarán de usar esas cosas. Un abrazo a todos... menos a los brasileños por haber goleado a Perú. Abraham Valencia
  2. Hola ¿Estás seguro que tu ruta es correcta? "Z:\disco d\\COMPILADO\FAMILY\" Sugiero que envíes captura de pantalla, del explorador de Windows, de esa ruta. Abraham Valencia
  3. Coloca tu archivo en un "drive" (OneDrive, Google Drive, DorpBox, etc) y comparte el enlace por aquí. Abraham Valencia
  4. Hola Para nada es contradecir, es más bien corregir una omisión. Gracias. Supongo que por el apuro, asumí que eran solo algunos campos de una tabla, pero es correcto que "Insert Into" funciona de manera correcta solo usando los valores valores a insertar si es que se usan todos los campos de la tabla. Saludos Abraham
  5. Si hiciste el cambio tal cual he recomendado no debería haber ningún problema ¿estás seguro que en esa parte que copias es donde marca el error? ¿no será que no hay un módulo llamado "Hoja7"? (OJO, estás usando el nombre del módulo, no de la hoja, quizás ahí el error) Abraham Valencia
  6. Hola Delante de cada "Range" coloca un punto, al no haberlo en la práctica estás dejandolo así: With ActiveSheet.Range("D49:D51,D53:D54") Colócalo así: With .Range("D49:D51,D53:D54") Abraham Valencia
  7. Tu línea del "Insert Into" está incompleta, no puedes enviar valores si no le indicas hacia qué campos van, ahí solo indicas la tabla (al menos aparentemente). Abraham Valencia
  8. Me refería a la propiedad "Povider" de la conexión, pero ya que mencionas la versión de Office que usas, creo que con Office 2010 ya era 12, de no resultar usa esta: "Provider=Microsoft.Jet.OLEDB.4.0;" Sobre el enlace enviado, lo que debes ver bien es cómo se usa el "Insert Into", no te preocupes por el formato, en el ejemplo estoy trabajando con MySQL, tú céntrate en lo demás (lee otras web sobre Insert Into). Abraham Valencia
  9. Hola No es lo mismo actualizar que vaciar. Si tu intención es que la macro elimine todos los datos de la tabla "Empleado" y luego guarde en dicha lo del Excel, pues es otra cosa. De ser eso, particularmente a mí me parece poco práctico pero, ya que tengo algo similar mira: Sub Exportar() Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim sql As String Dim UltimaFila As Long, x As Long Set cnn = New ADODB.Connection Set rst = New ADODB.Recordset cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & ThisWorkbook.Path & "\Datos.mdb;" & _ "Jet OLEDB:Database Password=rrhh;" sql = "Delete * From Empleados" With rst .CursorLocation = adUseClient .CursorType = adOpenKeyset .LockType = adLockOptimistic .Open sql, cnn, , , adCmdText End With Set rst = Nothing UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row For x = 2 To UltimaFila Set rst = New ADODB.Recordset Let sql = "Insert Into Empleados..." With rst .CursorLocation = adUseClient .CursorType = adOpenKeyset .LockType = adLockOptimistic .Open sql, cnn, , , adCmdText End With Set rst = Nothing Next x cnn.Close Set cnn = Nothing End Sub Para completar la cadena sql del "Insert Into", sugiero ver un ejemplo aquí: https://abrahamexcel.blogspot.com/2019/04/excel-y-mysql-2.html Saludos Abraham Valencia PD: OJO con mi proveedor, es 12, pero por tu *.xls y *.mdb me queda duda de que versión de Excel usas. También podría ocurrir que usas esas versiones por cuestión de compatibilidad, claro (no creo que sea porque es teóricamente más fácil trabajar con ese tipo de archivos, lo que no es real y es solo una creencia)
  10. Hola Te copio y pego lo respondido en otro foro: Los Listbox de Excel son distintos a los de Access, a pesar de sus varias similitudes. En el caso de Excel, su propiedad "RowSource" solo acepta rangos de celdas y no es posible adaptarle algo como un Recordset. Las opciones son usar List o AddItem, pero en ambos casos hay que recorrer y agregar registro por registro. La otra opción es la que ya usas tú de pegar todo en una hoja y luego pasarlo al ListBox con "RowSource". Particularmente yo prefiero hacerlo desde el Recorsset directamente: Do While Not rst.EOF ListBox1. AddItem rst. Fields(0) Rst. MoveNext Loop Saludos Abraham Valencia PD: Los usuarios de los foros de Excel somos muchas veces recurrentes en varios foros de habla hispana, basta con dejar la pregunta en uno
  11. Hola No termina de entenderse tu dilema, o sea ¿tienes un archivo Excel con la cantidad de datos mencionada y también tienes un archivo Access con clave y con...? Luego dices que debe "sobre escribir" una tabla llamada "empleados"? pero ¿qué entiendes por "sobre escribir"? y ¿con qué datos? y un largo etcétera. Abraham Valencia
  12. Estimado, ante todo ¿qué son sub totales para ti? ¿fórmulas insertadas con macros? Cuándo dices "tabla" ¿estás hablando de una tabla propiamente dicha o de una Tabla Dinámica? Creo que lo mejor es ver tu archivo Abraham Valencia
  13. Hola, para no andar dando vueltas, pues usa tu mismo código: Sub SeparaEnCol(Celda As Range) 'Este funciona en la celda seleccionada Dim toma As String, linea As String Dim largo As Integer, I As Integer, s As Byte Dim caracter As String * 1 Dim fila As Long, Columna As Integer Dim A() As Integer fila = Celda.Row Columna = Celda.Column toma = Celda.Value largo = Len(toma) ReDim A(largo) For I = 1 To largo caracter = Mid(toma, I, 1) If caracter = Chr(10) Then s = s + 1 A(s) = I End If Next I If s = 0 Then Exit Sub A(s + 1) = largo + 1 For I = 0 To s linea = Mid(toma, A(I) + 1, A(I + 1) - A(I) - 1) Cells(fila, Columna + I + 1) = linea Next I End Sub Sub Separando() Dim celda1 As Range For Each celda1 In Range("B8:B34") Call SeparaEnCol(celda1) Next End Sub Saludos Abraham Valencia
  14. Ajá, ojo, como comenté, "algo" sí había pasado je je je. Sugiero entonces no desinstalar nada y más bien completar/reparar la instalación de Office actual y verificar que el Windows también esté correctamente instalado y con todas las actualizaciones. Abraham Valencia
  15. Ajá, dicho y hecho, "algo" hiciste en la configuración de tu Windows y/o tu Office. Si no fuiste tú, quizás alguien más o quizá usaste algún código que lo hizo, o quizás estás usando una PC en red cuyo dominio está a cargo de algún servidor. En todo caso, la solución "fácil" es restaurar tu sistema operativo a un punto anterior, es lo más práctico. Si estás como usuario de red, pídele al administrador de redes que lo haga. Si no estás en red y aún así no quieres restaurar a un punto anterior, pues coméntalo y te doy algunas opciones para intentar arreglar el fallo pero, sinceramente, pueden ser varias cosas y todas medio complicadas. Abraham Valencia
×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 5112 personas - Aprender Excel - Total: 4.7 / 5