Как динамически обновить имя листа в Excel? - PullRequest
0 голосов
/ 22 февраля 2009

У меня есть таблица Excel, которая используется для указания информации о сборке файловой системы для нашей команды Unix.

Эта таблица будет иметь различную информацию в зависимости от системы, которая будет построена. Например, производственная система будет иметь много файловых систем, а система разработки - только одну или две.

Таким образом, основываясь на пользовательском вводе, мы заполнили бы тот или иной из двух форматов ввода («dev», «prod»), но конечный лист будет всегда одинаковым. Только один из рабочих листов разработчиков или разработчиков может быть видимым и активным для пользователей для ввода данных в любой момент времени.

Как мы говорим Excel использовать определенный входной лист для вычисления другого выходного листа?

Моя первоначальная идея состояла в том, что для простоты «выходной» рабочий лист будет брать свои данные из «входного» рабочего листа, и что мы будем динамически превращать либо «dev», либо «prod» шаблон в «вход» Рабочий лист. Это правильный способ сделать это, или есть какой-то лучший метод?

Ответы [ 3 ]

1 голос
/ 23 февраля 2009

если вы можете использовать код VBA, как рекомендует LuckyLindy, вы можете делать практически все что угодно. Я привык записывать макросы для различных операций, например, добавлять или переименовывать листы, брать сгенерированный код и адаптировать его для выполнения именно того, что требовалось.

Пример простого макрокода:

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "My Sheet"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Sheet5").Select
    Sheets("Sheet5").Name = "My Sheet 2"
End Sub

Вы можете записывать очень сложные операции, манипулировать сгенерированным кодом и размещать его за конкретными событиями. Поэтому, если вы хотите, чтобы код запускался при загрузке листа или активации листа, вы можете вставить его в соответствующий блок: т.е.

'in Sheet1 - code behind (alt+F11 shortcut)
Private Sub Worksheet_Activate()
    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "My Sheet"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Sheet5").Select
    Sheets("Sheet5").Name = "My Sheet 2"
End Sub

НТН

1 голос
/ 22 февраля 2009

Есть несколько способов в зависимости от сложности листа:

  • Если у вас всего несколько листов, и пользователи просто выбирают «Производство» или «Тест», вы можете настроить условную логику в формулах. Например: = if (A1 = "Test", TestSheet! A1 + TestSheet! A2, ProdSheet! A1 + ProdSheet! A2)
  • Вы можете использовать тот же тип идеи, что и выше, но добавить больше сложности, используя таблицы vlookup
  • Ваш код VBA может динамически создавать всю электронную таблицу Excel на основе пользовательского ввода
0 голосов
/ 27 февраля 2009

Другой способ - использовать формулу INDIRECT.

Скажем, у вас в ячейке A1 есть имя листа, с которого вы хотите посмотреть входные данные, затем следующий запрос найдет значение ячейки B7 из этого листа:

=INDIRECT($A$1,"!B7")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...