none
Combinar celdas de excel desde vb6 RRS feed

  • Pregunta

  • Saludos!!!.... tengo un problema. En excel estoy manejando la exportacion de un MSFLEXGRID, q es asi formato TICKET, el caso q lo q quiero hacer es q cuando me haga la exportacion, por ejemplo si son 2 articulos los q compra el cliente, me aparecen los datos en excel desde la fila 9 col A hasta la D (Articulo, Cantidad, Precio y Total); entonces, cuando se termina el traslado de todos los datos a excel, en este caso terminaria en la fila 10, dejo una fila vacia y en la fila 12 - columna 3  me pone lo q es el puro titulo de TOTAL, y en la fila 12 - columna 4 me pone ya el resultado (por ejemplo $1,250), el problema es q cuando lo mando a imprimir en un ticket, no me sale completo ni TOTAL ni el precio a pagar, y ya le movi de muchas maneras y no queda, entonces lo q quiero es q desde el mismo vb6 me combine las celdas. Por ejemplo cuando hago el traslado desde vb a excel tengo esto....

               Call Formato_Excel19(5, Heading()) 'llamamos a la funcion que da el formato al nuevo workbook
                V = 9  'V es Renglon
                H = 1  'H es columna
               
                Do While Not rs19.EOF 'esto nos sirve pa leer los datos desde
                    u = u + 1
                        
                    objExcel19.ActiveSheet.Cells(V, H) = rs19!Nombre
                    objExcel19.ActiveSheet.Cells(V, H + 1) = rs19!Precio
                    objExcel19.ActiveSheet.Cells(V, H + 2) = rs19!Cuantos
                    objExcel19.ActiveSheet.Cells(V, H + 3) = rs19!TOTAL
                   
                    V = V + 1
                    rs19.MoveNext
                Loop
                                        
                objExcel19.ActiveSheet.Cells(V + 1, H + 2) = "TOTAL"

                objExcel19.ActiveSheet.Cells(V + 1, H + 3) = txtTotal.Text

    Pero aqui en esta ultima fila yo le asigno los valores en donde quiero q me aparezca lo q es el puro titulo de TOTAL y a un lado me aparece la cantidad, y en sí las coordenadas donde me aparecen es en C12 (TOTAL) y D12(txtTotal.text) y lo q quiero hacer es de q me combine las celdas A12 y B12 y q ahi me aparezca TOTAL y luego me combine C12 y D12 y me aparezca lo q tenga txtTotal.text.

    Ahora, eso es por ejemplo cuando solo se hace la venta de 2 articulos, pero cuando se hace de 5, por eso estoy manejando variables y no numeros constantes, entonces es lo q quiero saber como le puedo hacer.

    Muchísimas gracias y espero me puedan ayudar!!!!

     

    jueves, 27 de mayo de 2010 16:15

