【发布时间】:2018-10-24 02:20:37
【问题描述】:
这是我最初的问题的后续问题,它帮助我解决了脚本的第一部分:Autofill unknown amount of cells。
我的脚本的第二部分是连接未知数量的单元格。
使用第一个问题中的逻辑,我尝试将我的脚本更改为 myconcatenate = ActiveCell.FormulaArray = "=Concatenate("A5", mylastcell_4)"
但这会导致语法错误。
最初我得到了这段脚本,它自己运行良好,但添加到我的脚本底部时不起作用
Do
myconcatenate = myconcatenate & ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop Until ActiveCell.Address = mylastcell_5
Range("A5").Select
ActiveCell.Value = myconcatenate
这会产生 运行时错误“1004”应用程序定义或对象定义错误,并将转到第 5 行的最后一个单元格(即使我目前在第 1 行中只占用了 5 个单元格) ) 并且在它通过所有单元格时什么也不做。有时它会执行脚本的第一部分(将 '' 添加到单元格值中),其他时候则不会。
这是我的完整上下文脚本:Screenshot of full script
最终,我试图从 abcddf 列表中获取 'a'、'b'、'c'、'd'、'e'、'f',进入一个单元格。
最终目标图片:
第 5 行单元格 D 给出了我想要的最终答案,E5 将是 mylastcell_5
这是我使用 VBA 的第一天,我花了一整天的时间在谷歌上搜索并尝试回答问题,但这对我来说没有任何结果。
更新:我已经声明了我以前没有做过的 mylastcell_5。我现在在脚本中没有收到任何错误,它只是在 A5 处闲逛而不是到页面的最后,但它实际上并没有连接。
所以我认为我需要以某种方式更改我的循环,以便它写入第 5 行但从第 4 行读取......但我不知道该怎么做。
Option Explicit
Sub concat()
'
' concat Macro
' 'text','text'
'
' Keyboard Shortcut: Ctrl+Shift+C
'
With ThisWorkbook.Worksheets("Sheet1")
Dim mylastcell_1 As String, mylastcell_2 As String, mylastcell_3 As String, mylastcell_4 As String, mylastcell_5 As String, myconcatenate As String, myconcatenate1 As String
Range("A1").Select
Selection.End(xlToRight).Select
mylastcell_1 = ActiveCell.Address
Range(mylastcell_1).Select
ActiveCell.Offset(1, 0).Select
mylastcell_2 = ActiveCell.Address
Range(mylastcell_2).Select
ActiveCell.Offset(1, 0).Select
mylastcell_3 = ActiveCell.Address
Range(mylastcell_3).Select
ActiveCell.Offset(1, 0).Select
mylastcell_4 = ActiveCell.Address
Range(mylastcell_4).Select
ActiveCell.Offset(1, 0).Select
mylastcell_5 = ActiveCell.Address
myconcatenate = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Range("A2").Select
Selection.End(xlToRight).Select
Range("A2").Select
Range("A2", mylastcell_2).Select
Selection.FormulaArray = "''"
Range("A3").Select
Range("A3", mylastcell_3).Select
Selection.FormulaArray = "'',"
Range("A4").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(R[-2]C,R[-3]C,R[-1]C)"
Range("A4").Select
.Range(.Cells(4, "A"), .Cells(1, .Columns.Count).End(xlToLeft).Offset(3, 0)).Formula = "=concatenate(a2, a1, a3)"
Range("A5").Select
Do
myconcatenate = myconcatenate & ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop Until ActiveCell.Address = mylastcell_5
Range("A5").Select
ActiveCell.Value = myconcatenate
End With
End Sub
【问题讨论】:
-
请更新您的问题以在屏幕截图中包含完整代码。完成后,将
Option Explicit添加到模块顶部并修复所有编译错误。你得到 1004 是因为mylastcell_5从未被定义。 -
哪个版本的 Excel?
-
@Comintern 我已经更新了脚本,不再出现错误,但它仍然没有做任何我想做的事情。
-
@Vasily Excel 版 Professional Plus 2016
-
您忘记了 editing your question 的部分以包含完整代码而不是 a screenshot of your code。