Error '1004' en tiempo de ejecución en Excel vba variable relativas

Quiero pedirles el favor con el siguiente inconveniente: estoy trabajando con una macro mediante "referencias relativas" mpero al ejecutar dicha macro en VBA:

ActiveCell.Offset(20, 0).Range("a65536").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.WrapText = False
.Color = 65535
.TintAndShade = 0
End With

Me muestra el siguiente error: Se ha producido el error '1004' en tiempo de ejecución : "Error definido por la aplicación o el objeto".

¿A qué se debera?.

1 Respuesta

Respuesta
1

H   o l a:

En esta línea, le estás indicando, que de la celda activa, se mueva 20 filas hacia abajo, después de esa celda, le adicione 65536 líneas, entonces, por ejemplo si estás en la celda a1, te va a seleccionar la celda A20 + 65536, te selecciona la celda A65556

ActiveCell. Offset(20, 0). Range("a65536").Select

Entonces, si tienes la versión 2003 de excel, y quieres seleccionar la celda A65556, esa celda está fuera de la hoja de excel, por eso te envía el mensaje de error: "Se ha producido el error '1004' en tiempo de ejecución : Error definido por la aplicación o el objeto".

Si quieres seleccionar la celda 20 filas abajo de la celda activa, entonces puede ser así:

ActiveCell. Offset(20, 0).Select

Lo anterior es un ejemplo, realmente tendría que saber cuál celda es la que quieres seleccionar, para decirte cómo sería el código.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Hola Dante muchas gracias por su colaboración es que estoy actualizando un software y tengo dentro de una celda con intentar relativa lo siguiente:

.Offset(20, 0) = "N°"

En esto me imprime la letra N°, pero el problema es cuando yo deseo dale apariencia de lineamiento a dicha celda (línea y color), con el siguiente código, es decir:

ActiveCell.Offset(20, 0).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.WrapText = False
.Color = 65535
.TintAndShade = 0
End With

Cuando ejecuti la macro me dice el error: Se ha producido el error '1004', en tiempo de ejecución. Error definido por la aplicación o el objeto y al oprimir Depurar me señala cualquiera de las líneas que están dentro del bloque With End With o sea en principio la línea .Pattern = xlSolid si quito o comentareo la celda .Pattern = xlSolid me señala .PatternColorIndex = xlAutomatic asi sucesivamente, a que se debera?, Muchas gracias por la ayuda!.

¿Qué versión de excel tienes?

Puedes poner la macro completa

Tengo la version Excel 2010. y la macro completa es 

