質問

Excelからコピーされたクリップボードデータ(タブ区切りテキスト)を取得して、辞書のコレクションに解析しようとしています。アイデアは、各行が、ヘッダーからセル値にマップするディクショナリによって表されるということです。コピーされたデータの最初の行にはヘッダーが含まれます。

クリップボードからテキストを取得するのは簡単です:

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

次に、入力を行に分割します:

Dim strRows As Variant

strRows = Split(clipString, vbNewLine)

次に、ヘッダーの抽出を試みます。

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

最後に行を抽出します:

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

ただし、エラーが発生します。行上

headers.Add strCols(col), col

Accessが実行時エラー「12」で戻ります:タイプが一致しません。

更新は上記の問題を修正しました。提案に感謝します。行にエラーが表示されています

Set cells = CreateObject(Scripting.Dictionary)

424:オブジェクトが必要です。

私が何が間違っているかについてのヒント-VBAは本当に私の得意ではありません。

Update 2 もこの問題を修正しました(以下の提案に感謝します)。コードが機能するようになりました。

役に立ちましたか?

解決

2番目の問題-ターゲットクラスの文字列名を指定する必要があるため、実際にはそれが

Set cells = CreateObject("Scripting.Dictionary")

他のヒント

colは文字列型である必要があると思います。

headers.strCols(col)、cstr(col)を追加

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top