Respuestas

  • Hola Romssel, para combinar celdas en excel mediante codigo se usa la propiedad Merge del objeto Range, es decir, en tu caso para combinar las celdas A12 y B12 y luego combinar las celdas C12 y D12 tendrías que hacer lo siguiente :

    objExcel19.ActiveSheet.Range("A12:B12").Merge
    
    objExcel19.ActiveSheet.Range("C12:D12").Merge

    Luego si lo que quieres es hacer que ese rango sea variable, deberías hacer lo siguiente:

      Dim Columna As Integer
      Dim Fila As Integer
    
      Columna = 65 ' En el codigo Ascii 65 es la letra A, luego Chr(Columna) = "A"
      Fila = 12 ' Para convertir en texto 12 harías Cstr(Fila) 
    
    With objExcel19.ActiveSheet
    
      .Range(Chr(Columna) + CStr(Fila) + ":" + Chr(Columna + 1) + CStr(Fila)).Merge
      .Range(Chr(Columna) + CStr(Fila) + ":" + Chr(Columna + 1) + CStr(Fila)).Value = "TOTAL"
    
      .Range(Chr(Columna + 2) + CStr(Fila) + ":" + Chr(Columna + 3) + CStr(Fila)).Merge
      .Range(Chr(Columna + 2) + CStr(Fila) + ":" + Chr(Columna + 3) + CStr(Fila)).Value = txtTotal.Text
    
    end With
    

    Ten en cuenta que lo he aplicado a tu caso particular, Range("A12:B12") y Range("C12:D12") y observa tambien que no uso Celdas (Cells), sino rangos (Range) para poderlos combinar (no puedes combinar una sola celda). Columna y Fila podrían tomar los valores que a ti te interesa para cada momento en función del numero de filas que tuviera el Recordset.

    Espero que lo hayas entendido y lo puedas aplicar a tu caso.

    Un saludo

    • Marcado como respuesta Romssel viernes, 28 de mayo de 2010 15:50
    • Desmarcado como respuesta Romssel viernes, 28 de mayo de 2010 15:50
    • Marcado como respuesta Romssel viernes, 28 de mayo de 2010 15:52
    • Desmarcado como respuesta Romssel viernes, 28 de mayo de 2010 17:01
    • Marcado como respuesta Romssel sábado, 29 de mayo de 2010 15:47
    jueves, 27 de mayo de 2010 19:21
  • Hola de nuevo, para que no te muestre el  ".00" tienes que hacer lo siguiente:

    .Range(Chr(Columna + 3) + CStr(Fila + 1) + ":" + Chr(Columna + 3) + CStr(Fila + 1)).NumberFormat = "General"

    En cuanto a lo del símbolo "$" pues en principio parace que lo que pones ahí es correcto, depura el codigo y verifica por que te lo pone 2 veces.

    Un saludo

     

    • Marcado como respuesta Romssel sábado, 29 de mayo de 2010 15:47
    viernes, 28 de mayo de 2010 19:29
  • Saludos!!!.............. mira ya lo pude solucionar.... tuve q hacer inventos jajajaja y al final si quedo todo excelente....

    Muchisimas gracias compadre y shido por ayudarnos a todos los neofitos en programacion ahhhhhh jajajja ;)

    See you!!!

    • Marcado como respuesta Romssel sábado, 29 de mayo de 2010 15:47
    sábado, 29 de mayo de 2010 15:46