Private Sub CommandButton1_Click()
'validacion de textos 26 de Dic
If TextBox1.Text = "" Then
MsgBox ("Ingresa el Codigo de la Empresa")
TextBox1.SetFocus
ElseIf TextBox2.Text = "" Then
MsgBox ("Ingresa Correctamente el Codigo de la Empresa")
TextBox1.SetFocus
ElseIf ComboBox1.Text = "" Then
MsgBox ("Seleciona el Mes Inicial")
ComboBox1.SetFocus
ElseIf ComboBox2.Text = "" Then
MsgBox ("Seleciona el Mes Final")
ComboBox2.SetFocus
ElseIf ComboBox1.ListIndex > ComboBox2.ListIndex Then
MsgBox ("Mes Final no Puede ser Menor al Mes Inicial")
ComboBox2.SetFocus
Else
' Abre la hpoja que se llama INICIO 26 de Dic
' MEJOR IMPLKEMENTAR ESTO: https://forum.solidworks.com/thread/55139
With ThisWorkbook.Sheets("INICIO")
.Unprotect
If .Range("a7") <> "" Then
.Range("a7:k" & .Range("a65536").End(xlUp).Row + 1).ClearContents ' hace el limpiado 26 de Dic
End If
.Range("a6") = "FORMATO 1.1: LIBRO CAJA - DETALLE DE LOS MOVIMIENTOS DEL EFECTIVO" ' ASIGNACION DE VALOR 26 de Dic
.Range("a7") = "PERIODO" ' ASIGNACION DE VALOR 26 de Dic imprime en la celda a7 de la pagina Inicio el periodo del Userform4
.Range("a8") = "RUC" ' ASIGNACION DE VALOR 26 de Dic TEXTO RUC
.Range("a9") = "RAZON SOCIAL" ' ASIGNACION DE VALOR 26 de Dic TEXTO RAZON SOCIAL
.Range("a6:a9").Font.Bold = True ' ASIGNACION DE VALOR 26 de Dic
.Range("c7") = ": " & TextBox4.Text ' ASIGNACION DE VALOR 26 de Dic texto 4 del userform4
.Range("c8") = ": " & TextBox2.Text ' ASIGNACION DE VALOR 26 de Dic texto 2 del userform4
' .Range("c9") = ": " & TextBox3.Text ' ASIGNACION DE VALOR 26 de Dic texto 3 del userform4
.Range("c9") = TextBox3.Text
With .Range("a6:c9") ' RANGO DONDE SE LE APLICA LAS PROPIEDADES DE ALINEACION DE TEXTO 26 DE DIC
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
End With
.Protect
End With
Dim Ingreso, Egreso As Double
Dim SubtotalIngr, SubtotalEgr As Double
With ThisWorkbook.Sheets("Base de Datos") ' SE ABRE LA HOJA Base de Datos 26 de Dic
For i = ComboBox1.ListIndex + 1 To ComboBox2.ListIndex + 1
Ingreso = 0
Egreso = 0
With ThisWorkbook.Sheets("INICIO").Range("a65536").End(xlUp)
' .Offset(2, 0) = NombreDeMes(CByte(i)) ' imprime el mes
' .Offset(3, 0) = "N°"
' .Offset(3, 1) = "FECHA"
' .Offset(3, 2) = "TIPO"
' .Offset(3, 3) = "SERIE"
' .Offset(3, 4) = "NUMERO"
' .Offset(3, 5) = "MOV."
' .Offset(3, 6) = "NOMBRE Y/O DETALLE"
' .Offset(3, 7) = "FUENTE DE Fto."
' .Offset(3, 8) = "INGRESO"
' .Offset(3, 9) = "SALIDA"
.Offset(18, 0) = NombreDeMes(CByte(i)) ' imprime el mes
.Offset(20, 0) = "N°"
' ActiveSheet.Cells(7, 3).Offset(5, 4).Select
.Offset(20, 1) = "FECHA"
.Offset(20, 2) = "TIPO"
.Offset(20, 3) = "SERIE"
.Offset(20, 4) = "NUMERO"
.Offset(20, 5) = "MOV."
.Offset(20, 6) = "NOMBRE Y/O DETALLE"
.Offset(20, 7) = "FUENTE DE Fto." '28 de DIC PROBLEMA
.Offset(20, 8) = "INGRESO" '28 de DIC PROBLEMA
.Offset(20, 9) = "SALIDA"
'Selection.Offset(18, 0).Select
' 2 de Enero
' Selection.Offset(18, 0).Select
End With

