Использовать макрос в Excel для редактирования значений ячеек в другой таблице? - PullRequest
0 голосов
/ 14 мая 2011

У меня есть проект Excel, который содержит 3 рабочих листа, а именно «Нездоровая еда», «Здоровая еда» и «Еда»

В двух таблицах продуктов приведен список продуктов, а также их содержание жира, белков и углеводов. Используя эти данные, их калории на 100 грамм также рассчитываются. Эти продукты делятся на 3 подзаголовка: Продукты питания, закуски и напитки. Я хочу создать макрос, который будет запускаться с помощью кнопки «Добавить в еду» рядом с каждым элементом питания в каждой таблице, которая будет копировать содержимое строки в первую доступную строку в классе «Еда».

Возможно ли это сделать? Если да, то как?

1 Ответ

1 голос
/ 14 мая 2011

Проблема (на мой взгляд) с использованием кнопок для ссылки на ячейки на рабочем листе заключается в том, что кнопки - это объекты на рабочем листе, что усложняет получение их позиции в виде столбца / строки.

Вот подход грубая сила , если вы хотите использовать кнопки. Предположим, что в 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 (NB - я предполагаю, что Еда в том же формате таблицы, как показано выше)

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 вам нужно добавить код simialr для Apple, т.е.

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

Если это работает для вас, хорошо, но это может потребовать некоторой настройки и является подходом грубой силы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...