Saltar al contenido

usar toda la hoja con listbox mediante formulario


viejo

Recommended Posts

buen dia tengan, de nuevo por estos lados con la interrogante de como puedo usar toda lo hoja de un libro ya que me da error el formulario cuando tengo demasiados datos (arriba de los 1000).

La manera y forma en que esta hecho el formulario me gusta pero no logro encontrar el error de ¿porque no puedo usar toda la hoja?, principalmente cuando le doy buscar un dato, me podrian ayudar a poder utilizar bien este formulario para poder meterle la cantidad de datos que contiene la hoja (xfd por 1048576).

espero sus amables aportaciones y de antemano gracias.

todalahojaconlistbox.rar

Enlace a comentario
Compartir con otras webs

Hola, antes que nada un coordial saludo MacroAntonio, bueno de hecho la verdad no se a que se deba, no creo que sea debido a mi maquina, pero te voy a explicar lo que hice y en que momento me dió el error,

lo primero que hice fue tratar de adaptar este archivo a mis necesidades para lo cual solo era aumentar el numero de campos ya que en el archivo era 13 columnas y la aumenté a 37 con respecto a las filas utilizé el archivo donde tenia yo mi base de datos real y adapté cada columna de ese archivo real a este que estoy posteando. es decir;

llené de manera "manual" cada uno de los rubros, osea; copié y pegue mi informacion, la verdad no se si eso haya afectado dado que la informacion que copié y pegue tenia formatos menores como el tipo de letra o tamaño o color de celda en si, no se si me doy a explicar pero cabe denotar tambien que cuando le doy buscar el dato la barra de progreso avanza solo hasta el 80% aprox (eso lo comento por la longitud que se muestra en pantalla) y despues me marca error diciendo se ha producido el error 13 en tiempo de ejecucion: que no coinciden los tipos...tambien otra situacion y no se si eso tenga que ver es que uso office 2007. Eso es a grandes rasgos mi estimado MacroAntonio

te quisiera pedir este favorsote macro antonio de aumentar el tamaño de columnas a mostrar y la parte de buscar asi como que pudiera soportar la gran cantidad de filas, ya que ya lo intenté pero no me resultó y obviamente si esto no afecta tus tiempos y tu amabilidad. Gracias

Enlace a comentario
Compartir con otras webs

Amigo tu dices que realizaste cierta adaptacion a tu archivo que tiene 37 columnas, pero el archivo que subes NO parece ser el que indicas, porque no subes el archivo al cual le adaptaste este formulario, con todos los cambios que realizastes (puedes colocar datos ficticios si así lo deseas) e indicas donde te está fallando, así será mucho más facil ayudarte, suerte

Enlace a comentario
Compartir con otras webs

Hola Bigpetroman, ¿que tal tu dia?, si asi es cambie la cantidad de columnas para adaptarlo y obviamente no subi mi archivo real debido a la privacidad de los datos; si habia pensado en subirlo pero dada la confidencialidad de mi archivo no lo puedo subir (que no dudo algun pasado de listo ya haya escaneado mi maquina de arriba a abjo) lo que si voy a hacer es cambiar los rubros por otros asi como los datos convertirlos en ficticios pero creo que eso lo haré hoy en la noche o madrugada y para mañana ya lo puedas ver. para mañana ya lograras verlo para que me puedan ayudar. Gracias

Enlace a comentario
Compartir con otras webs

hola bigpetroman, mira no puedo subir el archivo porque es muy pesado, lo unico que me permite el foro hacer es poner el codigo que es este


Private Sub abajo_Click()
UserForm1.Height = 365
UserForm1.Width = 970

abajo.Visible = False
arriba.Visible = True
End Sub

Private Sub arriba_Click()
UserForm1.Height = 365
UserForm1.Width = 670

arriba.Visible = False
abajo.Visible = True
End Sub

Private Sub btn_buscar_Click()

Dim rango As Range