For c = 2 To .Range("a65536").End(xlUp).Row
If .Range("a" & c) = TextBox1.Text Then
If .Range("b" & c) = NombreDeMes(CByte(i)) Then
With ThisWorkbook.Sheets("INICIO").Range("a65536").End(xlUp)
.Offset(1, 0) = ThisWorkbook.Sheets("Base de Datos").Range("c" & c) 'llena los registros en la hoja Base de Datos 26 de Dic
.Offset(1, 1) = ThisWorkbook.Sheets("Base de Datos").Range("d" & c) 'Asigna a las celdas lo que se almaceno en la hoja llamada "Base de datos" 26 de Dic
.Offset(1, 2) = ThisWorkbook.Sheets("Base de Datos").Range("e" & c) 'Asigna a las celdas lo que se almaceno en la hoja llamada "Base de datos" 26 de Dic
.Offset(1, 3) = ThisWorkbook.Sheets("Base de Datos").Range("f" & c) 'Asigna a las celdas lo que se almaceno en la hoja llamada "Base de datos" 26 de Dic
.Offset(1, 4) = ThisWorkbook.Sheets("Base de Datos").Range("g" & c) 'Asigna a las celdas lo que se almaceno en la hoja llamada "Base de datos" 26 de Dic
.Offset(1, 5) = ThisWorkbook.Sheets("Base de Datos").Range("h" & c) 'Asigna a las celdas lo que se almaceno en la hoja llamada "Base de datos" 26 de Dic
.Offset(1, 6) = ThisWorkbook.Sheets("Base de Datos").Range("l" & c) 'Asigna a las celdas lo que se almaceno en la hoja llamada "Base de datos" 26 de Dic
.Offset(1, 7) = ThisWorkbook.Sheets("Base de Datos").Range("j" & c) 'Asigna a las celdas lo que se almaceno en la hoja llamada "Base de datos" 26 de Dic
If CDbl(ThisWorkbook.Sheets("Base de Datos").Range("k" & c)) > 0 Then ' Aqui se trabaja lo de Ingreso
.Offset(1, 8) = ThisWorkbook.Sheets("Base de Datos").Range("k" & c) ' Aqui se trabaja lo de Ingreso
Ingreso = Ingreso + CDbl(ThisWorkbook.Sheets("Base de Datos").Range("k" & c)) 'llena los registros en la hoja Base de Datos 26 de Dic
ElseIf CDbl(ThisWorkbook.Sheets("Base de Datos").Range("k" & c)) < 0 Then ' Aqui se trabaja lo de Ingreso
.Offset(1, 9) = CDbl(ThisWorkbook.Sheets("Base de Datos").Range("k" & c)) * -1 ' Aqui se trabaja lo de Ingreso
Egreso = Egreso + (CDbl(ThisWorkbook.Sheets("Base de Datos").Range("k" & c)) * -1) ' Aqui se trabaja lo de Egreso
End If
If .Offset(1, 7) = "OFRENDA GENERAL" Then
'.Offset(1, 15) = "OFRENDA GENERAL"
Hoja1.TextBox1.Text = "OFRENDA GENERAL"
ElseIf .Offset(1, 7) = "OFRENDA SANTACENA" Then
Hoja1.TextBox1.Text = "OFRENDA SANTACENA"
ElseIf .Offset(1, 7) = "DIEZMO" Then
Hoja1.TextBox1.Text = "DIEZMO"
ElseIf .Offset(1, 7) = "PRIMICIA" Then
Hoja1.TextBox1.Text = "PRIMICIA"
ElseIf .Offset(1, 7) = "OFRENDA DE AMOR" Then
Hoja1.TextBox1.Text = "OFRENDA DE AMOR"
ElseIf .Offset(1, 7) = "APORTE" Then
Hoja1.TextBox1.Text = "APORTE"
ElseIf .Offset(1, 7) = "DONACIONES" Then
Hoja1.TextBox1.Text = "DONACIONES"
ElseIf .Offset(1, 7) = "OTROS" Then
Hoja1.TextBox1.Text = "OTROS"
End If
End With
End If
End If
Next c
With ThisWorkbook.Sheets("INICIO").Range("a65536").End(xlUp) ' se hace lo de inicio
If IsNumeric(.Offset(0, 0)) Then
.Offset(1, 7) = "SUB TOTALES" ' imprime SUB TOTALES
.Offset(1, 8) = Ingreso ' imprime Ingreso
.Offset(1, 9) = Egreso ' imprime Egreso
.Offset(2, 7) = "SALDO FINAL" ' imprime Saldo Final
If Ingreso > Egreso Then ' si el Ingreso es mayor que el Egreso
.Offset(2, 9) = Ingreso - Egreso ' hace el calculo de Ingreso menos egreso y lo asigna a l,a celda (2,9)
ElseIf Ingreso < Egreso Then 'si el Ingreso es menor que el Egreso
.Offset(2, 8) = Egreso - Ingreso ' hace el calculo de egreso menos Ingreso y lo asigna a l,a celda (2,8)
End If
' .Offset(3, 0) = "TOTALES" 'se hace el calculo de los totales 26 Dic
' .Offset(3, 8) = .Offset(1, 8) + .Offset(2, 8) 'se hace el calculo de los totales 26 Dic
' .Offset(3, 9) = .Offset(1, 9) + .Offset(2, 9) 'se hace el calculo de los totales 26 Dic
.Offset(3, 7) = "TOTALES" 'se hace el calculo de los totales 26 Dic
.Offset(3, 8) = .Offset(1, 8) + .Offset(2, 8) 'se hace el calculo de los totales 26 Dic
.Offset(3, 9) = .Offset(1, 9) + .Offset(2, 9) 'se hace el calculo de los totales 26 Dic
End If
'Incluido 26 de Diciembre
.Offset(6, 5) = "N°"
.Offset(6, 6) = "FUENTE"
.Offset(6, 7) = "INGRESO"
.Offset(6, 8) = "GASTO"
.Offset(6, 9) = "SALDO"
.Offset(7, 5) = "1"
.Offset(8, 5) = "2"
.Offset(9, 5) = "3"
.Offset(10, 5) = "4"
.Offset(11, 5) = "5"
.Offset(12, 5) = "6"
.Offset(13, 5) = "7"
.Offset(14, 5) = "8"
.Offset(7, 6) = "OFRENDA GENERAL"
.Offset(8, 6) = "OFRENDA SANTACENA"
.Offset(9, 6) = "DIEZMO"
.Offset(10, 6) = "PRIMICIA"
.Offset(11, 6) = "OFRENDA DE AMOR"
.Offset(12, 6) = "APORTE"
.Offset(13, 6) = "DONACIONES"
.Offset(14, 6) = "OTROS"
.Offset(15, 6) = "TOTAL"


