5 TRUCOS DE VBA NECESARIOS.docx

Embed Size (px)

Citation preview

1.- DETERMINAR CON VBA SI UN ARCHIVO SE ENCUENTRA ABIERTO

Me parece muy til y as uno no podr perder algn trabajo que se est realizando, cuando vuelves a abrir el archivo, lo he comprobado y si funciona aqu dejo el ejemplo.

Function abierto_cerrado(targetworkbook As String) As Boolean' Esta macro permite si un libro ya esta abierto para que no cierre y se actualizaDim libro_prueba As WorkbookOn Error Resume NextSet libro_prueba = Workbooks(targetworkbook)If Err.Number = 0 Thenprueba_abierta_cerrado = TrueElseprueba_abierta_cerrado = FalseEnd IfEnd Function

Sub Archivo()Dim targetworkbook As StringIf prueba_abierta_cerrado(targetworkbook) = True ThenMsgBox nomb_archivo & " abierto"ElseMsgBox nomb_archivo & " cerrado"End IfEnd Sub

2.- ORDENAR DATOS CON MACROS VBA EXCEL

Sub Desactivar_Filtro()'DESACTIVA LOS FILTROSRange("A1:D1").Select If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllDataEnd Sub------------------------------------------------------------------------------------------------Sub Ordenar_Datos_Ascendente()'ORDENA DE A ZRange("C1").Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlYesEnd Sub----------------------------------------------------------------------------------------------------------Sub Ordenar_Datos_Desecendente()'ORDENA DE Z ARange("C1").Sort Key1:=Range("C1"), Order1:=xlDescending, Header:=xlYesEnd Sub--------------------------------------------------------------------------------------------------------------Sub Ordenar_tres_campos()'ORDENA TRES CAMPOS DIFERENTESRange("A2").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2"), Order2:=xlAscending, Key3:=Range("C2"), Order3:=xlAscending, Header:=xlYesEnd Sub

3.- CAMBIAR LOS COLORES DE FONDO CON VBA

Es aplicable para cualquier trabajo que se realiza, por lo prctico, por lo til que es para cualquier personaPasos para cambiar los colores de fondo de las celdas con VBAPodemos citar dos formas frecuentes en las que se puede realizar este cambio de color.Debe utilizar la propiedad Interior de la celda y, a continuacin:Puede usar ColorIndex (para utilizar uno de los 56 colores preestablecidos de Excel): De esta forma se cambiara el color de la celda activa.

Sub Cambiar_Color_de_Fondo() ActiveCell.Interior.ColorIndex = 26End Sub

De esta forma se cambiara el color de la celda activa. Podemos cambiar de color a todo un rango de celdas.O bien, puede utilizar Color:De esta forma le podemos cambiar de color a todo un rango de celdas.

Sub Cambiar_color_de_un_Rango() Range("A1:A6").Interior.Color = RGB(55, 120, 27)End Sub

4.- IDENTIFICAR LA LTIMA FILA EN USO CON VBA

Me pare muy importante esta macro nos ayuda a ubicar la ltima fila que tiene contenido, muy prctico, se adapta a mi trabajo.

Sub Buscar_Ultima_Fila()'CUENTA CUANTAS FILAS ESTAN EN USODim ult As Integerult = Cells(Rows.Count, 1).End(xlUp).RowMsgBox ultEnd Sub

Sub Buscar_Ultima_Fila_2()

'SE SELECCIONA LA ULTIMA FILADim n As Longcountult = Cells(Rows.Count, 1).End(xlUp).RowMsgBox countultCells(Rows.Count, 1).End(xlUp).SelectEnd Sub