Application.ScreenUpdating = False


'Copiamos la hoja1 sobre la hoja2
L.RowSource = ""
Hoja1.Cells.Copy Hoja2.Cells

'-------- Barra de progreso 1 ------------
BP = 0
BP.Min = 0
If txtBuscar = "" Then
BP.Max = Hoja2.Range("K1").End(xlDown).Row
Else
BP.Max = Hoja2.Range("K1").End(xlDown).Row * 2
End If
BP.Visible = True
'-----------------------------------------

'Numeramos las filas
For x = 2 To Hoja2.Range("K1").End(xlDown).Row
BP = BP + 1
Hoja2.Range("N" & x) = x
Next

'Si el texto a buscar está vacío, llenamos la lista con toda la hoja y salimos
If txtBuscar = "" Then
BP.Visible = False
L.RowSource = "Hoja2!A2:V" & Hoja2.Range("K1").End(xlDown).Row
Exit Sub
End If

BP.Visible = True

'Proceso de búsqueda
texto = UCase("*" & txtBuscar & "*")
For x = 2 To Hoja2.Range("K1").End(xlDown).Row
BP = BP + 1
'Unimos todas las celdas de la fila en un string
cadena = ""
For y = 1 To 22: cadena = cadena & UCase(Hoja2.Cells(x, y))
Next 'desde la primera columna hasta la ultima

'Comprobamos si cumple la condición de búsqueda
If Not cadena Like texto Then
If rango Is Nothing Then
Set rango = Hoja2.Rows(x)
Else
Set rango = Application.Union(rango, Hoja2.Rows(x))
End If
End If
Next

'Eliminamos las filas que no cumplen la condición
If Not rango Is Nothing Then rango.Delete

'Llenamos la lista con las filas que cumplen la condición
L.RowSource = "Hoja2!A2:V" & Hoja2.Range("K1").End(xlDown).Row
BP.Visible = False


End Sub

Private Sub CheckBox1_Click()

If CheckBox1 = True Then
CheckBox2.Enabled = False
Else
CheckBox2.Enabled = True
End If

End Sub

Private Sub CheckBox2_Click()

If CheckBox2 = True Then
CheckBox1.Enabled = False
Else
CheckBox1.Enabled = True
End If

End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub


Private Sub CrearInforme_Click()

If L.ListIndex <> -1 Then

wdReplaceAll = 2 'Todas las ocurrencias
Set Obj_Word = CreateObject("Word.Application")

Obj_Word.Visible = True
Obj_Word.Documents.Open Filename:=ThisWorkbook.Path & "\Informe.dotx"

For y = 1 To 11 'numero de filas
With Obj_Word.Selection.Find 'con el objeto de word encontrado
.Text = "[" & Cells(1, y).Value & "]" ' con el doc sustituye lo de la celda todo lo que haya entre[]
.Replacement.Text = Cells(L.ListIndex + 2, y).Value
.Forward = True
.Wrap = wdFindAsk
.Format = False
.Execute Replace:=wdReplaceAll
End With
Next
MsgBox " se enviaron los datos a un documento de " & Obj_Word
Set Obj_Word = Nothing

End If

End Sub

Private Sub Insertar_Click()

If MsgBox(" ¿Los datos que va a insertar son correctos? " & _
vbCrLf & "¿Desea continuar?", vbQuestion + vbYesNo, " Grabar Datos ") = vbYes Then
ComúnAñadirModificar CLng(Range("K1").End(xlDown).Row + 1)
txtId = Range("K1").End(xlDown) + 1
End If

End Sub


Private Sub Label16_Click()

End Sub

Private Sub Modificar_Click()
If L.ListIndex <> -1 Then
i = L.ListIndex
ComúnAñadirModificar CLng(L.List(L.ListIndex, 13))
L.ListIndex = i
End If
End Sub


Private Sub ComúnAñadirModificar(Fila As Long)

