Ayuda con SetFocus

14/09/2006 - 23:59 por vm_tapia | Informe spam
Tengo un formulario con 3 Frames, organizados de la siguiente manera:

En el formulario tengo el Frame2 dentro del Frame1 y el Frame3 esta separado
El orden de tabulacion es por default

en el Frame2 tengo varios TextBox y lo que necesito es que al momento de
capturar un - (guion) en cualquier TextBox del Frame2, el enfoque se
establezca
en el primer TextBox del Frame3.

yo tengo el siguiente codigo
=Private Sub C3_AfterUpdate()
If AltaFacturas.C3.Value = "*" Then
AltaFacturas.PU3.Locked = True
ElseIf AltaFacturas.C3.Value = "-" Then
AltaFacturas.C3.Value = ClearContents
AltaFacturas.ObsFact.SetFocus <<<<< aqui es donde da el error
Else
AltaFacturas.PU3.Locked = False
Cantidad3 = CDbl(AltaFacturas.C3.Value)
Cantidad3 = Round(Cantidad3, 2)
AltaFacturas.C3.Value = ClearContents
ThisWorkbook.Worksheets("Factura").Range("a16").Value = Cantidad3
AltaFacturas.C3.Value = Cantidad3
AltaFacturas.I3.Value =
Format(ThisWorkbook.Worksheets("Factura").Range("ac16").Value, "#,##0.00")
Totales
End If
End Sub
=
y al ejecutar el formulario y capturar el guion el el TextBox3 (C3)
me da el siguiente error:

"se ha produciodel el error '-2147467259(80004005)' en tiempo de ejecucion"
"error no especificado"

¿que estoy haciendo mal?

Gracias por su ayuda.

Preguntas similare

Leer las respuestas

#26 vm_tapia
22/09/2006 - 01:10 | Informe spam
Hector Miguel:

Ya tengo resuelto lo del punto decimal.

Private Sub C1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not Chr(KeyAscii) Like "[0-9,*,.,-]" Then KeyAscii = 0
End Sub


Saludos
Victor Manuel.



"vm_tapia" wrote:

Hector Miguel:

ya hice que me acepte, ademas de numeros, el asterisco y el guion, como
tambien lo necesito en el campo de PU1 (Precio Unitario partida 1) obviamente
omitiria el asterisco y el guion( el guion lo tengo en duda, porque en una
ocasion tuve que facturar con un descuento, entonces lo utilizaria como cifra
negativa), pero, ¿y el punto decimal? ¿como hago para que acepte el punto?
-
Private Sub C1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not Chr(KeyAscii) Like "[0-9,*,-]" Then KeyAscii = 0
End Sub
-

Gracias
Victor Manuel.

Respuesta Responder a este mensaje
#27 Ivan
22/09/2006 - 01:15 | Informe spam
Hola VM

Disculpame por faltar a mi palabra, pero creo que te interesara saberlo
(y si estoy equivocado y alguien me lo confirma, me vendra bien a mi)

llevo un 'rato' dandole vueltas a mi neurona y he llegado a la
conclusion (puede que erronea) de que, aunque en mi primer post no
acerte con el motivo de tu error, si acerte en que se trataba de una
variable.

el uso que (estoy casi seguro) haces de clearcontents no tiene que ver
con clearcontents mas que en su resultado: borra contenidos en algo.

que yo sepa/crea 'ClearContents' no es un metodo de ¿ningun?
objeto/control de un formulario (de un textbox al menos no), ni de este
mismo, con lo que dificilmente puede borrar nada en ellos, otra cosa es
que se declare en algun momento como variable, y al no inicializarla en
ningun momento con ningun valor concreto, tome el valor 0 o "" (no
estoy seguro), con lo que lo que estas diciendo en definitiva es:

textbox1.value=0

o

textbox.value=""

que por otro lado es mucho mas logico y sencillo

el siguiente codigo:

Private Sub CommandButton1_Click()
Dim SoyUnPesado
TextBox1.Value = SoyUnPesado
End Sub

hace exactamente lo mismo que este:

Private Sub CommandButton1_Click()
Dim ClearContents
TextBox1.Value = ClearContents
End Sub

'borra' el contenido del textbox

Puedo estar equivocado, pero mientras no me diga lo contrario algun
experto, creo que estoy en lo cierto.

De todas formas es solo un apunte, porque me da la impresion de que,
como yo, estas intentando aprender algo de VBA, y cualquier dato/duda
es bueno discutirla

Un saludo
Ivan
Respuesta Responder a este mensaje
#28 Ivan
22/09/2006 - 01:45 | Informe spam
Disculpame VM, no habia leido tu ultimo mensaje, han ido a la par.

Yo uso el 2002, y quizas sea eso.

En cualquier caso, lo que tu dices, a mi como variable y a ti como
metodo nos funciona, aunque yo seguire usando -> TextBox1.Text = ""

mucho gusto por la charla y espero no haberte molestado

Un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#29 vm_tapia
22/09/2006 - 01:54 | Informe spam
Ivan:

lo siguiente lo he obtenido DIRECTAMENTE de la ayuda de Visual Basic
==Método ClearContents

Vea también Corresponde a EjemploDetalles

Borra las fórmulas del gráfico. Borra los datos de un gráfico, pero deja
intacto el formato.

expresión.ClearContents
expresión requerida. Una expresión que devuelve un objeto ChartArea o
Range.

Ejemplo
En este ejemplo se borran las fórmulas de las celdas A1:G37 de Sheet1 pero
se deja intacto el formato.

Worksheets("Sheet1").Range("A1:G37").ClearContents

En este ejemplo se borran los datos de Chart1, pero se deja intacto el
formato.

Charts("Chart1").ChartArea.ClearContents
==Conjunto Range
Vea también PropiedadesMétodosEventosDetallesVarios objetos
Range
Varios objetos


Representa una celda, una fila, una columna, una selección de celdas que
contienen uno o más bloques contiguos de celdas o un rango 3D.

Uso del conjunto Range
En esta sección se describen los siguientes métodos y propiedades para
devolver un objeto Range:

Propiedad Range
Propiedad Cells
Range y Cells
Propiedad Offset
Método Union
Propiedad Range
Use Range(arg), donde arg asigna un nombre al rango, para devolver un objeto
Range que represente una sola celda o un rango de celdas. El ejemplo
siguiente coloca el valor de la celda A1 en la celda A5.

Worksheets("Sheet1").Range("A5").Value = _
Worksheets("Sheet1").Range("A1").Value

El ejemplo siguiente rellena el rango A1:H8 con números aleatorios
estableciendo la fórmula de cada celda del rango. La propiedad Range, si se
emplea sin un calificador de objeto (un objeto colocado a la izquierda del
punto), devuelve un rango de la hoja activa. Si la hoja activa no es una hoja
de cálculo, este método no se llevará a cabo con éxito. Use el método
Activate para activar una hoja de cálculo antes de usar la propiedad Range
sin un calificador de objeto explícito.

Worksheets("Sheet1").Activate
Range("A1:H8").Formula = "=Rand()" 'Range is on the active sheet

El ejemplo siguiente borra el contenido del rango denominado Criterios.

Worksheets(1).Range("Criteria").ClearContents

Si usa un argumento de texto para la dirección del rango, deberá especificar
la dirección en notación de estilo A1 (no podrá usar la notación F1C1).

Propiedad Cells
Use Cells(fila; columna), donde fila es el índice de fila y columna es el
índice de columna, para devolver una sola celda. El ejemplo siguiente
establece en 24 el valor de la celda A1.

Worksheets(1).Cells(1, 1).Value = 24

El ejemplo siguiente establece la fórmula de la celda A2.

ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"

Aunque también puede usar Range("A1") para devolver la celda A1, en algunas
ocasiones la propiedad Cells puede ser más conveniente, ya que permite usar
una variable para la fila o la columna. El ejemplo siguiente crea encabezados
de fila y columna en la Hoja1. Tenga en cuenta que, después de activar la
hoja de cálculo, puede usar la propiedad Cells sin una declaración explícita
de hoja (devuelve una celda de la hoja activa).

Sub SetUpTable()
Worksheets("Sheet1").Activate
For TheYear = 1 To 5
Cells(1, TheYear + 1).Value = 1990 + TheYear
Next TheYear
For TheQuarter = 1 To 4
Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter
Next TheQuarter
End Sub

Aunque podría usar funciones de cadena de Visual Basic para modificar las
referencias de estilo A1, es mucho más sencillo (y una mejor práctica de
programación) usar la notación Cells(1, 1).

Para devolver parte de un rango use expresión.Cells(fila; columna), donde
expresión es una expresión que devuelve un objeto Range y fila y columna son
relativas a la esquina superior izquierda del rango. El ejemplo siguiente
establece la fórmula de la celda C5.

Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"