Sub Buscar_Ultima_Fila_3()'SELECCIONA DE LA ULTIMA FILA LA VACIADim n As Longcountult = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).RowMsgBox countultCells(Rows.Count, 1).End(xlUp).Offset(1, 0).SelectEnd SubDIFERENCIA ENTRE RANGE Y CELLSLos objetos range y cells en la mayora de casos pueden ser utilizados sin distincin alguna, sin embargo hay casos puntuales donde se recomienda el uso de uno de los dos.USO COMN Para seleccionar una celdaEjemplo:Si se quiere seleccionar la celda C2, se tiene dos opciones.Range(C2).select o Cells(2,3).select* cells(i,j) , donde i=fila i ; j=columna j. Para dar valor a una celdaEjemplo:-Si se desea darle valor a la celda C2 =620, se tiene dos opcionesRange(C2).value=620 o Cells(2,3).value=620PARTICULARIDADESObjeto Range Permite seleccionar mas de una celda.Ejemplo:range(A1:B5).select*El objeto cells , no permite seleccionar mas de una celda.Objeto Cells Es compatible con seleccin de celdas bajo un patrn de formula. La ventaja del uso del objeto cells, es permitir vincular funciones numricas al uso de las celdas y/o a su seleccin.Ejemplo:Se desea conocer la suma que de la combinacin de una fila y columna, entonces se establece el siguiente programa:Sub celdasuma()For i = 1 To 10 For j = 1 To 10Cells(i, j).Value = i + jNext iNext jEnd SubCOMPACIN ENTRE RANGE Y CELLSExiste un par de maneras para acceder las celdas de nuestras hojas utilizando VBA. Podemos utilizar el objeto Range y tambin podemos utilizar el objeto Cells.El objeto Cells tiene como primer argumento el nmero de fila y como segundo argumento el nmero de columna, el objeto no nos permite seleccionar un rango porque solamente podemos especificar una celda a la vez.Cells(5, 2).SelectPara seleccionar un rango de celdas lo ms conveniente es utilizar el objeto Range de la siguiente manera:Range(A1:D5).SelectEstablecer valor a las celdas con los 2 objetos sealados, ejemplo:Range(B5).Value = 100Cells(5, 2).Value = 200Ventaja del objeto cellEl objeto Cells ofrece una ventaja que debemos considerar cuando necesitamos hacer un recorrido programtico por varias celdas ya que ser muy sencillo especificar las filas y columnas utilizando una variable numrica.EjemploSub AZUL()For i = 4 To 40For j = 2 To 10Cells(i, j).Value = i * jNext jNext iEnd Sub

DIFERENCIAS Y EJEMPLOS ENTRE RANGE(A1).TEXT Y RANGE(A1). VALUEUna de las preguntas que frecuentemente nos podemos realizar es cul es la diferencia que existe entre las propiedades Text y Value del objeto Range.La funcin value se utiliza para asignar o escribir o tomar el valor de un objeto ya sea una celda, un botn comandbutton, etc.Si se desea asignar un valor a la Celda 5 del libro abierto se coloca siguiente:ActiveSheet.range(A5).value=La Casa Verde 5La funcin text toma el valor de un objeto pero que est reflejado directamente en la pantalla.ActiveSheet.Range[A1].Text = La Casa VerdeA continuacin un ejemplo que permitir entender la diferencia entre ambos:Range(C1).Value = 0.49999999Range(C1).NumberFormat = 0.00Debug.Print The Value property is: & Range(C1).ValueDebug.Print The Text property is: & Range(C1).TextEn este caso se ve que Text de un Range mostrar el valor que est reflejado en la pantalla o en los reportes, mientras que Value retornar el valor real de la celda, ser lo que el Excel almacena para sus frmulas y clcuos.. La respuesta inmediata ser:The Value property is: 0.49999999The Text property is: 0.50

EJEMPLO DE WITH-END WITH APLICADO A FORMATO DE CELDAS

La Funcin With End With permite realizar mltiples acciones en un mismo objeto. En este ejemplo, se ha utilizado la funcin para darle un formato determinado a una celda: letra Arial Narrow, tamao: 20, estilo de fuente: italic y subrayado. Para esto se usa With Selection.Font y luego las instrucciones sobre el estilo de fuente:With Selection.Font.Name = Arial Narrow.Size = 20.Italic = True.Underline = TrueEnd WithLa utilidad de esta funcin es que el cdigo es menos extenso, ya que no se tiene que repetir innecesariamente la funcin selection en cada instruccin, como se muestra a continuacin:Sub Promedio()Selection.Font.Name = Arial NarrowSelection.Font.Size = 20Selection.Font.Italic = TrueSelection.Font.Underline= TrueEnd Sub

