Excel 在不同的目标单元格上自动导入文本文件
我正在创建一个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列中 提前谢谢 我的语法如下: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”时,如果目标单元格已经生成,它将自动将其输入到右侧
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”不是很好的做法,但我只是想知道在尝试更正语法之前是否可以完成解决方案。再次感谢