Range("a" & Fila) = txtexpediente
Range("b" & Fila) = txtfolio
Range("c" & Fila) = txtfechainforme
Range("d" & Fila) = txtnombrelic
Range("e" & Fila) = txtcargo
Range("f" & Fila) = txtoficio
Range("g" & Fila) = txtpersonapropuesta
Range("h" & Fila) = txtfechapropuesta
Range("i" & Fila) = txtdomicilio
Range("j" & Fila) = txtnombreinformante
Range("k" & Fila) = txtId
If CheckBox1 = True Then
Range("l" & Fila) = "Si"
Range("m" & Fila) = ""
End If
If CheckBox2 = True Then
Range("l" & Fila) = ""
Range("m" & Fila) = "Si"
End If
btn_buscar_Click

End Sub


Private Sub L_Click(): On Error Resume Next
Dim blnAtendidoVacio As Boolean, PendienteVacio As Boolean
For Each Control In Controls
If Control.TabIndex < L.ColumnCount Then
If TypeOf Control Is MSForms.TextBox Then
Control.Value = L.List(L.ListIndex, Control.TabIndex)
End If
End If
Next
Insertar.Enabled = False

If L.List(L.ListIndex, 11) = "" Then
CheckBox1.Value = False
CheckBox2.Value = True
End If

If L.List(L.ListIndex, 12) = "" Then
CheckBox2.Value = False
CheckBox1.Value = True
End If

End Sub

Private Sub Borrar_Click()

'------------------------------------------------------------------
'For Each Control In Controls
' If Control.TabIndex < L.ColumnCount Then
' If TypeOf Control Is MSForms.TextBox Then
' Control.Value = ""
' End If
'End If
'Next
'------------------------------------------------------------------

txtexpediente = ""
txtfolio = ""
txtfechainforme = ""
txtnombrelic = ""
txtcargo = ""
txtoficio = ""
txtpersonapropuesta = ""
txtfechapropuesta = ""
txtdomicilio = ""
txtnombreinformante = ""



txtId = Range("K1").End(xlDown) + 1
txtexpediente.SetFocus
Insertar.Enabled = True
'L.ListIndex = -1

End Sub

Private Sub UserForm_Initialize()
'Me.StartUpPosition = 0 'Manual
'Me.Top = Application.Top + Application.Height - Me.Height
'arriba.Visible = False
'UserForm1.Height = 365
'UserForm1.Width = 670
Worksheets("Hoja1").Activate

L.ColumnCount = 22
L.ColumnHeads = True
L.ColumnWidths = "85;40;105;120;120;90;150;110;120;120;25;60;60;100;105;120;120;105;120;120;120"
btn_buscar_Click

End Sub



[/PHP]

me vi en esta necesidad de ponerlo todo para que me puedas decir cual es mi error, tambien debo decirte que cuando cierro excel me dice que la imagen es demasiado grande y que sera recortada. bueno eso es todo asta mañana y gracias

Enlace a comentario
Compartir con otras webs

Amigo, te anexo el codigo del formulario, borra el codigo que tienes (en el archivo que subiste) y coloca este otro (es más facil que decir que parte debes copiar y cual no, borras y pegas lo nuevo, mas facil):

Nota: te dejo unos comentarios para que tomes en cuenta:

1.- El error que te daba

me marca error diciendo se ha producido el error 13 en tiempo de ejecucion:
se debe a que en tu archivo, en la columna D, fila 16576 tienes una formula que está regresando un valor de error (debería haber un nombre allí, revisa)

2.- no se porque usas combobox en el formulario, con cajas de texto sería mas que suficiente, deberías cambiar eso.

3.- agregue una forma adicional de realizar la busqueda, la forma que se usa en este formulario es buena para tablas con pocos datos, tal vez 5.000 - 10.000 datos, pero ya tu tienes mas de 27.000 datos y la busqueda se hace muy lenta, de todas formas revisa los comentarios que deje en el codigo.


