Страницы: 1
RSS
Как избежать вставки ячеек при повторном выполнении импорта текста
 
Всем добрый день.

Сделал файл для расчета по нескольким таблицам, одна из формул следующего вида =DSUM('REVENUE by TRANS. CODE'!$A$1:$W$1135;"AMOUNT";$M$3:$O$8), друга совсем простая =SUM('MARKET STATISTIC by SEGMENT'!$AF:$AF), но в одном и другом случае происходит смещение вправо при использование файла. После чего именно я понять не могу, так как файлом пользуются другие сотрудники.

Подскажите, по какой причине может происходить смещение? Т.е. 'REVENUE by TRANS. CODE'!$A$1:$W$1135 становится например 'REVENUE by TRANS. CODE'!$AM$1:$BP$1135.
В файл используется макрос закгрузки данных txt файлов но соответствующие вкладки, имена фалов всегда одинаковые.

Сначала хотел сам прописать открытие txt файлов для этого задавал переменные, но потом записал рекордером.  
Код
Option Explicit

Dim sStat As String
Dim sStaty As String
Dim sRev As String
Dim OdirS As String
Dim odirSY As String
Dim odirR As String

    
    Sub Import()
    sStat = "Stat"
    sStaty = "Stat-1"
    sRev = "Rev"
    OdirS = "C:\Users\h7149-gl4\Desktop\DRR\sStat.txt"
    odirSY = "C:\Users\h7149-gl4\Desktop\DRR\sStaty.txt"
    odirR = "C:\Users\h7149-gl4\Desktop\DRR\sRev.txt"
    
     
    Sheets("MARKET STATISTIC by SEGMENT").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;U:\Forum\Daily Reports\DRR report\stat.txt", Destination:=Range("$A$1") _
        )
        .Name = "stat_3"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 866
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Sheets("MARKET STATISTIC by SEGMENT Y-1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;U:\Forum\Daily Reports\DRR report\stat-1.txt", Destination:=Range( _
        "$A$1"))
        .Name = "stat-1_2"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 866
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Sheets("REVENUE by TRANS. CODE").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;U:\Forum\Daily Reports\DRR report\Rev.txt", Destination:=Range("$A$1"))
        .Name = "Rev_2"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Sheets("MAIN").Select
End Sub
 
Слишком мало информации..
А так... Смещение может происходить, если добавить столбцы после того, как формула вставлена в ячейки.
Хотя... У Вас же абсолютные ссылки.
Тогда - если вставлены столбцы в файле-источнике.
Допустим если формула ссылалась на лист1$А$1, а потом перед столбцом А на листе лист1 вставили столбец, то формула будет ссылаться на лист1$B$1
Изменено: Михаил Лебедев - 04.03.2020 12:45:38
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Посмотрел файл, так как сотрудник его сохранил, видимо сотрудник делал импорт данных из txt трижды, так как на вкладке три массива следующих один за дргим вправо и смещение в формуле происходит ровно на ширину каждого массива, т.е. формула берет ширину последнего выгруженного массива данных

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

А не молгли бы в таком случае подсказать, т.е. код данного макроса, записанного рекрдером, работает так, что заполняет данные в первую пустую ячейку (столбец) и смещает каждую выгрузку правее относительно предыдущей?  
Изменено: RADLE - 04.03.2020 13:58:57
 
Есть файл Excel с макросом (код я написал), этот файл импортирует данные txt файлов на свои соответсвующие вкладки вкладки (три файла txt импортируются на три вкладки), а на главном листе файла Excel (с макросом) прописаны формылы, консолидирующие данные с вкладок, который мы импортировали из txt, в определенный отчет. И когда я проверяю данный отчет я вижу, что в нем в формулах смещены ссылки на ячейки, смещение происходи вправо. Как я понял, смещение происходи если импорт делать несколько раз подряд, данные на вкладки импортируются со смещением относительно предыдущего импорта и почему-то меняются ссылки в формулах.  
 
Цитата
RADLE написал:
код я написал
Код написал макрогенератор, а Вы его далее используете. Этот код создает новый объект QueryTable. При повторном использовании кода нужно удалить предыдущий  (ранее созданный) объект QueryTable, поскольку он уже занял планируемый для импорта диапазон. Либо переимпортировать данные в ранее созданный объект. Первый вариант можно реализовать, добавив перед вызовом метода QueryTables.Add  
Код
  On Error Resume Next
  With ActiveSheet.QueryTables(1)
    .ResultRange.ClearContents
    .Delete
  End With
  On Error GoTo 0
Тема: как избежать вставки ячеек при повторном выполнении импорта текста
Изменено: sokol92 - 04.03.2020 15:35:56
Владимир
Страницы: 1
Наверх