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 Sub

Obviamente 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

Respuesta
2

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 Sub

Espero 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.

[email protected]

Ya te lo mandé, ojala le encuentres algo que yo no.

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

¡Gracias! 
Si desgraciadamente necesito todo el texto como podría hacer para ingresar por ejemplo así:

 Cells.Replace What:="<TEXTO>", Replacement:=TEXTO & TEXTO2 & TEXTO 3

para que queden separados por párrafos, ya que no todos los textos son de la misma longitud.

Utilicemos otro enfoque.

Cambia esto

Cells.Replace What:="<TEXTO>", Replacement:=TEXTO, LookAt:=xlPart, SearchOrder:=xlByRows

Por esto:

Range("A12") = Replace(Range("A12"), "<TEXTO>", TEXTO, , , vbTextCompare)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas