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

我已经准备好了一张名为“INPUT SHEET”的数据input表。 数据被添加到固定的特定编号的各个列中。 这个“input表”的行。 在每行的末尾,我提供了一个macrosbutton,它从每列中选取值并创build另一个新的工作表。

问题是,我有100个这样的列,我想避免编辑每个macros对每列工作。 我想要一个单独的macros来标识按下button的列,并相应地只在该列上工作。 COLUMN U的示例macros如下所示:我希望对此表进行一些修改,以便相同的代码适用于所有coulmns。

' 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 

而不是有100个button,我可能只使用一个,并根据选定的单元格移动它。 这样,每次光标移动,button就会移动,然后您可以使用activecell.column方法来求和该列。

你可以使用的代码是这样的:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Shapes("Button 1").Left = Cells(40, ActiveCell.Column).Left End Sub 

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