Función que no funciona en UserForm

18/10/2006 - 22:05 por Maty | Informe spam
Estimado señores:
Porqué la función: "Selection.PasteSpecial Paste:=xlPasteAll", no funciona
adecuadamente con códigos UserForm?

El siguiente código permite copiar la hoja CARATULA en la hoja Vistas, sin
embargo si se altera el formato de la hoja Vistas empequeñeciendo, por
ejemplo, la altura de las filas de esa hoja, la función
"Selection.PasteSpecial Paste:=xlPasteAll", no es capaz de aplicar el formato
de la hoja CARATULA en la hoja Vistas.
Gracias por su atención
Maty

************************************************************************************************************
Option Explicit
Dim Hoja_elegida As Worksheet
Dim AF As Range
Dim año As Range
Public RangoElegido

Private Sub ComboBox2_Change()

End Sub

Private Sub CommandButton2_Click() 'Botón de Aceptar
CopiarRango
End Sub
Private Sub CommandButton3_Click() 'Botón para Salir
Sheets("Botones").Select
Range("A1").Select
Unload Me
End Sub
Private Sub ComboBox1_Change() 'CARATULA
Set Hoja_elegida = Worksheets(ComboBox1.Text)
RangoElegido = "A1:R38"
End Sub
Private Sub CopiarRango()
Dim oHoja As Object
Dim oRango As Range
Dim sRango As String
Dim Vistas As Object
Set oHoja = Hoja_elegida
sRango = RangoElegido
If (oHoja Is Nothing) Then
MsgBox "Debe elegir una Hoja"
Exit Sub
End If
Set oRango = oHoja.Range(sRango)
oRango.Copy
UserForm1.Hide
Sheets("Vistas").Select
Range("A1").Select

Selection.PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
End Sub

Private Sub UserForm_Click()

End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
20/10/2006 - 04:43 | Informe spam
hola, Maty !

-> espero tu comprension por exponer en el foro 'otros' codigos del archivo que me enviaste :)) [pero]...
lo considero un buen 'exponente' de 'como' es que algunas consultas... se quedan 'cortas' :D
[lo que en ocasiones 'ma ha dado por llamar'... -> lo que se ha quedado 'en el tintero'] :))

vale ???

1) existe un codigo de 'preparacion' para comparar el funcionamiento 'entre' copiar celdas de una hoja a otra...
lo que 'hace' este codigo, es 'reducir' la altura de las filas de la columna 'A' a 11 puntos...
despues de seleccionar toda la columna 'A'... -> Selection.RowHeight = 11 <= OJO: la altura de TODA LA FILA

2) existe un codigo [una macro 'normal'] que SI 'funciona', y 'el secreto' es que copia TODAS LAS CELDAS de la hoja 'de origen'...
lo transcribo para que se vea la diferencia 'versus' el codigo en el formulario [expuesto] que... NO 'funciona' :-((

Sub Caratula()
hoja = "CARATULA"
Sheets(hoja).Select
Cells.Select
Selection.Copy
Sheets("Vistas").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
End Sub

3) la 'forma' [o la diferencia] como el codigo del formulario 'se trae' las celdas de la hoja 'de origen' a la hoja 'Vistas'...
esta 'recortada'... NO A TODAS LAS CELDAS [de la hoja 'de origen']... sino a un rango 'especifico' :-((
este 'rango recortado' esta determinado por el evento '_change' del combobox en el formulario a: -> 'A1:R38'

4) la 'razon' de 'la falla' [o el comportamiento diferente] es -precisamente- porque el codigo del formulario...
NO esta copiando TODAS LAS CELDAS [de la hoja 'de origen']... [o en su defecto... las filas ENTERAS] <= OJO

5) -posibles- alternativas de solucion ? -> modificando el codigo del formulario...
a) cambiar la asignacion del rango a copiar de la hoja de origen... a:
1) Set oRango = oHoja.Range(sRango).EntireRow
2) Set oRango = oHoja.Cells
b) 'llamando' en lugar de la macro que esta en el modulo del formulario... a la macro que esta en el modulo 'general' :))

si cualquier duda... comentas ?
saludos,
hector.

__ la consulta original __
Porque la funcion: "Selection.PasteSpecial Paste:=xlPasteAll", no funciona adecuadamente con codigos UserForm?
El siguiente codigo permite copiar la hoja CARATULA en la hoja Vistas
sin embargo si se altera el formato de la hoja Vistas empeque#eciendo, por ejemplo, la altura de las filas de esa hoja
la funcion "Selection.PasteSpecial Paste:=xlPasteAll", no es capaz de aplicar el formato de la hoja CARATULA en la hoja Vistas.