Todas las respuestas

  • Hola Romssel, para combinar celdas en excel mediante codigo se usa la propiedad Merge del objeto Range, es decir, en tu caso para combinar las celdas A12 y B12 y luego combinar las celdas C12 y D12 tendrías que hacer lo siguiente :

    objExcel19.ActiveSheet.Range("A12:B12").Merge
    
    objExcel19.ActiveSheet.Range("C12:D12").Merge

    Luego si lo que quieres es hacer que ese rango sea variable, deberías hacer lo siguiente:

      Dim Columna As Integer
      Dim Fila As Integer
    
      Columna = 65 ' En el codigo Ascii 65 es la letra A, luego Chr(Columna) = "A"
      Fila = 12 ' Para convertir en texto 12 harías Cstr(Fila) 
    
    With objExcel19.ActiveSheet
    
      .Range(Chr(Columna) + CStr(Fila) + ":" + Chr(Columna + 1) + CStr(Fila)).Merge
      .Range(Chr(Columna) + CStr(Fila) + ":" + Chr(Columna + 1) + CStr(Fila)).Value = "TOTAL"
    
      .Range(Chr(Columna + 2) + CStr(Fila) + ":" + Chr(Columna + 3) + CStr(Fila)).Merge
      .Range(Chr(Columna + 2) + CStr(Fila) + ":" + Chr(Columna + 3) + CStr(Fila)).Value = txtTotal.Text
    
    end With
    

    Ten en cuenta que lo he aplicado a tu caso particular, Range("A12:B12") y Range("C12:D12") y observa tambien que no uso Celdas (Cells), sino rangos (Range) para poderlos combinar (no puedes combinar una sola celda). Columna y Fila podrían tomar los valores que a ti te interesa para cada momento en función del numero de filas que tuviera el Recordset.

    Espero que lo hayas entendido y lo puedas aplicar a tu caso.

    Un saludo

    • Marcado como respuesta Romssel viernes, 28 de mayo de 2010 15:50
    • Desmarcado como respuesta Romssel viernes, 28 de mayo de 2010 15:50
    • Marcado como respuesta Romssel viernes, 28 de mayo de 2010 15:52
    • Desmarcado como respuesta Romssel viernes, 28 de mayo de 2010 17:01
    • Marcado como respuesta Romssel sábado, 29 de mayo de 2010 15:47
    jueves, 27 de mayo de 2010 19:21
  • Oye disculpa........ sabes q se me olvido preguntarte???... mira... has de cuenta q el resultado por ejemplo de una venta es este....

    "ALEPH" Computadoras
    Juan Alejandro Morales Avila
    C. 21. de Marzo #205B, Col. Centro
    C.P. 99000
    Tel. 9837798, Cel. 4939467528
    28/05/2010
    12:02:35 p.m.
    ARTICULO CTD PRECIO TOTAL
    Diadema Auricular c/Microfono 981-000043  1 290.00 290.00
    FAX-MODEM 56600 Interno sin Voz 1 91.29 91.29
    Gab. Media Torre Mod. G10G / G10J Negro 1 583.22 583.22
    HDD 80 Gb Serial 7200 rpm  1 704.94 704.94
    REGULADOR VOLTAJE LAPTOP 1 490.00 490.00
    SM-803A 1 350.00 350.00
    Tarjeta de Red PCI 10/100 RJ45 1 150.00 150.00
    TOTAL : 2,659.45
    Número de Artículos: 8.00
       REVISE SU MERCANCIA Y CAMBIO
    DESPUES NO SE ACEPTAN RECLAMACIONES
     ¡¡¡ GRACIAS POR SU PREFERENCIA !!!

     

    Como le puedo hacer para q el total me aparezca en pesos y q en numero de articulos me quite los decimales, pq dejame decirte q las columna 3 la tengo q me la ponga con 2 decimales y pues cunado me saca el numero de articulos no quiero q me aparezca el ".00" y otra es q en el TOTAL me aparezca el simbolo de $, pq por ejemplo lo declare en el codigo asi:

    .Range(Chr(Columna + 3) + CStr(Fila + 1) + ":" + Chr(Columna + 3) + CStr(Fila + 1)).Value = "$" + txtTotal.Text

    y has de cuenta q cuando hago el traslado me pone doble $$ y la cantidad...... y si le quito el "$", no me pone absolutamente nada mas q la pura cantidad, entonces como le puedo hacer ahi???

    Gracias!!!!

    viernes, 28 de mayo de 2010 17:07
  • Hola de nuevo, para que no te muestre el  ".00" tienes que hacer lo siguiente:

    .Range(Chr(Columna + 3) + CStr(Fila + 1) + ":" + Chr(Columna + 3) + CStr(Fila + 1)).NumberFormat = "General"

    En cuanto a lo del símbolo "$" pues en principio parace que lo que pones ahí es correcto, depura el codigo y verifica por que te lo pone 2 veces.

    Un saludo

     

    • Marcado como respuesta Romssel sábado, 29 de mayo de 2010 15:47
    viernes, 28 de mayo de 2010 19:29
  • Saludos!!!.............. mira ya lo pude solucionar.... tuve q hacer inventos jajajaja y al final si quedo todo excelente....

    Muchisimas gracias compadre y shido por ayudarnos a todos los neofitos en programacion ahhhhhh jajajja ;)

    See you!!!

    • Marcado como respuesta Romssel sábado, 29 de mayo de 2010 15:47
    sábado, 29 de mayo de 2010 15:46