在Excel中使用宏来编辑另一个表中的单元格值?

时间:2011-05-14 14:57:55

标签: excel excel-vba worksheet vba

我有一个包含3个工作表的Excel项目,即“不健康食品”“健康食品”和“膳食”

这两张食物表包含食物清单及其脂肪,蛋白质和碳水化合物含量。使用该数据,还计算每100克的卡路里。这些食物分为3个小标题:食物,零食和饮料。我想创建一个宏,它将使用每个食品项旁边的“添加到餐”按钮启动,该按钮将行的内容复制到“餐”类中的第一个可用行。

这可能吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

使用按钮引用工作表中的单元格的问题(在我看来)是按钮是工作表上的对象,这使得它们在列/行方面的位置非常棘手。

如果您想使用按钮,这是强力方法。假设你在Healthy Foods中有以下内容:

     A         B      C          D
1    Item      Fat    Protein    Sugar
2    Apple     0      50         5       |Add To Menu|  <-- this is a commandbutton called **Apple**
3    Snickers  100    0          100     |Add to Menu|  <-- this is a commandbutton called **snickers**

以下代码会将详细信息复制到Meal中的下一个可用行(注意 - 我认为Meal与上面显示的表格格式相同)

Private Sub Apple_Click()
    AddMealToMenu Range("A2") //For each button you must specify range where item is in table
End Sub

Sub AddMealToMenu(ref As Range)
    Dim mealItem As Range
    Set mealItem = Range(ref, ref.Offset(0, 3))
    mealItem.Copy Destination:=GetNextFreeRow
End Sub

Function GetNextFreeRow() As Range
    With Worksheets("Meal")
        If .Range("A2") = vbNullString Then
            Set GetNextFreeRow = .Range("A2")
        Else
            Set GetNextFreeRow = .Range("A1").End(xlDown).Offset(1, 0)
        End If
    End With
End Function

对于 Snickers ,您需要为Apple添加simialr代码,即

Private Sub Snickers_Click()
    AddMealToMenu Range("A3")
End Sub

如果这对您有用,那很好,但可能需要一些设置并且是一种蛮力方法。

相关问题