EJEMPLO DE USO DE WITH- END WITH APLICADO A DAR FORMATO A REPORTESEl uso de With- end With para aplicar diversos formatos a los reportes de una manera mucho ms rpida.Sintaxis:Ejemplo:Sub formato()With Selection.Font.Name = Calibri.Size = 16.Color = -16777024Cells.SelectCells.EntireColumn.AutoFitEnd WithEnd SubDescripcinEste proceso aplica un determinado formato a las celdas que sean previamente seleccionadas por el usuario, esto puede ser empleado cuando es necesario generar reportes diarios o en periodos muy cortos donde la aplicacin manual repetitiva de un determinado formato de texto o celdas genera un tiempo de proceso demasiado alto.A continuacin se muestra la pantalla de datos iniciales:

Luego de ejecutar la macro:

ALGUNOS TRUCOS PARA OPTIMIZAR MACROS EN EXCELAl trabajar con macros sencillas (generalmente de pocas lneas), su ejecucin no es complicada, por lo que puede trabajarse simplemente grabando una macro desde Excel, o creando la macro directamente en Visual Basic, detallando paso a paso lo que har la macro. Al hacer esto, el cdigo que se genera es bastante detallado y en algunos casos, contiene ms lneas de las que realmente son necesarias para hacer que la macro realice aquello que se desea.Sin embargo, cuando la macro es ms complicada, es til conocer ciertos trucos que podran reducir las lneas en la macro, permitiendo que su ejecucin y revisin sea ms rpida.1) DESHABILITAR EL CLCULO AUTOMTICOCuando se tienen muchas celdas con frmulas, cada vez que se realiza un cambio en los valores de una hoja, Excel recalcula los valores de todas las frmulas. Para evitar esto, se puede insertar un cdigo, que hace que los clculos se realicen al final de la ejecucin de la macro, acelerando la misma.Al inicio de la macro, luego del Sub NombreMacro se coloca el siguiente cdigo: Application.Calculation = xlCalculationManualY al final de la macro antes del End Sub, colocamos:Application.Calculation = xlCalculationAutomaticApplication.Calculate2) NO AGREGAR LA SELECCIN DE LA CELDA COMO UN PASO MS, DE NO SER NECESARIO.Se podra trabajar de la siguiente manera:Range (A1).SelectActiveCell.FormulaR1C1 = HolaRange(A1).SelectSelection.Font.Bold = TrueO reducir la cantidad de lneas, trabajando as:Range(A1).Value = HolaRange(A1).Font Bold = True3) UTILIZAR WITH END WITH PARA NO HACER REFERENCIA AL MISMO OBJETO O COMANDO VARIAS VECES.Esto:Sheets(Hoja1).Range(A1).Font.Bold = TrueSheets(Hoja1).Range(A1).Font.Color = RGB(125,125,80)Sheets(Hoja1).Range(A1).Font.Underline= TruePuede ser reemplazado por esto:With Sheets(Hoja1).Range(A1).Font.Bold = True.Color = RGB(125, 125, 80).Underline = TrueEnd With4) NO UTILIZAR PALABRAS RESERVADAS: PARA ESTO, LO MS CONVENIENTE ES NO UTILIZAR PALABRAS EN INGLS, as no se corre el riesgo de estar utilizando una palabra reservada.5) DECLARAR LAS VARIABLESSi bien podemos declarar todas las variables como Variant, esto produce una mayor demora al ejecutar la macro. Es preferible declarar la variable segn corresponda (si es fecha, usar Date, si es texto, usar String).6) COMENTAR DE MANERA ADECUADA LAS MACROSDe esta forma se podr recordar con claridad que hace cada macro y se podr contar con los comentarios que facilitarn la utilizacin de la macro por terceras personas, que podran no estar tan familiarizadas con su sintaxis.7) SI SE DESEA QUE LA MACRO EJECUTE UNA GRAN CANTIDAD DE TAREASEs preferible crear varias macros ms pequeas y luego mediante una nueva macro, llamarlas para unir todos los procesos. Esto puede ser til incluso, si en algn momento se desea omitir alguno de los procesos, no es necesario crear una macro enteramente nueva, sino que basta con no llamar a la macro que se desea omitir.Por ejemplo:Sub BorrarDatos()cdigoEnd SubSub InsertarData()cdigoEnd SubSub DarFormato()cdigoEnd SubSub ProcesoCompleto()BorrarDatosInsertarDataDarFormatoEnd SubEn caso se desee un proceso que solo borre datos e inserte data, pero sin dar formato, bastar con omitir la ltima lnea de la macro ProcesoCompleto.

