首页 > 解决方案 > 如何使用 VBA 宏向每个工作表添加连接列?

问题描述

我想制作一个 Excel VBA 宏,它添加一个列“A”,其中包含第 2 行的“B”“C”和“D”的串联,直到没有更多数据为止。然后宏将其应用于工作簿中的每个工作表。每张纸都有不同的列长。

我目前的代码如下:

Sub forEachWs()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    Call ConCat(ws)
Next
End Sub

Sub ConCat(ws As Worksheet)
With ws
       Dim lr As Integer
lr = Cells.Find("*", Cells(1, 1), xlFormulas, xlPart, xlByRows, xlPrevious, False).Row
Columns("A:A").Insert Shift:=xlToRight
Range("A2").Formula = "=CONCATENATE(RC[1],""."",RC[2],""_"",RC[3])"
Range("A2").AutoFill Range("A2:A" & lr)
Columns("A:A").AutoFit
End With
End Sub

此代码多次将连接列添加到第一个工作表。我该怎么做才能使其适用于工作簿中的所有工作表而不是重复应用到一张工作表?

标签: excelvba

解决方案


最终工作的代码是我通过 BigBen 编译的代码

Sub LoopOverEachColumn()
    Dim WS As Worksheet
    For Each WS In ThisWorkbook.Worksheets
        ConCat WS
        On Error GoTo 0
    Next WS
    On Error GoTo 0
    
End Sub

Private Sub ConCat(WS As Worksheet)
    Dim lr As Integer
    lr = WS.Cells.Find("*", Cells(1, 1), xlFormulas, xlPart, xlByRows, xlPrevious, False).Row
    WS.Columns("A:A").Insert Shift:=xlToRight
    WS.Range("A2").Formula = "=CONCATENATE(RC[1],""."",RC[2],""_"",RC[3])"
    WS.Range("A2").AutoFill WS.Range("A2:A" & lr)
    WS.Columns("A:A").AutoFit
    On Error GoTo 0
End Sub

我在最终的工作表上弹出了一个错误,因为它是空白的,所以我在那里抛出了一些错误以克服障碍,以防同事尝试使用它。


推荐阅读