Запустить другой лист кнопкой Spin
хотите использовать кнопку «Спин» (элемент управления ActiveX) для отображения предыдущего или следующего листа. Когда кнопка нажата, событие успешно запускается, и нужный лист активируется, но он удерживает некоторые элементы (команды, графики и т. Д.) От исходного листа и показывает их как добавляемое изображение.
Пример кода для события кнопки «Вниз»:
Private Sub SpinButton_JumpToWeek_SpinDown() Dim sh_num As String Dim tmp_num As Integer Application.ScreenUpdating = False Application.EnableEvents = False SpinButton_JumpToWeek.Value = Range("B27").Value - 1 tmp_num = SpinButton_JumpToWeek.Value ' Activate desired KTx sheet sh_num = "KT" & tmp_num Range("F27").Value = "" 'reset to blank Sheets(sh_num).Activate Application.ScreenUpdating = True Application.EnableEvents = True End Sub
Чтобы переопределить этот эффект, мне нужно вручную выбрать (активировать) другой лист, а затем снова выбрать нужный лист. Я также попытался автоматизировать это обходное решение с помощью макроса, но, к сожалению, он не работает.
- Вывод VBA / Excel Spinner не является числом, винты с командами excel
- Измените пользовательскую форму для работы с несколькими листами
- Использовать Excel Spinner для возврата Rolling
- Код для пользовательской формы (spinner), возвращающий тип несоответствия, если выбрано множество ячеек. VBA Excel
Интересно, что эта проблема не возникает, если я выполняю код в режиме отладки (используя точку останова и шаг за строкой).
Удивительно, но у меня нет такой проблемы, если я попытаюсь показать предыдущий / следующий лист, записав значение (индекс имени листа) в определенную ячейку (то есть используя событие Worksheet_Change). Отображается нужная страница. Смотрите фотографии.
Пример кода для описания этого evententer здесь:
Private Sub Worksheet_Change(ByVal Target As Range) Dim sh_num As String Application.ScreenUpdating = False Application.EnableEvents = False If Range("F27").Value > 0 Then ' Activate desired KTx sheet sh_num = "KT" & Range("F27").Value Range("F27").Value = "" 'reset to blank Sheets(sh_num).Activate End If Application.ScreenUpdating = True Application.EnableEvents = True End Sub
Мне нужно использовать кнопку «Спин», потому что она быстрее и позволяет мне пропускать некоторые листы (например, если у них нет данных). Проблема возникает как в 32, так и в 64-битных Excel.
Есть ли у кого-то идея, почему эта проблема возникает и обходной путь? Мне нужно изменить некоторые настройки или системные свойства в Excel? Любая помощь будет высоко оценен.
@mehow Я добавляю свой commenst здесь из-за большого количества слов.
- Я выполнил ваше предложение и попробовал пример UserForm с вставленным активным элементом управления «Microsoft Office Spreadsheet». Я узнал, что это не будет хорошим решением для моего случая, потому что ответ такого листа относительно медленный (даже на быстром компьютере, таком как мой), когда пользователь вставляет значения в ячейки. Кроме того, это значительно усложнит мою довольно простую книгу * .xlsm, в которой содержится более 50 листов (по 1 лист за каждую неделю, содержимое этих листов затем связано с основным листом) и полностью соответствует моим основным потребностям (с исключение этой кнопки вращения, конечно).
На мой взгляд, вероятно, необходимо манипулировать каким-то системным свойством (например, например, Application.ScreenUpdating трюк), но мне не хватает знаний VBA, чтобы найти его.
- Чтобы четко объяснить мой вопрос, мне нужно будет поделиться моей рабочей книгой, но я не знаю, как загрузить ее на этот форум. К сожалению, я не могу успешно загружать / показывать изображения на этом форуме (из-за моей низкой оценки), что также очень помогло бы.
Кстати, я не вижу изображений по другим вопросам этого форума. , Может ли эта проблема возникнуть из-за отсутствия плагинов в веб-браузере?
Вы можете использовать простой трюк … до «Application.screenupdating = true» вы можете вставить две строки:
ActiveWindow.SmallScroll Down:=-100
ActiveWindow.SmallScroll Up:=100