Cadenas que se ha pasado más de 255 caracteres se truncan en Excel

Seleccione idioma Seleccione idioma
Id. de artículo: 213841 - Ver los productos a los que se aplica este artículo
Para un Microsoft Excel 97 y versiones anterior y Microsoft Excel 98 y la versión anterior de este artículo, vea 105416.
Expandir todo | Contraer todo

En esta página

Síntomas

Si utiliza un Microsoft Visual Basic para procedimiento de aplicaciones para pasar una cadena es mayor que 255 caracteres de longitud a un objeto, como un cuadro de texto, Microsoft Excel puede truncar la cadena a 255 caracteres o puede que no escriba la cadena en el cuadro de texto.

Este comportamiento también normalmente se produce cuando intenta pasar más de 255 caracteres al argumento SourceData o de conexión de la PivotTableWizard. Cuando intenta hacer esto, recibirá el siguiente mensaje de error:
Error en tiempo de ejecución '1004':
Error del método PivotTableWizard de clase de hoja de cálculo
Nota : este comportamiento afecta a otros objetos de Excel.

Causa

En Microsoft Excel 7.0 o versiones anteriores, este comportamiento se produce porque el límite de caracteres por celda es 255 caracteres. Como resultado, cadenas mayores de 255 caracteres de longitud que se pasan desde un procedimiento de Visual Basic a cualquier función de Microsoft Excel o el objeto se truncan a 255 caracteres.

En Excel, puede utilizar más de 255 caracteres en una celda; sin embargo, cuando pasa las cadenas que son mayores que 255 caracteres de longitud de un procedimiento de Visual Basic, Excel utiliza el mismo diseño que utilizan versiones anteriores.

Este límite se aplica a todas las cadenas que se pasa desde un procedimiento de Visual Basic a una hoja de cálculo de Excel; no es exclusiva de información que se pasa a las celdas. Por ejemplo, si pasa una cadena de texto que es más de 255 caracteres a un cuadro de texto en una hoja de cálculo o una hoja de diálogo, Excel truncará el texto, aunque un cuadro de texto puede contener hasta 10.240 caracteres.

Solución

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos. Para insertar más de 255 caracteres en un cuadro de texto, utilice la propiedad Characters para insertar varias variables de cadena. Los ejemplos 1 y 2 contienen macros que utilice la propiedad Characters para ello.

Para pasar más de 255 caracteres a la conexión o argumentos SourceData , convertir la cadena larga en una matriz. Para ver una macro de ejemplo que utiliza una función definida por el usuario, vea el ejemplo 3.

Ejemplo 1

En el ejemplo siguiente, la longitud de caracteres de cada variable es 100. Cada método Insert inserta otra cadena en la posición al final de la cadena anterior.
Sub NoLoop()
   Dim var1 As String, var2 As String, var3 As String, var4 As String
   Dim first As Integer, second As Integer, third As Integer

   ' Create four text string, each 100 characters in length.     
   var1 = String(100,"a")
   var2 = String(100,"b")
   var3 = String(100,"c")
   var4 = String(100,"d")

   ' The character length of each variable string is 100 characters.
   ' Define the variable equal to length of the first string.
   first = Len(var1) + 1
   ' Define variables equal to length of the original string plus
   ' the length of each additional string.
   second = first + Len(var2)
   third = second + Len(var3)

   ' Select the text box on the worksheet.
   ActiveSheet.Shapes("Text Box 1").Select

   With Selection

      ' Place the first string into the text box.
      .Characters.Text = var1

      ' Place the second, third, and fourth text strings into the
      ' text box. 
      .Characters(Start:=first).Text = var2
      .Characters(Start:=second).Text = var3
      .Characters(Start:=third).Text = var4
   End With
End Sub
				

Ejemplo 2

Este ejemplo utiliza una estructura de bucle para insertar una cadena larga en un cuadro de texto.
Sub Looper()
   Dim i as Integer
   Dim mytxt As String

   ' Create a string 1000 characters in length.
   mytxt = WorksheetFunction.Rept("test", 250)

   ActiveSheet.Shapes("Text Box 1").Select
      
   With Selection

      ' Initialize text in text box.
      .Text = ""
      For i = 0 To Int(Len(mytxt) / 255)
      .Characters(.Characters.Count + 1).Text = Mid(mytxt, (i * 255) + _
         1, 255)
      Next

   End With

End Sub
				

Ejemplo 3: Convertir texto en una matriz para PivotTableWizard

Este ejemplo crea una tabla dinámica de una base de datos de Microsoft Access. Convierte el valor para el argumento Connection a una matriz mediante la función StringToArray porque la cadena es mayor que 255 caracteres de longitud.
Sub ExecuteLongConnection()

    'Declare variables.
    Dim Chan As Variant
    Dim LongConnection As Variant
    Dim NumRows, NumCols As Variant

    ' Set LongConnection to a long connection string
    ' (> 127 characters).
    LongConnection = "ODBC;DBQ=\\mustang2\databases\nwind.mdb;" _
       & "DefaultDir=\\mustang2\databases;Driver={Microsoft " _
       & "Access Driver (*.mdb)};DriverId=25;FIL=MS Access;" _
       & "ImplicitCommitSync=Yes;MaxBufferSize=512;MaxScanRows=8;" _
       & "PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;" _
       & "UserCommitSync=Yes"

    ' Execute the PivotTableWizard method and use the StringToArray
    ' function to convert the long string to elements in an array.
    ActiveSheet.PivotTableWizard SourceType:=xlExternal, SourceData:= _
           Array("SELECT Employees.EmployeeID, Employees.Region," _
           & "Employees.Country FROM `\\mustang2\databases\NWIND`" _
           & ".Employees Employees"), _
           TableDestination:="", TableName:="PivotTable1", _
           BackgroundQuery:=False, _
           Connection:=StringToArray(LongConnection)

'NOTE: You can add your own code to add fields to the pivot table.

End Sub

Function StringToArray(Query As Variant) As Variant

   Const StrLen = 127 ' Set the maximum string length for
                      ' each element in the array to return
                      ' to 127 characters.
   Dim NumElems As Integer
   Dim Temp() As String

   ' Divide the length of the string Query by StrLen and
   ' add 1 to determine how many elements the String array
   ' Temp should contain, and redimension the Temp array to
   ' contain this number of elements.

   NumElems = (Len(Query) / StrLen) + 1
   ReDim Temp(1 To NumElems) As String

   ' Build the Temp array by sequentially extracting 127
   ' segments of the Query string into each element of the
   ' Temp array.

   For i = 1 To NumElems
      Temp(i) = Mid(Query, ((i - 1) * StrLen) + 1, StrLen)
   Next i

   ' Set the function StringToArray to the Temp array so it
   ' can be returned to the calling procedure.

   StringToArray = Temp

End Function
				

Referencias

Para obtener más información acerca de cómo obtener ayuda con Visual Basic para aplicaciones, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
226118Lista de recursos que están disponibles para ayudarle a aprender Visual Basic para aplicaciones de programación

Propiedades

Id. de artículo: 213841 - Última revisión: miércoles, 24 de enero de 2007 - Versión: 4.5
La información de este artículo se refiere a:
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
Palabras clave: 
kbmt kbdtacode kberrmsg kbprb kbprogramming KB213841 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 213841

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com