Private Sub abajo_Click()
UserForm1.Height = 365
UserForm1.Width = 970

abajo.Visible = False
arriba.Visible = True
End Sub

Private Sub arriba_Click()
UserForm1.Height = 365
UserForm1.Width = 670

arriba.Visible = False
abajo.Visible = True
End Sub

Private Sub btn_buscar_Click()

Dim rango As Range

Application.ScreenUpdating = False


'Copiamos la hoja1 sobre la hoja2
L.RowSource = ""
Hoja1.Cells.Copy Hoja2.Cells

'-------- Barra de progreso 1 ------------
BP = 0
BP.Min = 0

'CAMBIE ESTO
'If cmbBuscar = "" Then
' BP.Max = Hoja2.Range("K1").End(xlDown).Row
'Else
' BP.Max = Hoja2.Range("K1").End(xlDown).Row * 2
'End If
'POR ESTO OTRO, NO VEO EL PORQUE COLOCAR EL VALOR
'MAXIMO DE LA BARRA DE PROGRESO 2 VECES LA CANTIDAD
'DE FILAS, POR ESO ES QUE LA BARRA NUNCA SE VE QUE
'LLEGUE AL 100%

'BP.Max = Hoja2.Range("K1").End(xlDown).Row

BP.Max = 4
BP.Visible = True
'-----------------------------------------
'ESTO LO DESHABILITE, PUES NO VEO QUE SE USE PARA NADA
'DICHA COLUMNA (ES SIMPLEMENTE PERDER TIEMPO), SI LO USAS PARA OTRA COSA, HABILITARLO
'Numeramos las filas
'For x = 2 To Hoja2.Range("K1").End(xlDown).Row
' BP = BP + 1
' Hoja2.Range("W" & x) = x
'Next
'INCLUSO PUEDES CAMBIARLO POR ESTO QUE ES MUCHO MAS RÁPIDO
Hoja2.Range("W2:W" & Hoja2.Range("K1").End(xlDown).Row).FormulaArray = "=ROW()"
Hoja2.Range("W2:W" & Hoja2.Range("K1").End(xlDown).Row).Value = Hoja2.Range("W2:W" & Hoja2.Range("K1").End(xlDown).Row).Value

'Si el texto a buscar está vacío, llenamos la lista con toda la hoja y salimos
'AQUI USABAS txtBuscar, PERO ESE CONTROL NO EXISTE, LO CAMBIE POR EL COMBO BOX
'QUE USAS PARA ESCRIBIR LAS BUSQUEDA
If cmbBuscar.Value = "" Then
BP.Visible = False
L.RowSource = "Hoja2!A2:W" & Hoja2.Range("K1").End(xlDown).Row
Exit Sub
End If

'YA ESTA VISIBLE, NO ES NECESARIO COLOCARLO VISIBLE NUEVAMENTE
'BP.Visible = True
'ESTA ES UNA BUSQUEDA DIFERENTE, PRUEBALO A VER, SI TE PARECE BIEN
'PUEDES BORRAR TODO LO QUE ESTÁ DEBAJO DE Call Busqueda_Alterna
'YA QE NO SE USARIA; SI NO TE GUSTA, QUITAS LAS SIGUIENTES TRES LINEAS
'Y LISTO, TODO SIGUE COMO ANTES
BP = 1
Call Busqueda_Alterna
Exit Sub
'Proceso de búsqueda
'AQUI USABAS txtBuscar, PERO ESE CONTROL NO EXISTE, LO CAMBIE POR EL COMBO BOX
'QUE USAS PARA ESCRIBIR LAS BUSQUEDA
texto = UCase("*" & cmbBuscar.Value & "*")

For x = 2 To Hoja2.Range("K1").End(xlDown).Row
BP = BP + 1
'Unimos todas las celdas de la fila en un string
cadena = ""
For y = 1 To 23: cadena = cadena & UCase(Hoja2.Cells(x, y)): Next 'desde la primera columna hasta la ultima