'If .Offset(4, 7) = "OFRENDA GENERAL" Then
If Hoja1.TextBox1.Text = "OFRENDA GENERAL" Then
'Cells(22, 8) = Cells(16, 9)
.Offset(7, 7) = .Offset(1, 8)
'Cells(22, 9) = Cells(16, 10)
.Offset(7, 8) = .Offset(1, 9)
.Offset(7, 9) = .Offset(7, 7) - .Offset(7, 8)
' Cells(22, 10) = Cells(22, 8) - Cells(22, 9)
ElseIf Hoja1.TextBox1.Text = "OFRENDA SANTACENA" Then
.Offset(8, 7) = .Offset(1, 8)
.Offset(8, 8) = .Offset(1, 9)
.Offset(8, 9) = .Offset(8, 7) - .Offset(8, 8)
ElseIf Hoja1.TextBox1.Text = "DIEZMO" Then
.Offset(9, 7) = .Offset(7, 8)
.Offset(9, 8) = .Offset(7, 9)
.Offset(9, 9) = Cells(9, 7) - Cells(9, 8)
ElseIf Hoja1.TextBox1.Text = "PRIMICIA" Then
.Offset(10, 7) = .Offset(7, 8)
.Offset(10, 8) = .Offset(7, 9)
.Offset(10, 9) = .Offset(10, 7) - .Offset(10, 8)
ElseIf Hoja1.TextBox1.Text = "OFRENDA DE AMOR" Then
.Offset(11, 7) = .Offset(7, 8)
.Offset(11, 8) = .Offset(7, 9)
.Offset(11, 9) = .Offset(11, 7) - .Offset(11, 8)
ElseIf Hoja1.TextBox1.Text = "APORTE" Then
.Offset(12, 7) = .Offset(7, 8)
.Offset(12, 8) = .Offset(7, 9)
.Offset(12, 9) = .Offset(12, 7) - .Offset(12, 8)
ElseIf Hoja1.TextBox1.Text = "DONACIONES" Then
.Offset(13, 7) = .Offset(7, 8)
.Offset(13, 8) = .Offset(7, 9)
.Offset(13, 9) = .Offset(13, 7) - .Offset(13, 8)

ElseIf Hoja1.TextBox1.Text = "OTROS" Then
.Offset(14, 7) = .Offset(7, 8)
.Offset(14, 8) = .Offset(7, 9)
.Offset(14, 9) = .Offset(14, 7) - .Offset(14, 8)
End If
' para la suma (Total suma ingresos):
.Offset(15, 7) = .Offset(7, 7) + .Offset(8, 7) + .Offset(9, 7) + .Offset(10, 7) + .Offset(11, 7) + .Offset(12, 7) + .Offset(13, 7) + .Offset(14, 7)
' para la suma (Total suma egresos):
.Offset(15, 8) = .Offset(7, 8) + .Offset(8, 8) + .Offset(9, 8) + .Offset(10, 8) + .Offset(11, 8) + .Offset(12, 8) + .Offset(13, 8) + .Offset(14, 8)
'Cells(27, 15) = .Offset(21, 7)
'Cells(27, 15) = "hola mundo"
'MsgBox ActiveCell.Offset(1, 7).Address
.Offset(15, 9) = .Offset(15, 7) - .Offset(15, 8)
End With
Next i
End With
End If
Call coloramiento
' fotos
On Error GoTo Salida
foto = Cells(9, 3).Text
'rutaimagen = Application.GetOpenFilename("Jpg Files(*.jpg),*.jpg")
ActiveSheet.Image1.Picture = LoadPicture("C:\Aplicacion\" & foto & ".jpg") '5 de Enero de 2017
'ActiveSheet.Image1.Picture = LoadPicture(rutaimagen)
Exit Sub
Salida:
MsgBox "ha ocurrido un error, revise los nombres al insertar las fotos", vbCritical
End Sub

codigo de la funcion llamada coloramiento:

Sub coloramiento()
ActiveCell.Offset(20, 0).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
' .WrapText = False
.Color = 65535
.TintAndShade = 0
End With
End Sub

Aqui es en donde esta el error

Al revisar la macro anterior, veo que la hoja está protegida, entonces debería quedar así:

Sub coloramiento()
    ActiveSheet.Unprotect
    ActiveCell.Offset(20, 0).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        ' .WrapText = False
        .Color = 65535
        .TintAndShade = 0
    End With
    ActiveSheet.Protect
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas