Я работаю над надстройкой Excel VSTO в VB.Net. Я пытаюсь решить вопрос о том, какую книгу должна выполнять моя надстройка, учитывая, что пользователь может открывать или закрывать множество книг до, после или во время использования моей основной формы.
Все основные функции сосредоточены на редактировании основного файла шаблона, который пользователь предположительно сохраняет с полезными именами и может вернуться к нему для справки или дальнейшего редактирования. Надстройка открывает форму и выполняет различные функции, такие как добавление информации из базы данных на лист или добавление листов в книгу (и множество статистических данных). Многое из того, что я делаю, основано на вызове конкретной книги:
CurrentRun = Marshal.GetActiveObject("Excel.Application")
CurrentBook = CurrentRun.Workbooks(CurrentIndex)
Где CurrentIndex
— это индекс из поля со списком, которое заполняется/обновляется именами открытых в данный момент книг:
...
ControlCurrentWBComboBox.Items.Clear()
CurrentRun = Marshal.GetActiveObject("Excel.Application")
For n = 1 To CurrentRun.Workbooks.Count()
ControlCurrentWBComboBox.Items.Add(CurrentRun.Workbooks(n).Name)
Next
CurrentRun = Nothing
...
Для этого пользователь должен выбрать книгу (по имени), с которой он хочет работать. Это казалось хорошей идеей, пока я не представил ее сегодня 8 разным пользователям. Большинство со временем привыкло к выбору книги, но не без большого количества ворчания и выбрасывания ошибок (которые были хорошо обработаны). 2 пользователя так и не получили его и постоянно случайно редактировали не ту книгу и выдавали ошибки через час использования.
Есть ли лучший способ справиться с этим? Я думаю попробовать сделать две версии: одну с вышеперечисленным и одну для людей, которым нужно меньше опций. Есть ли способ заставить своего рода отношения 1-к-1, которые вы можете получить, поместив код VBA в саму книгу?
Могу ли я использовать базу, даже пытаясь справиться с этим или ссылаясь на что-либо, кроме ActiveWorkbook?
[Примечание: меня немного пугает синее предупреждение, которое говорит мне, что это субъективный вопрос. Я не хочу, чтобы это было; возможно, мне нужна помощь с формулировкой?]
CurrentBook = CurrentRun.Workbooks(CurrentIndex)
? в идеалеCurrentIndex
не должно иметь никакого значения... Или это было предварительно заполнено? Если это было предварительно заполнено, то одно из решений, которое я вижу для вашей проблемы, - установить для комбо пустое значение, а затем отловить его на случай, если пользователь не выберет соответствующую книгу? - person Siddharth Rout   schedule 29.03.2013