TABLA DINMICA PARA CUANTIFICAR EL SALDO DE CLIENTES POR CRITERIOMediante esta tabla podemos ver la cantidad total de dinero que disponen los clientes a la vez que podemos distinguirlos por gnero, distrito , y estado civil .Es una herramienta muy efectiva para darte cuenta hasta donde estn dispuestos a gastar las personas y a la vez de distinguir y agrupar a que sector son los que mas esta dirigido tu servicio o producto ,es decir gracias a que distinguimos el monto con respecto a distrito gnero y estado civil , podemos saber quien o quienes son los que mas gastan con respecto a los grupos ya nombrados anteriormente .Para la creacin de esta macro , lo que se a hizo primero es adquirir una base de datos en la cual trabajaremos a continuacin , luego de esto se codifica la hoja donde se va a poner la tabla dinmica , a su vez la plantilla y el contenido que queremos que la tabla nos muestre . Esto nos va a permtiir reducir tiempos a la hora de hacer una tabla dinamica sin necesidad de crearla una y otra vez .Si bien la tabla dinamica es muy facil de crear ,esta duplica la facilidad por lo que es una herramienta a considerar .

Sub CrearTabla() Dim WSD1 As Worksheet Dim WSD2 As Worksheet Dim PTCache As PivotCache Dim PT As PivotTable Dim PRange As Range Dim FinalRow As Long 'Se define la hoja de trabajo Set WSD1 = Worksheets("Hoja3") 'Borrar las tablas dinamicas que se encuentran en la hoja For Each PT In WSD1.PivotTables PT.TableRange2.Clear Next PT 'Definir el rea de entrada y establecer un cach dinamico Set WSD2 = Worksheets("CLIENTES") FinalRow = WSD2.Cells(65536, 1).End(xlUp).Row Set PRange = WSD2.Cells(1, 1).Resize(FinalRow, 13) 'Nos situamos en la hoja con los datos Sheets("CLIENTES").Select Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange.Address) 'Se crea una tabla dinamica en blanco, especiificando la ubicacin de salida y nombre de la tabla Set PT = PTCache.CreatePivotTable(TableDestination:=Worksheets("Hoja3").Range("B3"), TableName:="PivotTable3") PT.Format xlReport6 'Actualizacion automatica PT.ManualUpdate = True PT.AddFields RowFields:=Array("DISTRITO"), ColumnFields:=Array("HIJOS"), PageFields:=Array("SEXO", "CIVIL") 'Establecer los campos de datos With PT.PivotFields("SALDO") .Orientation = xlDataField .Function = xlSum .Position = 1 .NumberFormat = "#,##0" .Name = "Cantidad Fisica" End With 'Calcular la tabla dinamica PT.ManualUpdate = False 'PT.ManualUpdate = True Sheets("Hoja3").SelectEnd Sub

Private Sub CommandButton1_Click()Sheets("Formulario").Select t = Cells(Rows.Count, 1).End(xlUp).Row Cells(t + 1, 1) = TextBox1.Text Cells(t + 1, 2) = TextBox2.Text Cells(t + 1, 3) = TextBox3.Text Cells(t + 1, 4) = TextBox4.Text Cells(t + 1, 5) = TextBox5.Text Cells(t + 1, 6) = TextBox6.Text Cells(t + 1, 7) = TextBox7.Text TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox7.Text = " "End Sub

FORMULARIO DE EXCEL AVANZADO PARA EL REGISTRO DE DATOS RELEVANTES PARA PROYECTOSEste formulario consiste en la creacin de una interfaz que me permita registrar los datos relevantes y ms significativos de un proyecto, el cual contiene los siguientes campos:El formulario permitir actualizar la base cada vez que se desee, con el objeto de usar slo una base de datos. El registro de datos relevantes permiten evaluar dichos datos ingresados para mejorar la gestin interna de cada proyecto y establecer cuales son los proyectos estratgicos evaluando los montos y los precios unitarios que sern registrados en la base de datos.