Range y Cells
Para devolver un objeto Range use Range(celda1; celda2), donde celda1 y
celda2 son objetos Range que especifican las celdas inicial y final. El
ejemplo siguiente establece el estilo de línea de los bordes de las celdas
A1:J10.

With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With

Observe el punto delante de cada propiedad Cells. El punto es necesario si
el resultado del enunciado With precedente se aplica a la propiedad Cells, en
cuyo caso, se indica que las celdas están en la hoja de cálculo uno (sin el
punto, la propiedad Cells devolvería las celdas de la hoja activa).

Propiedad Offset
Use Offset(fila; columna), donde fila y columna son los desplazamientos de
fila y columna, para devolver un rango con un desplazamiento específico con
respecto a otro. El ejemplo siguiente selecciona la celda situada tres filas
debajo y una columna a la derecha de la celda de la esquina superior
izquierda de la selección actual. No se puede seleccionar una celda que no
esté en la hoja activa, por lo que primero deberá activar la hoja.

Worksheets("Sheet1").Activate
'Can't select unless the sheet is active
Selection.Offset(3, 1).Range("A1").Select

Método Union
Use Union(rango1, rango2, ...) para devolver rangos de varias áreas, es
decir, rangos compuestos por dos o más bloques contiguos de celdas. El
ejemplo siguiente crea un objeto definido como la unión de los rangos A1:B2 y
C3:D4 y, a continuación, selecciona el rango definido.

Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set r1 = Range("A1:B2")
Set r2 = Range("C3:D4")
Set myMultiAreaRange = Union(r1, r2)
myMultiAreaRange.Select

La propiedad Areas es muy útil para trabajar con selecciones que contienen
varias áreas. Divide una selección de varias áreas en objetos Range
individuales y después devuelve los objetos en forma de conjunto. Puede usar
la propiedad Count del conjunto devuelto para comprobar una selección que
contiene varias áreas, como se muestra en el siguiente ejemplo.

Sub NoMultiAreaSelection()
NumberOfSelectedAreas = Selection.Areas.Count
If NumberOfSelectedAreas > 1 Then
MsgBox "You cannot carry out this command " & _
"on multi-area selections"
End If
End Sub
==Método Clear
Vea también Corresponde a EjemploDetallesMétodo Clear tal como se aplica
a los objetos ChartArea, Legend y Range.

Borra todo el objeto.

expresión.Clear
expresión Requerida. Expresión que devuelve uno de los objetos arriba
mencionados.

Método Clear tal como se aplica al objeto CellFormat.

Elimina los criterios establecidos en las propiedades FindFormat y
ReplaceFormat.

expresión.Clear
expresión Requerida. Expresión que devuelve un objeto CellFormat.

Método Clear tal como se aplica al objeto XPath.

Borra la asignación de esquema de las celdas asignadas al objeto XPath
especificado.

expresión.Clear
expresión Requerida. Expresión que devuelve un objeto XPath.

Comentarios
Este método no borra los datos de las celdas asignadas al objeto XPath
especificado. Use el método Clear del objeto Range para borrar los datos de
las celdas.

Si el objeto XPath especificado está asignado en una lista XML, se quitará
la asignación de esquema, pero no se eliminará la lista de la hoja de
cálculo.

Ejemplo
En este ejemplo se borran las fórmulas y el formato de las celdas A1:G37 de
Sheet1.

Worksheets("Sheet1").Range("A1:G37").Clear

En este ejemplo se borra el área de gráfico (datos del gráfico y formato) de
Chart1.

Charts("Chart1").ChartArea.Clear
==
en NINGUN lado dice que sea una VARIABLE, espero que se halla modificado tu
conclusion, (como lo mencionaste anteriormente, "Puede estar erronea") la
cual en efecto SI esta erronea.

insisto en que algo tiene o le falta a tu Excel o a tu Visual Basic.

Saludos
Victor Manuel.
Respuesta Responder a este mensaje
#30 Ivan
22/09/2006 - 02:14 | Informe spam
Hola de nuevo VM:

es cierto que puedo estar equivocado, pero no creo haber visto nada
relacionado con Userform ni con TextBox en la ayuda expuesta.

Da igual, seguramente tengas razon, y te reitero que me ha encantado
mantener esta 'conversacion', es mas productiva de lo que parece (al
menos para mi), y espero que nos veamos muchas veces por aqui.

Un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida