Valores separados de la pestaña Parse en VBA
-
06-07-2019 - |
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.
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)