Добавить конкретный CSV в книгу в VBA - PullRequest
0 голосов
/ 22 января 2019

У меня есть книга Excel, и я хочу добавить конкретный CSV в качестве нового листа, а затем преобразовать его в таблицу.

Вот мой код VBA, все работает нормально, проблема в том, что тогдакогда я хочу преобразовать лист во вкладку, тогда Excel выдает мне эту ошибку:

Таблица не может перекрывать диапазон, который содержит отчет сводной таблицы, результаты запроса, защищенные ячейки или другую таблицу.

Sub Macro8()
     '
     '
    Dim strPath As String
    Dim strFile As String
     '
    strPath = "Q:\myfolder\"
    strFile = Dir(strPath & "filename" & Format(Now(), "YYYYMMDD") & ".csv")
    Do While strFile <> ""
        With ActiveWorkbook.Worksheets.Add
            With .QueryTables.Add(Connection:="TEXT;" & strPath & strFile, _
                Destination:=.Range("A1"))
                .Parent.Name = Replace(strFile, ".csv", "")
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileConsecutiveDelimiter = False
                .TextFileTabDelimiter = False
                .TextFileSemicolonDelimiter = False
                .TextFileCommaDelimiter = True
                .TextFileSpaceDelimiter = False
                .TextFileColumnDataTypes = Array(1)
                .TextFileTrailingMinusNumbers = True
                .Refresh BackgroundQuery:=False
            End With
        End With
        strFile = Dir
     Loop

End Sub


Sub A_SelectAllMakeTable()
    Dim tbl As ListObject
    Dim rng As Range

    Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
    Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
    tbl.Name = "OPEN"
    tbl.TableStyle = "TableStyleMedium15"
End Sub

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 22 января 2019

Таблица не может перекрывать диапазон, содержащий отчет сводной таблицы, результаты запроса, защищенные ячейки или другую таблицу.

Сначала необходимо разорвать соединение с запросом, иначе вы получитеошибка, которую вы получаете.это то, что вы пытаетесь?

Sub A_SelectAllMakeTable()
    Dim tbl As ListObject
    Dim rng As Range
    Dim ws As Worksheet
    Dim lCol As Long, lRow As Long

    Set ws = ActiveSheet

    With ws
        '~~> Delete the connection
        For Each Cn In .QueryTables
            Cn.Delete
        Next Cn

        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            '~~> Find last row and column to construct your range
            lRow = .Cells.Find(What:="*", _
                    After:=.Range("A1"), _
                    Lookat:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Row

            lCol = .Cells.Find(What:="*", _
                    After:=.Range("A1"), _
                    Lookat:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByColumns, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Column

            Set rng = .Range(.Cells(1, 1), .Cells(lRow, lCol))

            Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
            tbl.Name = "OPEN"
            tbl.TableStyle = "TableStyleMedium15"
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...