Error en variable de texto
No se mucho sobre macros así que tengo una pregunta que tal vez es muy sencilla, bueno al grano:
Tengo una macro:
sub cambiarcarta()
Set hoja = Sheets("TEXTO")
Set a = hoja.Columns("A").Find(Sheets("DATOS").Cells(i, 10), LookAt:=xlWhole)
If Not a Is Nothing Then
TEXTO = hoja.Cells(a.Row, "B")
End If
With ActiveSheet
Cells.Replace What:="<TEXTO>", Replacement:=TEXTO, LookAt:=xlPart, SearchOrder:=xlByRows
End With
End SubObviamente la resumí por que es la parte que me da problemas, ya que en la variable "texto" tengo una cantidad mas o menos grande de texto y la quiero usar para remplazar parte de una carta, no puedo hacerlo manual pues son cientos.
lo chistoso es que uso esa variable en por ejemplo la linea:
msgbox TEXTO
Si arroja todo el texto.
Pero si quiero remmplazar <texto> con todo el valor de la variable me arroja el error 13 "No coinciden los tipos"
¿Alguien sabe a que se debe esto?
1 respuesta
Puedes poner tu código completo, no veo qué tienes en la variable i.
Tampoco entiendo cuál es tu hoja activa.
También puedes poner ejemplos de lo que tienes en cada hoja.
Hice una prueba con datos de prueba y no tengo error.
Si claro
Sub carta()
Dim i As Double
Dim ruta As String
Dim TRAMITE As String
'Dim TEXTO As String
Application.ScreenUpdating = False
ThisWorkbook.Activate
Sheets(2).Name = "GENERAR"
Sheets("GENERAR").Select
Fin = Application.CountA(Sheets("DATOS").Range("A:A"))
On Error Resume Next
With CreateObject("shell.application")
ruta = .browseforfolder(0, Titulo, 0).Items.Item.Path
End With: On Error GoTo 0
If ruta = Empty Then
MsgBox "DEBES SELECCIONAR UNA CARPETA"
Exit Sub
End If
For i = 2 To Fin
NOMBRE = Sheets("DATOS").Cells(i, 1)
APELLIDO = Sheets("DATOS").Cells(i, 2)
TRAMITE = Sheets("DATOS").Cells(i, 3)
DEPENDENCIA = Sheets("DATOS").Cells(i, 4)
OFICINA = Sheets("DATOS").Cells(i, 5)
FECHABAJA = Sheets("DATOS").Cells(i, 6)
ANT = Sheets("DATOS").Cells(i, 7)
EDAD = Sheets("DATOS").Cells(i, 8)
FIRMA = Sheets("DATOS").Cells(i, 9)
'
Set h = Sheets("TEXTO")
Set b = h.Columns("A").Find(Sheets("DATOS").Cells(i, 10), LookAt:=xlWhole)
If Not b Is Nothing Then
TEXTO = h.Cells(b.Row, "B")
End If
'
Call datosh
ActiveSheet.Name = Sheets("DATOS").Cells(i, 1) & " " & Sheets("DATOS").Cells(i, 2)
With ActiveSheet
' Cells.Replace What:="<TEXTO>", Replacement:=TEXTO, LookAt:=xlPart, SearchOrder:=xlByRows
Rows("12:12").RowHeight = 400
Rows("12:12").VerticalAlignment = xlTop
Cells.Replace What:="<FECHA>", Replacement:=Format(Date, "mm/dd/yyyy"), LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<NOMBRE>", Replacement:=NOMBRE, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<APELLIDO>", Replacement:=APELLIDO, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<REFERENCIA>", Replacement:=TRAMITE, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<DEPENDENCIA>", Replacement:=DEPENDENCIA, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<OFICINA>", Replacement:=OFICINA, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<ANT>", Replacement:=ANT, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<EDAD>", Replacement:=EDAD, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<FECHABAJA>", Replacement:=FECHABAJA, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<FIRMA>", Replacement:=FIRMA, LookAt:=xlPart, SearchOrder:=xlByRows
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ruta & "\" & TRAMITE, Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
Sheets(2).Name = "GENERAR"
Next
End Sub
Sub datosh()
Dim Shape As Excel.Shape
Sheets("GENERAR").Select
Columns("A:A").ClearContents
For Each Shape In Sheets("GENERAR").Shapes
Shape.Delete
Next
Sheets("PLANTILLA").Select
Rows("1:50").Select
Selection.Copy
Sheets("GENERAR").Select
Rows("1:50").Select
ActiveSheet.Paste
End SubEspero puedas ayudarme.
Tengo la hoja 1 llamada plantilla es donde está redactada mi carta.
la hoja dos se llama generar, es donde hago los cambios para guardarla posteriormente.
la hoja 3 se llama datos, es de donde tomo los datos para rellenar los datos, todo funciona sin problemas menos cuando busco el elemento que hace que cambie la mayormente de la carta que esta en la columna J, por ejemplo si en esta columna pongo "beneficio conjunto", buscará ese conjunto en la columna a de la hoja "texto" y regresarme el valor correspondiente de la columna b que es de donde tomo los datos y se los asigno a la variable texto.
Activé esta línea en tu macro, probé toda la macro y funciona sin error.
Cells.Replace What:="<TEXTO>", Replacement:=TEXTO, LookAt:=xlPart, SearchOrder:=xlByRows
Puedes enviarme una copia de tu libro para revisar la macro con tus datos.
El problema es la longitud del texto, hice pruebas con texto más corto y funciona.
Si realmente necesitas todo el texto, también hice pruebas dividiendo el texto en 3 columnas:
El código quedaría así:
Sub COMBINAR_CORRESPONDENCIA()
Dim i As Double
Dim ruta As String
Dim TRAMITE As String
'Dim TEXTO As String
Application.ScreenUpdating = False
ThisWorkbook.Activate
Sheets(2).Name = "GENERAR"
Sheets("GENERAR").Select
Fin = Application.CountA(Sheets("DATOS").Range("A:A"))
'
On Error Resume Next
With CreateObject("shell.application")
ruta = .browseforfolder(0, Titulo, 0).Items.Item.Path
End With: On Error GoTo 0
If ruta = Empty Then
MsgBox "DEBES SELECCIONAR UNA CARPETA DE DESTINO", vbExclamation
Exit Sub
End If
'
For i = 2 To Fin
NOMBRE = Sheets("DATOS").Cells(i, 1)
APELLIDO = Sheets("DATOS").Cells(i, 2)
TRAMITE = Sheets("DATOS").Cells(i, 3)
DEPENDENCIA = Sheets("DATOS").Cells(i, 4)
OFICINA = Sheets("DATOS").Cells(i, 5)
FECHABAJA = Sheets("DATOS").Cells(i, 6)
ANT = Sheets("DATOS").Cells(i, 7)
EDAD = Sheets("DATOS").Cells(i, 8)
FIRMA = Sheets("DATOS").Cells(i, 9)
'
Set h = Sheets("TEXTO")
Set b = h.Columns("A").Find(Sheets("DATOS").Cells(i, 10), LookAt:=xlWhole)
If Not b Is Nothing Then
TEXTO = h.Cells(b.Row, "B")
TEXTO2 = h.Cells(b.Row, "C")
TEXTO3 = h.Cells(b.Row, "D")
End If
'
Call ACTUALIZA
ActiveSheet.Name = Sheets("DATOS").Cells(i, 2) & " " & Sheets("DATOS").Cells(i, 1)
With ActiveSheet
Cells.Replace What:="<TEXTO>", Replacement:=TEXTO, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<TEXTO2>", Replacement:=TEXTO2, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<TEXTO3>", Replacement:=TEXTO3, LookAt:=xlPart, SearchOrder:=xlByRows
Rows("12:12").RowHeight = 400
Rows("12:12").VerticalAlignment = xlTop
Cells.Replace What:="<FECHA>", Replacement:=Format(Date, "mm/dd/yyyy"), LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<NOMBRE>", Replacement:=NOMBRE, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<APELLIDO>", Replacement:=APELLIDO, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<REFERENCIA>", Replacement:=TRAMITE, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<DEPENDENCIA>", Replacement:=DEPENDENCIA, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<OFICINA>", Replacement:=OFICINA, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<ANT>", Replacement:=ANT, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<EDAD>", Replacement:=EDAD, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<FECHABAJA>", Replacement:=FECHABAJA, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<FIRMA>", Replacement:=FIRMA, LookAt:=xlPart, SearchOrder:=xlByRows
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ruta & "\" & TRAMITE, Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
Sheets(2).Name = "GENERAR"
Next
End Sub
- Compartir respuesta