'Comprobamos si cumple la condición de búsqueda
If Not cadena Like texto Then
If rango Is Nothing Then
Set rango = Hoja2.Rows(x)
Else
Set rango = Application.Union(rango, Hoja2.Rows(x))
End If
End If
Next

'Eliminamos las filas que no cumplen la condición
If Not rango Is Nothing Then rango.Delete

'Llenamos la lista con las filas que cumplen la condición
L.RowSource = "Hoja2!A2:W" & Hoja2.Range("K1").End(xlDown).Row
BP.Visible = False

Application.ScreenUpdating = True
End Sub

Private Sub CheckBox1_Click()

If CheckBox1 = True Then
CheckBox2.Enabled = False
Else
CheckBox2.Enabled = True
End If

End Sub

Private Sub CheckBox2_Click()

If CheckBox2 = True Then
CheckBox1.Enabled = False
Else
CheckBox1.Enabled = True
End If

End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub




Private Sub Insertar_Click()

If MsgBox(" ¿Los datos que va a insertar son correctos? " & _
vbCrLf & "¿Desea continuar?", vbQuestion + vbYesNo, " Grabar Datos ") = vbYes Then
ComúnAñadirModificar CLng(Range("K1").End(xlDown).Row + 1)
txtId = Range("K1").End(xlDown) + 1
End If

End Sub

Private Sub Modificar_Click()
If L.ListIndex <> -1 Then
i = L.ListIndex
ComúnAñadirModificar CLng(L.List(L.ListIndex, 13))
L.ListIndex = i
End If
End Sub

Private Sub ComúnAñadirModificar(Fila As Long)

Range("a" & Fila) = Me.cmbFECHADECAPTURA
Range("b" & Fila) = Me.cmbNUMERODEPGR
Range("c" & Fila) = Me.cmbFOLIO
Range("d" & Fila) = Me.cmbAPELLIDOPATERNO
Range("e" & Fila) = Me.cmbAPELLIDOMATERNO
Range("f" & Fila) = Me.cmbNOMBRE
Range("g" & Fila) = Me.cmbALIAS
Range("h" & Fila) = Me.cmbOTRONOMBRE
Range("i" & Fila) = Me.cmbMOTIVOODELITO
Range("j" & Fila) = Me.cmbAUTORIDADSOLICITANTE
Range("k" & Fila) = txtId
If CheckBox1 = True Then
Range("l" & Fila) = "Si"
Range("m" & Fila) = ""
End If
If CheckBox2 = True Then
Range("l" & Fila) = ""
Range("m" & Fila) = "Si"
End If
Range("N" & Fila) = Me.cmbENTIDADFEDERATIVA
Range("O" & Fila) = Me.cmbOFICIOAPACCPUOTRO
Range("P" & Fila) = Me.cmbSERIEFORMULA
Range("Q" & Fila) = Me.cmbSERIESUBFORMULA
Range("R" & Fila) = Me.cmbSECCIONFORMULA
Range("S" & Fila) = Me.cmbSECCIONSUBFORMULA
Range("T" & Fila) = Me.cmbEXPONENTE
Range("U" & Fila) = Me.cmbNOMBREDELPERITO
Range("V" & Fila) = Me.cmbNCP

btn_buscar_Click

End Sub


Private Sub L_Click(): On Error Resume Next
Dim blnAtendidoVacio As Boolean, PendienteVacio As Boolean
For Each Control In Controls
If Control.TabIndex < L.ColumnCount Then
If TypeOf Control Is MSForms.ComboBox Then
Control.Value = L.List(L.ListIndex, Control.TabIndex)
End If
End If
Next

Insertar.Enabled = False

If L.List(L.ListIndex, 11) = "" Then
CheckBox1.Value = False
CheckBox2.Value = True
End If

If L.List(L.ListIndex, 12) = "" Then
CheckBox2.Value = False
CheckBox1.Value = True
End If

End Sub

Private Sub Borrar_Click()
'Dim Control As Control
'------------------------------------------------------------------
'For Each Control In Controls
'If Control.TabIndex < L.ColumnCount Then
'If TypeOf Control Is MSForms.ComboBox Then
'Control.Value = ""
'End If
'End If
'Next '
'-----------------------------------------------------------------




cmbID = Range("K1").End(xlDown) + 1
Me.cmbFECHADECAPTURA.SetFocus
Insertar.Enabled = True
'L.ListIndex = -1

End Sub

Private Sub UserForm_Initialize()
'Me.StartUpPosition = 0 'Manual
'Me.Top = Application.Top + Application.Height - Me.Height
'arriba.Visible = False
'UserForm1.Height = 365
'UserForm1.Width = 670

Worksheets("Hoja1").Activate

L.ColumnCount = 22
L.ColumnHeads = True
L.ColumnWidths = "100; 100; 100; 120; 120; 120; 70; 160; 160; 120; 120; 70; 70; 90; 90; 90; 90; 90; 120; 120"
btn_buscar_Click

End Sub

Sub Busqueda_Alterna()

Hoja3.Cells.Delete
Hoja2.Select
Hoja2.Range("W1").Value = "Filtro1"
Hoja2.Range("X1").Value = "Filtro2"
Hoja2.Range("X2").FormulaR1C1 = _
"=UPPER(RC[-23]&RC[-22]&RC[-21]&RC[-20]&RC[-19]&RC[-18]&RC[-17]&RC[-16]&RC[-15]&RC[-14]&RC[-13]&RC[-12]&RC[-11]&RC[-10]&RC[-9]&RC[-8]&RC[-7]&RC[-6]&RC[-5]&RC[-4]&RC[-3]&RC[-2])"
Hoja2.Range("X2").Copy

BP = 2
Hoja2.Range("X3:X" & Hoja2.Range("K1").End(xlDown).Row).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Hoja2.Range("X2:X" & Hoja2.Range("K1").End(xlDown).Row).Value = Hoja2.Range("X2:X" & Hoja2.Range("K1").End(xlDown).Row).Value


Hoja2.Range("AB1").Value = "Filtro2"
Hoja2.Range("AB2").Value = UCase("*" & cmbBuscar.Value & "*")

Range("A1:X" & Hoja2.Range("K1").End(xlDown).Row).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("AB1:AB2"), Unique:=False
BP = 3
Range("A1:V1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Hoja3.Select
Hoja3.Range("A1").Select
ActiveSheet.Paste
Hoja2.Select
ActiveSheet.ShowAllData
BP = 4
Hoja1.Select

'Llenamos la lista con las filas que cumplen la condición
L.RowSource = "Hoja3!A2:V" & Hoja3.Range("K1").End(xlDown).Row
BP.Visible = False

Application.ScreenUpdating = True

End Sub
[/CODE]

cualquier cosa comentas, suerte

Enlace a comentario
Compartir con otras webs

ok me levanté temprano para ver tu respuesta mi amigo,

1.- jejeje nunca me di cuenta de esa formula, no deberia estar ahi pero bueno gracias por la observacion

2.- usé los combobox por la situacion del autorelleno y catalogo

3.- te soy sincero la forma de busqueda no la hice yo, de hecho no me creo capaz de realizar algo asi jeje

en fin lo voy a checar y te dire mas al ratito te doy mi comentario. gracias de antemano mi amigo

- - - - - Mensaje combinado - - - - -

hola que tal aqui de vuelta ya habiendo checado algunos detalles que no entiendo el porque pasan pero te los menciono:

* antes que nada la parte de busqueda quedó excelente, pero veo que sucede como en todo cuando mueves algo en especifico otras cosas se alteran entonces salen los detalles.

* un detalle de ellos es la situacion de la lista al momento de insertar un dato, la lista deja de mostrar el dato insertado previamente. Esta parte no se que tendría que ver con la modificacion del boton buscar.

* otro de ellos y creo que es importante es que al momento de cerrar el formulario me muestra "primero" que si deseo guardar los cambios y le digo que si y resulta lo siguiente (si le doy no, no sucede mas que lo correspondiente), "segundo" me dice que la imagen es demasiado grande y será cortada, "tercero" me dice recursos insuficientes. seleccione menos datos o cierre otras aplicaciones<<---en esta parte me imagino que el error resulta por el hecho de copiar la hoja1 a la dos (me imagino que es eso). "cuarto" excel me marca error reiniciandose.

¿como vez? todo eso sucedió mi amigo, aun no logro que este archivo funcione en su 100%, no se como solucionarlo

Enlace a comentario
Compartir con otras webs

amigo hermesc, yo solo revice lo de la busqueda, que era lo que indicabas inicialmente, lo demas son otros problemas que habria que revsiar, este punto no lo entendi muy bien

un detalle de ellos es la situacion de la lista al momento de insertar un dato, la lista deja de mostrar el dato insertado previamente. Esta parte no se que tendría que ver con la modificacion del boton buscar.

si pudieras explicarlo mejor, yo revisare el archivo cuando este en la casa, suerte

Enlace a comentario
Compartir con otras webs

hola antes que nada te agradesco la respues amigo, tal vez me vi un poco exigente en tiempo y esfuerzo cuando no era la intencion ser asi, me queda claro que solo es una ayuda voluntaria de tu parte, pero solo queria comentar esa parte,,,y es que como dije se arreglo una cosa pero la otra ya no supe que pasó que ya no quiere funcionar porque me aparece el error de "se ha producido el error 13, no coinciden los tipos" con respecto a esta parte tienes razon habria que ver como afectó el codigo que me pusiste y pues de nuevo gracias y en lo que pueda ayudar no dudes en pedirlo de alguna manera tengo que agradecer el tiempo empleado.

Enlace a comentario
Compartir con otras webs

amigo, sigo sin entender, no explicaste el punto que te indique en el mensaje anterior. ese error que dices se parece mucho al error original que te comente que era producido por una formula que tenias en una celda; puedes ejecutar tu codigo paso a paso con F8 para ver exactamente en que línea te falla el codigo y si es posible determinar la fila afectada, suerte

Enlace a comentario
Compartir con otras webs

que tal amigo ya estoy de vuelta,

amigo, sigo sin entender, no explicaste el punto que te indique en el mensaje anterior. ese error que dices se parece mucho al error original que te comente que era producido por una formula que tenias en una celda; puedes ejecutar tu codigo paso a paso con F8 para ver exactamente en que línea te falla el codigo y si es posible determinar la fila afectada, suerte

la verdad no se que es lo que no me explique pero solo quiero comentar que el archivo por si solo no me marcaba los errores que ya te habia comentado, el boton de modificar si hacia su trabajo pero ahora ya no, como tu me dices que me ponga a buscar linea por linea para saber donde da el error ya lo hice pero logro dar con él, tambien permiteme decirte que no soy muy experto, algunas cosas las dedusco, otras las pruebo por separado otras las investigo pero nunca en mi vida he llevado programacion como tal por eso es que siempre pido este tipo de auxilio y es que de hecho al estar analizando las lineas de codigo no entiendo algunas cosas me gustaria me las pudieras explicar si no es mucha molestia

esta parte que es lo que hace

Hoja2.Range("X2").FormulaR1C1 = _
"=UPPER(RC[-23]&RC[-22]&RC[-21]&RC[-20]&RC[-19]&RC[-18]&RC[-17]&RC[-16]&RC[-15]&RC[-14]&RC[-13]&RC[-12]&RC[-11]&RC[-10]&RC[-9]&RC[-8]&RC[-7]&RC[-6]&RC[-5]&RC[-4]&RC[-3]&RC[-2])"
Hoja2.Range("X2").Copy[/PHP]

tampoco entiendo esta

[PHP] Hoja2.Range("W2:W" & Hoja2.Range("K1").End(xlDown).Row).FormulaArray = "=ROW()"
Hoja2.Range("W2:W" & Hoja2.Range("K1").End(xlDown).Row).Value = Hoja2.Range("W2:W" & Hoja2.Range("K1").End(xlDown).Row).Value

[/PHP]

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Agradecido Antoni! Tus sugerencias me ayudaron mucho! Como pudiese hacerte llegar el archivo?
    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
    • Hola a ambos, @MarianoCruz, si con la respuesta de @Israel Cassales ya tienes resuelto el problema, perfecto. Punto final y a otra cosa. Pero piensa que tu archivo lleva vínculos externos, así que se hace difícil (prácticamente imposible) comprobar si las propuestas dadas ofrecen el resultado esperado. A tal efecto, te sugiero que vuelvas a subir otro archivo, esta vez insertando nuevas hojas que contengan los datos existentes en esos archivos externos.  Tal vez así se vea claro qué es lo que buscas conseguir, y se puedan hacer pruebas que verifiquen la bondad de el/los resultado/s. Tampoco iría mal que insertaras a mano qué resultado debe aparecer en la celda C3 en cada uno de los 3 casos: cuando se inserte 'XI', 'XL' o unos u otros números en los lugares apropiados. Así iremos totalmente sobre seguro acerca del método a emplear. Saludos,
    • Hi Trate de ver que hacían las fórmulas en cuestión pero a su libro le falta o le faltan hojas, por lo que solo podría participar con un par de ideas en general. Lo que entiendo es que según el valor de B3 en C3 debe poner una fórmula u otra, así que es posible que si combina DIRECCION() con INDIRECTO() pueda intercambiar de una fórmula a otra. =SI(B3="Xl",INDIRECTO(DIRECCION(3,5)),SI(O(B3=1,B3=2,B3=3),INDIRECTO(DIRECCION(4,5)),"")) Otra forma sería poner nombre a esas fórmulas en el cuadro de nombres para que las pueda mandar llamar a una o a la otra según el resultado de B3. Por favor tome en cuenta, es solo una idea.
    • Buenas tardes! Tengo el siguiente código: Private Sub btnCargaBancos_Click() Dim TasaCompra, TasaVenta As Double Dim InvBanesco, InvVzla, MontoBanesco, MontoVzla As Double Dim TasaDiaBan, TasaDiaVzla, TasaActual As Double 'Inversion = Val(txtInversion.Text) InvBanesco = Val(CDbl(txtInverBanesco.Text)) InvVzla = Val(CDbl(txtInverVzla.Text)) TasaCompra = Val(CDbl(txtTasaCompra.Text)) TasaVenta = Val(CDbl(txtTasaVenta.Text)) MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055)      TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then     TasaActual = TasaDiaBan Else     TasaActual = TasaDiaVzla End If MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco.Value = MontoBanesco txtBcoVenezuela.Value = MontoVzla txtTasaDiaria.Value = TasaActual End Sub   Como se puede apreciar InvBanesco ,  InvVzla , TasaCompra y TasaVenta, son valores que introduce el usuario a través de los respectivos cuadros de texto. Tengo los siguientes problemas: a. Las fórmulas no se ejecutan correctamente (pareciese que no reconociese los números entrados vía cuadros de texto). b. Al darle valor cero (0) a cualquiera de los valores de InvBanesco o  InvVzla, me genera un error en TasaDiaBan o TasaDiaVzla (según sea el caso), aunque, como se puede apreciar, debería generar un valor cero (0). Como dije en mi presentación estoy empezando en esto de la codificación...y quiero aprender de Uds! Agradezco su ayuda! Nota: lamentablemente el fichero es mas grande de lo permitido y no pude anexarlo.  
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.