Private Sub CommandButton1_Click()If TextBox1.Text "" And TextBox3.Text "" And TextBox4.Text "" And TextBox5.Text "" And TextBox6.Text "" And TextBox7.Text "" And TextBox8.Text "" And TextBox9.Text "" And TextBox10.Text "" And TextBox11.Text "" And ComboBox1.Text "" And ComboBox2.Text "" And ComboBox3.Text "" ThenGrabaElseMsgBox "Debe llenar todos los datos"End IfEnd SubPrivate Sub UserForm_Initialize()ComboBox1.AddItem ("SOLES")ComboBox1.AddItem ("DOLARES")ComboBox2.AddItem ("Kg")ComboBox2.AddItem ("m2")ComboBox3.AddItem ("Fabricacicn estructural")ComboBox3.AddItem ("Fabricacin calderera")ComboBox3.AddItem ("Equipo")ComboBox3.AddItem ("Miscelaneo")ComboBox3.AddItem ("Montaje estructural")ComboBox3.AddItem ("Montaje electromecnico")ComboBox3.AddItem ("Obra civil")End SubSub Graba() Sheets("Hoja1").Select t = Cells(Rows.Count, 1).End(xlUp).Row'nombre Cells(t + 1, 1).Value = TextBox1.Text'nmero de OT Cells(t + 1, 2).Value = "OT " & TextBox8.Text & " - " & TextBox9.Text'Ao Cells(t + 1, 3).Value = TextBox9.Text'tipo de proyecto Cells(t + 1, 4).Value = ComboBox3.Text'cliente Cells(t + 1, 5).Value = TextBox7.Text'Responsable Cells(t + 1, 6).Value = TextBox3.Text'Fecha firma Cells(t + 1, 7).Value = TextBox6.Text & "/" & Val(TextBox5.Text) & "/" & Val(TextBox4.Text)'Monto Cells(t + 1, 8).Value = Val(TextBox10.Text) Cells(t + 1, 8).Select If ComboBox1.Text = "DOLARES" Then Selection.NumberFormat = "[$$-409]#,##0.00" Else Selection.NumberFormat = "$ #,##0.00" End If'Peso rea Cells(t + 1, 9).Value = Val(TextBox11.Text)'Unidad de Medida Cells(t + 1, 10).Value = ComboBox2.Text'Tipo de moneda Cells(t + 1, 11).Value = ComboBox1.Text'Precio Cells(t + 1, 12).Value = Val(TextBox10.Text) / Val(TextBox11.Text) t = t + 1 TextBox1.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" TextBox8.Text = "" TextBox9.Text = "" TextBox10.Text = "" TextBox11.Text = "" ComboBox1.Text = "" ComboBox2.Text = "" ComboBox3.Text = "" End Sub

Private Sub CommandButton2_Click()UserForm1.HideEnd Sub

MODULO 1 Sub fecha()' fecha Macro ActiveCell.FormulaR1C1 = "=DATE(2014,5,20)" Range("A6").SelectEnd Sub-------------------------------------------------------------------Sub Macro2()' Macro2 Macro Range("D17").Select Selection.NumberFormat = "[$$-409]#,##0.00"End Sub-------------------------------------------------------------------Sub Macro3()' Macro3 Macro Selection.NumberFormat = "$ #,##0.00"End Sub

EJEMPLO DE USO DE FOR-NEXT APLICADO AL CLCULO DE LA SUMA DE CUADRADOSAplicacin de ForNextEl uso de esta estructura permite repetir un grupo de instrucciones un nmero de veces determinado. El bucle For hace uso de un contador cuyo valor se modifica desde el Vo hasta el Vf en una cantidad constante en cada repeticin.SintaxisFor contador = Vo To Vf [Step C]Donde:Contador: Variable numrica que sirve de control para el bucle.Vo: Valor inicial del contador.Vf: Valor final del contador.C: Incremento o decremento del contador en cada iteracin.Adicionalmente, se puede definir una variable Acumulador el cual cumple la funcin de almacenar resultados parciales obtenidos en cada repeticin.A continuacin se realizar un ejemplo aplicativo de la estructura ForNext para el clculo de la suma de cuadrados hasta un valor X definido en una celdaLas instrucciones estn definidas para calcular la suma de cuadrados hasta el nmero colocado en la celda B2.Al finalizar las operaciones un cuadro de texto indicar el resultado correspondiente.Para hacer uso de la macro nos dirigimos a la barra de men y seleccionamos la ficha Programador. Desde el icono Macros ubicamos la instruccin Suma_Cuadrados y ejecutamosSub Suma_Cuadrados()Dim a As IntegerDim Suma As IntegerDim Cuadrado As IntegerSuma = 0For a = 1 To Cells(2, 2) Step 1 Cuadrado = a * a Suma = Suma + CuadradoNext aMsgBox "Suma de Cuadrados hasta " & Cells(2, 2) & "=" & Suma

