Загрузка данных CSV в конкретную электронную таблицу Excel в книге - PullRequest
1 голос
/ 21 января 2012

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

Сейчас я загружаю временные данные на этот отдельный (скрытый) лист и буду ссылаться на них на других листах. Таблица составляет около 4 МБ и обновляется ежедневно.

Как я могу получить VBScript для загрузки этого CSV в статически именованный лист, который будет очищен перед загрузкой?

 URLDownloadToFile 0, fileURL, "%tmp%\tmpExchDBData.csv", 0, 0

Dim dbSheet As Worksheet Dim targetSheet As Worksheet

Workbooks.Open Filename: = "% tmp% \ tmpExchDBData.csv", _ Формат: = 2 'использовать разделители запятых Установить dbSheet = ActiveSheet

Установить targetSheet = Workbooks ("Book1"). Sheets (3) ', куда вы хотите переместите его на

dbSheet.Move After: = targetSheet 'dbSheet теперь находится в вашей книге.

- Скрой это. Установить dbSheet = ActiveSheet dbSheet.Visible = xlSheetHidden

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Импорт CSV, особенно регулярный импорт одного и того же CSV-файла, можно выполнить, определив его как источник данных. Выберите нужный лист, Лента данных, Из текста.

После определения у вас есть чрезвычайно полезные параметры в свойствах соединения, такие как «Обновить данные при открытии» или «Обновлять каждые x минут».

1 голос
/ 11 апреля 2018

У меня была похожая проблема. Если это поможет, вот фрагмент кода, с которым я закончил:

Sub Atualizar_B_BR_QSA_IC()

    Application.ScreenUpdating = False  'speed up macro execution
    Application.EnableEvents = False    'turn off other macros for now
    Application.DisplayAlerts = False   'turn off system messages for now

'Atualizar base B_BR_QSA_IC
    Dim base_1 As Workbook
    Dim plan_1 As Worksheet
    Dim nome_arquivo_1 As String
    Dim destino_1 As Worksheet

    nome_arquivo_1 = Application.ActiveWorkbook.Path & "\BR_QSA_Report_CC.csv"
    Set destino_1 = ThisWorkbook.Worksheets("B_BR_QSA_IC")
    Set base_1 = Workbooks.Open(Filename:=nome_arquivo_1, Local:=True)
    Set plan_1 = base_1.Worksheets(1)

'Limpar a última linha, que é uma linha de totais e não queremos usar
    plan_1.Cells(Rows.Count, "A").End(xlUp).EntireRow.Delete

'Caso o excel já não entenda corretamente na abertura, vamos fazer Texto para Colunas do csv
    plan_1.Range("A1:A" & plan_1.Cells(Rows.Count, "A").End(xlUp).Row).TextToColumns _
        Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(1, 4)

'Agora vamos copiar a base para o arquivo Master (após limpá-lo) e fechar a base sem salvar
    destino_1.Range("B2:T" & destino_1.Cells(Rows.Count, "B").End(xlUp).Row).Clear
    plan_1.Range("A3:S" & plan_1.Cells(Rows.Count, "A").End(xlUp).Row).Copy
    destino_1.Range("B2").PasteSpecial xlPasteValuesAndNumberFormats
    base_1.Close savechanges:=False

'Se não há fórmula nas colunas A e B após plugar a base, precisamos colocar até o tamanho da base
    If IsEmpty(destino_1.Range("A" & destino_1.Cells(Rows.Count, "B").End(xlUp).Row)) Then
    destino_1.Range("A2").Copy Destination:=destino_1.Range("A" & (destino_1.Cells(Rows.Count, "A").End(xlUp).Row + 1) _
        & ":" & "A" & destino_1.Cells(Rows.Count, "B").End(xlUp).Row)

'Se já há, precisamos limpar até o tamanho da base
    ElseIf Not IsEmpty(destino_1.Range("A" & (destino_1.Cells(Rows.Count, "B").End(xlUp).Row + 1))) Then
    destino_1.Rows((destino_1.Cells(Rows.Count, "B").End(xlUp).Row + 1) & ":" & destino_1.Cells(Rows.Count, "A") _
        .End(xlUp).Row).EntireRow.Delete
    End If

'Maquiagem
    destino_1.Cells.Font.Name = "Calibri"
    destino_1.Cells.Font.Size = 8
    destino_1.Rows.RowHeight = 11.25

    Application.DisplayAlerts = True    'turn system alerts back on
    Application.EnableEvents = True     'turn other macros back on
    Application.ScreenUpdating = True   'refreshes the screen

End Sub
...