Автоматизация импорта текстовых файлов в различные целевые ячейки - PullRequest
0 голосов
/ 21 ноября 2019

Я создаю макрос Excel, который автоматически вводит статистику из daily_stats.xlsx в ячейки D10: D33 и ячейки E10: E33 из файла statistics.txt.

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

Итак, сегодняшняя статистика входит в:

D10: D33 и E10:E33

завтрашние дни войдут в:

F10: F33 и G10: G33

послезавтра перейдут в:

H10: H33 и I10: I33 ...

и т. Д.

Как изменить приведенный ниже синтаксис, чтобы при получении текстового файла "stats.txt" он автоматически вводился в2 столбца справа, если целевые ячейки уже были сгенерированы?

Заранее спасибо

Мой синтаксис следующий:

Sub Macro1()

Workbooks.OpenText Filename:= _
    "C:\Users\username\Desktop\stats.txt" _
    , Origin:=xlMSDOS, StartRow:=2, DataType:=xlDelimited, TextQualifier:= _
    xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, _
    Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), _
    Array(2, 1), Array(3, 1), Array(4, 9), Array(5, 9)), TrailingMinusNumbers:=True
Range("A1:A24").Select
Selection.Copy
Windows("daily_stats.xlsx").Activate
Range("D10").Select
ActiveSheet.Paste
Windows("stats.txt").Activate
Range("B1:B24").Select
Application.CutCopyMode = False
Selection.Copy
Windows("daily_stats.xlsx").Activate
Range("E10").Select
ActiveSheet.Paste
Windows("stats.txt").Activate
ActiveWindow.Close
Range("D10").Select

End Sub

Ответы [ 2 ]

0 голосов
/ 21 ноября 2019

Так что просто обновление. Я включил приведенный выше синтаксис и сократил синтаксис, чтобы он копировал его в одном выражении.

Новый используемый мной синтаксис:

Sub Macro3()
'
' Macro3 Macro
'

'

Workbooks.OpenText Filename:= _
    "C:\Users\username\Desktop\stats.txt"_
    , Origin:=xlMSDOS, StartRow:=2, DataType:=xlDelimited, 
TextQualifier:= _
    xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, 
Semicolon:=False, _
    Comma:=False, Space:=True, Other:=False, 
FieldInfo:=Array(Array(1, 9), _
    Array(2, 1), Array(3, 1), Array(4, 9), Array(5, 9)), 
TrailingMinusNumbers:=True
Range("A1:B24").Select
Selection.Copy
Windows("daily_stats.xlsx").Activate
Dim lFirstNewCol As Long
Const lRow = 1
lFirstNewCol = ActiveSheet.Cells(lRow, 
ActiveSheet.Columns.Count).End(xlToLeft).Column + 1
Cells(10, lFirstNewCol).Select
ActiveSheet.Paste
Windows("stats.txt").Activate
ActiveWindow.Close
End Sub

Так что это добавляет новый столбец ксправа от первого «пустого» столбца.

Однако проблема в том, что это уже отформатированная электронная таблица, поэтому во многих строках есть значения, кроме целевых ячеек, в которые я хочу вставить (которые пустые). Первый полностью пустой столбец - это столбец "CJ ";Столбцы A, B, C, D, E, F, H, I, .... CI уже отформатированы и имеют значения в строках, за исключением целевых строк (10:33).

Надеюсь, это имеет смысл

Заранее спасибо

0 голосов
/ 21 ноября 2019

Вот как вы можете найти первый пустой столбец:

Dim lFirstNewCol as Long
Const lRow = 1 

lFirstNewCol = ActiveSheet.Cells(lRow, ActiveSheet.Columns.Count).End(xlToLeft).Column + 1

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

Если вы предпочитаете букву столбца: Преобразовать номер столбца в букву

Затем, как применить это к вашему конкретному коду, строка перед вставкой изменится наthis:

Cells(10, lFirstNewCol).Select

Обратите внимание на то, как конвертировать код для использования полностью определенных объектов. Избегайте использования таких вещей, как .Select и .Activate, так как они проблематичны.

Как избежать использования Select в Excel VBA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...