Excel 在不同的目标单元格上自动导入文本文件

Excel 在不同的目标单元格上自动导入文本文件,excel,vba,Excel,Vba,我正在创建一个excel宏,该宏会自动将daily_stats.xlsx中的统计信息从statistics.txt文件输入单元格D10:D33和单元格E10:E33 这些统计数据每天生成,明天的目标单元格位于当前单元格的右侧 因此,今天的统计数据包括: D10:D33和E10:E33 明天将进入: F10:F33和G10:G33 后天将进入: H10:H33和I10:I33 等等 我如何更改下面的语法,以便每当它拾取文本文件“stats.txt”时,如果目标单元格已经生成,它将自动将其输入到右侧

我正在创建一个excel宏,该宏会自动将daily_stats.xlsx中的统计信息从statistics.txt文件输入单元格D10:D33和单元格E10:E33

这些统计数据每天生成,明天的目标单元格位于当前单元格的右侧

因此,今天的统计数据包括:

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

以下是如何找到第一个空白列:

Dim lFirstNewCol as Long
Const lRow = 1 

lFirstNewCol = ActiveSheet.Cells(lRow, ActiveSheet.Columns.Count).End(xlToLeft).Column + 1
这将使用第一行来查找它,如果需要,可以将
Const
值更改为其他行

如果您喜欢列字母:

然后,关于如何将其应用于特定代码,粘贴前的行将更改为:

Cells(10, lFirstNewCol).Select
另外,请学习如何将代码转换为使用完全限定对象。避免使用像
这样的东西。选择
。激活
,因为它们有问题


所以只需更新一下。我合并了上述语法并缩短了语法,因此它将其复制到一个表达式中

im使用的新语法是:

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)之外的行中具有值

我希望这是有道理的


提前感谢

我将如何合并此功能?你能给我看一些语法吗?嗨,谢谢你转发给我这个语法,但我似乎无法让它工作-它仍然将宏输出粘贴到相同的单元格中,不管我运行宏多少次都没有问题。如果你发现它对你有效,请记住接受答案,这样它就不会成为一个开放的问题。嗨,所以我仍然没有设法让它工作,它一直填充相同的单元格,这就是为什么选择和激活是坏的-当获得新列时,正确的工作表是否处于活动状态?它必须在设置要激活的工作表之后进行,而不是之前。嗨,我刚刚发布了一个更新,它更详细地解释了我遇到的问题。我知道使用“.Active”和“.Select”不是很好的做法,但我只是想知道在尝试更正语法之前是否可以完成解决方案。再次感谢