请参阅attahced文件:excel文件我在Sheet1中有一个表格。在每一行的末尾,我想有一个分配给它的宏的按钮,如果该行的第一个单元格等于“Sheet2”,则它将该行中的数据填充到 Sheet2 中的某些单元格中。如果第一行显示“Sheet3”,则它将该行中的数据填充到 Sheet3 中的某些单元格中。所以我所做的是首先录制一个如下所示的宏:
Sub fill()
'
' fill Macro
'
Sheets("Sheet2").Select
Range("B2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
Range("D2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
Range("D3").Select
Sheets("Sheet1").Select
End Sub
然后我尝试将其设为有条件:
Sub fill()
'
' fill Macro
'
If Sheet1.Range("A1").Value = "Sheet2" Then
Sheets("Sheet2").Select
Range("B2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
Range("D2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
Range("D3").Select
Sheets("Sheet1").Select
End If
End Sub
但问题是没有执行 if 子句!无论A1有什么值,它都会像没有条件一样不断填写Sheet2!我也保存并运行。请告诉我我错在哪里。谢谢。
使用ActiveSheet.Buttons(Application.Caller).TopLeftCell
将告诉您刚刚单击的按钮的范围。从那里您可以获取 A 列中的工作表名称并将信息发送到那里。
Sub Rng_Butn_Clicked()
Dim BtRng As Range, sh As Worksheet, rw As Long
Set BtRng = ActiveSheet.Buttons(Application.Caller).TopLeftCell
MsgBox BtRng.Address 'remove later
MsgBox Cells(BtRng.Row, 1).Value 'remove later
Set sh = Sheets(Cells(BtRng.Row, 1).Value)
With sh
rw = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
.Cells(rw, 2).Value = Cells(BtRng.Row, 2).Value
.Cells(rw, 3).Value = Cells(BtRng.Row, 3).Value
.Cells(rw, 4).Value = Cells(BtRng.Row, 4).Value
End With
End Sub
将窗体工具箱中的按钮添加到第一个单元格中,并将宏分配给该按钮。您可以对第一个单元格执行此操作,然后向下拖动单元格以复制按钮。
单击按钮,代码会将数据发送到正确的工作表。代码有两个msgboxes,你可以删除它们,只是为了告诉你发生了什么
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句