适用于一列的宏可适用于excel VB中的所有列

时间:2015-06-26 05:24:06

标签: excel vba excel-vba

我已将excel表格准备为名为“INPUT SHEET”的数据输入表。数据被添加到各个列中,而不是固定的特定数量。这个“输入板”的行。 在每行的末尾,我提供了一个宏按钮,用于从每列中选取值并创建另一个新工作表。

问题是我有100个这样的列,我想避免编辑每个宏来处理每一列。我想要一个宏来识别按下该按钮的列,因此仅对该列起作用。 COLUMN U的示例宏如下所示:我想在此工作表中稍作修改,以便相同的代码适用于所有库存。

' Macro1 Macro===ROW U
'
   ' Create new sheet copying from DATASHEET 1 before last sheet
    '
    Worksheets("DATASHEET 1").Copy before:=Sheets(Worksheets.Count)
    Set wks = ActiveSheet
    Sheets("INPUT").Select
    Range("U10").Select
    Selection.Copy
     ' Retaining the name of sheet
    '
   Range("U150").Select
    ActiveSheet.Paste
     wks.Name = Range("U10").Value
              ' Copying the notes
      '
    Worksheets(Range("u10").Value).Activate
     Range("D62:BF87").Select
    Selection.ClearContents
   Range("AY6").Value = "2"
 Range("A7:BF7").Select
    ActiveCell.FormulaR1C1 = "=INPUT!R[3]C[20]"
    Dim i As Integer, j As Integer

j = 61
For i = 63 To 88
Sheets("INPUT").Select
If Cells(i, 21).Value = "YES" Then
j = j + 1
Worksheets(Range("U10").Value).Activate
Range(Cells(j, 4), Cells(j, 58)).Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
Selection.UnMerge
Sheets("INPUT").Select
Cells(i, 2).Copy
Worksheets(Range("U10").Value).Activate
Cells(j, 4).PasteSpecial Paste:=xlPasteValues
Range(Cells(j, 4), Cells(j, 58)).Select
With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
End If
Next i

1 个答案:

答案 0 :(得分:0)

我可能只使用一个按钮,而不是100个按钮,并根据所选单元格移动它。这样,每次光标移动时,按钮都会移动,然后您可以使用activecell.column方法对该列求和。

您可以使用的代码类似于:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


ActiveSheet.Shapes("Button 1").Left = Cells(40, ActiveCell.Column).Left
End Sub

在您正在处理的工作簿表中。第40行中的按钮将移动到所选列。