__ el codigo expuesto __
Option Explicit
Dim Hoja_elegida As Worksheet
Dim AF As Range
Dim año As Range
Public RangoElegido
Private Sub CommandButton2_Click() 'Botón de Aceptar
CopiarRango
End Sub
Private Sub CommandButton3_Click() 'Botón para Salir
Sheets("Botones").Select
Range("A1").Select
Unload Me
End Sub
Private Sub ComboBox1_Change() 'CARATULA
Set Hoja_elegida = Worksheets(ComboBox1.Text)
RangoElegido = "A1:R38"
End Sub
Private Sub CopiarRango()
Dim oHoja As Object
Dim oRango As Range
Dim sRango As String
Dim Vistas As Object
Set oHoja = Hoja_elegida
sRango = RangoElegido
If (oHoja Is Nothing) Then
MsgBox "Debe elegir una Hoja"
Exit Sub
End If
Set oRango = oHoja.Range(sRango)
oRango.Copy
UserForm1.Hide
Sheets("Vistas").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
End Sub
Respuesta Responder a este mensaje
#2 Maty
20/10/2006 - 17:18 | Informe spam
Gracias Héctor, funcionó a la pefección
Maty

"Héctor Miguel" escribió:

hola, Maty !

-> espero tu comprension por exponer en el foro 'otros' codigos del archivo que me enviaste :)) [pero]...
lo considero un buen 'exponente' de 'como' es que algunas consultas... se quedan 'cortas' :D
[lo que en ocasiones 'ma ha dado por llamar'... -> lo que se ha quedado 'en el tintero'] :))

vale ???

1) existe un codigo de 'preparacion' para comparar el funcionamiento 'entre' copiar celdas de una hoja a otra...
lo que 'hace' este codigo, es 'reducir' la altura de las filas de la columna 'A' a 11 puntos...
despues de seleccionar toda la columna 'A'... -> Selection.RowHeight = 11 <= OJO: la altura de TODA LA FILA

2) existe un codigo [una macro 'normal'] que SI 'funciona', y 'el secreto' es que copia TODAS LAS CELDAS de la hoja 'de origen'...
lo transcribo para que se vea la diferencia 'versus' el codigo en el formulario [expuesto] que... NO 'funciona' :-((

Sub Caratula()
hoja = "CARATULA"
Sheets(hoja).Select
Cells.Select
Selection.Copy
Sheets("Vistas").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
End Sub

3) la 'forma' [o la diferencia] como el codigo del formulario 'se trae' las celdas de la hoja 'de origen' a la hoja 'Vistas'...
esta 'recortada'... NO A TODAS LAS CELDAS [de la hoja 'de origen']... sino a un rango 'especifico' :-((
este 'rango recortado' esta determinado por el evento '_change' del combobox en el formulario a: -> 'A1:R38'

4) la 'razon' de 'la falla' [o el comportamiento diferente] es -precisamente- porque el codigo del formulario...
NO esta copiando TODAS LAS CELDAS [de la hoja 'de origen']... [o en su defecto... las filas ENTERAS] <= OJO

5) -posibles- alternativas de solucion ? -> modificando el codigo del formulario...
a) cambiar la asignacion del rango a copiar de la hoja de origen... a:
1) Set oRango = oHoja.Range(sRango).EntireRow
2) Set oRango = oHoja.Cells
b) 'llamando' en lugar de la macro que esta en el modulo del formulario... a la macro que esta en el modulo 'general' :))

si cualquier duda... comentas ?
saludos,
hector.

__ la consulta original __
> Porque la funcion: "Selection.PasteSpecial Paste:=xlPasteAll", no funciona adecuadamente con codigos UserForm?
> El siguiente codigo permite copiar la hoja CARATULA en la hoja Vistas
> sin embargo si se altera el formato de la hoja Vistas empeque#eciendo, por ejemplo, la altura de las filas de esa hoja
> la funcion "Selection.PasteSpecial Paste:=xlPasteAll", no es capaz de aplicar el formato de la hoja CARATULA en la hoja Vistas.

__ el codigo expuesto __
> Option Explicit
> Dim Hoja_elegida As Worksheet
> Dim AF As Range
> Dim año As Range
> Public RangoElegido
> Private Sub CommandButton2_Click() 'Botón de Aceptar
> CopiarRango
> End Sub
> Private Sub CommandButton3_Click() 'Botón para Salir
> Sheets("Botones").Select
> Range("A1").Select
> Unload Me
> End Sub
> Private Sub ComboBox1_Change() 'CARATULA
> Set Hoja_elegida = Worksheets(ComboBox1.Text)
> RangoElegido = "A1:R38"
> End Sub
> Private Sub CopiarRango()
> Dim oHoja As Object
> Dim oRango As Range
> Dim sRango As String
> Dim Vistas As Object
> Set oHoja = Hoja_elegida
> sRango = RangoElegido
> If (oHoja Is Nothing) Then
> MsgBox "Debe elegir una Hoja"
> Exit Sub
> End If
> Set oRango = oHoja.Range(sRango)
> oRango.Copy
> UserForm1.Hide
> Sheets("Vistas").Select
> Range("A1").Select
> Selection.PasteSpecial Paste:=xlPasteAll
> Application.CutCopyMode = False
> End Sub



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida