Pregunta

Estoy tratando de tomar los datos del portapapeles copiados de Excel (es decir, texto separado por tabulaciones) y analizarlos en una Colección de Diccionarios. La idea es que cada fila estará representada por un Diccionario que asigna desde los encabezados a los valores de las celdas. La primera fila de los datos copiados contendrá los encabezados.

Obtener el texto del portapapeles es bastante fácil:

Dim dataObj As DataObject
Dim clipString As String
Set dataObj = New DataObject
dataObj.GetFromClipboard
clipString = dataObj.GetText

Luego dividí la entrada en filas:

Dim strRows As Variant

strRows = Split(clipString, vbNewLine)

A continuación intento extraer los encabezados:

Dim headers As New Collection
Dim strCols As Variant
strCols = Split(strRows(0), vbTab)

For col = LBound(strCols) To UBound(strCols) - 1
    headers.Add strCols(col)
Next

Finalmente extraigo las filas:

Dim cells
Dim rows As New Collection

For i = 1 To UBound(strRows) - 1
    strCols = Split(strRows(0), vbTab)
    Set cells = CreateObject("Scripting.Dictionary")
    For col = 0 To UBound(strCols) - 1
        cells.Add headers.Item(col + 1), strCols(col)
    Next
    rows.Add cells
Next

Sin embargo, recibo un error. En la linea

headers.Add strCols(col), col

El acceso vuelve con el error de tiempo de ejecución '12': no ??coincide el tipo.

Actualización solucionó el problema anterior, gracias por las sugerencias. Ahora recibo un error en la línea

Set cells = CreateObject(Scripting.Dictionary)

424: Objeto requerido.

Cualquier pista sobre lo que estoy haciendo mal: VBA no es realmente mi fuerte.

Actualización 2 también solucionó este problema (gracias por la sugerencia a continuación). El código ahora funciona.

¿Fue útil?

Solución

Para su segundo problema: debe proporcionar el nombre de la cadena de la clase de destino, por lo que en realidad es

Set cells = CreateObject("Scripting.Dictionary")

Otros consejos

Creo que col tiene que ser de tipo cadena.

encabezados. Agregue strCols (col), cstr (col)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top