End Sub

EJEMPLO DE LA FUNCIN FOR-NEXTLa funcin FOR se utiliza para repetir una instruccin por ms de una vez. Esta cantidad de veces debe ser conocida.SintaxisFOR VARIABLE = VALOR INICIAL TO VALOR FINAL STEP (INCREMENTO)INSTRUCCIONESNEXTSTEP es opcional, si no se coloca se considera que el incremento es de 1

EjemploSe crea una lista de profesiones de la cual se debe escoger unicamente uno. Luego se da la instruccin para que esta lista desplegable tome los valores de las celdas indicadas en excel

Para que se tomen los valores indicados de forma rpida podemos usar FOR TO de esta forma:Esta macro aadir 5 elementos obtenidos desde la hoja activa, una posible mejora a este ejemplo podra ser que se defina la hoja activa antes de proceder a ejecutar el programa, as siempre se obtendra el mismo resultado independientemente de la hoja en que se encuentre en el momento de la ejecucin.Luego podemos ver la lista desplegable con totas las opciones

QU ES CALL EN VBA Y COMO SE USA?Call en VBA nos permite invocar la macro desde otro procedimiento (Sub o Function) como si fuera un procedimiento cualquiera.Al utilizar Call para llamar a tal procedimiento requerir que los argumentos estn encerrados en parntesis, si este procedimiento no tuviera argumentos no se colocaran.Ejemplo del modo de uso, tenemos dos procedimientos diferentes pero que cumplen la misma funcin, Proc1 uno no recibe parmetros mientras que Proc2 si recibe parmetros.

Sub Proc1()MsgBox Hola mundoEnd SubSub Proc2(mensaje As String)MsgBox mensajeEnd SubEn el caso del Proc1Si se desea llamar el procedimiento con Call se realizara de la siguiente forma:Sub principal1()Call Proc1End SubSi se obviara Call simplemente se llamara de la siguiente forma:Sub principal2()Proc1End SubEn el caso del Proc2Si se desea llamar el procedimiento con Call se realizara de la siguiente forma ya que requiere de un argumento y este deber estar entre parntesis.Sub principal3()Call Proc2(Hola mundo)End SubSi se obviara Call simplemente se llamara de la siguiente forma y en este caso no se colocaran los parntesis simplemente el argumento:Sub principal4()Proc2 Hola mundoEnd SubPara todas las formas de llamar en estos casos el resultado ser una ventana con el mensaje: hola mundo

Documento: Qu es Call en VBA y como se usa?En el archivo de Excel anexado se podr probar los diferentes procedimientos cuando se acceda al VB de la pestaa programador, ubicndose en el macro que desea ejecutar y presionando F5Nota: No es requerido usar Call cuando se llama a un procedimiento ya que no hace nada adicional que otras formas de mtodos de llamado; esta a quedado es del antiguo VB en donde siempre deba haber una keyword antes de una sentencia algo que ya no sucede ahora.En pocas palabras podramos escribir simplemente el nombre de la macro y obviar la palabra Call, salvo que el proceso use 2 o ms parmetros en cuyo caso es obligatorio el uso de call.

EJEMPLO DE SELECT CASE APLICADO AL CLCULO DEL MONTO A PAGAR POR ENTRADAS

Private Sub CommandButton1_Click()Dim Tribuna As StringDim numtickets As ByteDim precio As SingleDim montopagar As IntegerDim respuesta As StringDim answer As String

Tribuna = Cells(9, 4)numtickets = Cells(13, 4)Select Case TribunaCase "Norte"If numtickets