2013-03-22 2 views
0

Добрый день. Я сталкиваюсь с ситуацией, я надеюсь, что кто-то здесь может помочь. Я запускаю Office 2010 в Windows XP и имею таблицу Excel, содержащую кнопку для отображения модальной формы (Form01). Form01 содержит 3 списка данных. Двойной щелчок элемента в спискеbox2 откроет другую модальную форму (Form02), чтобы элемент мог быть изменен. Разгрузка Form02 сохранит данные и вызовет пару макросов, чтобы настроить именованный диапазон на листе хоста. Этот код хранится в модуле, а не в форме.Форма Excel VBA не освежает должным образом, когда подформация закрыта.

Здесь возникает проблема. Когда Form02 выгружается и Form01 доступен, я не могу выбрать что-либо в спискеbox1 или listbox3 или кнопках Form01. Я должен сначала выбрать что-то в спискеbox2, тогда у меня есть доступ к другим элементам управления в форме. Я попытался .SetFocus на других элементах управления и добавить DoEvents после инструкции Form02.Show 1 без везения. Единственное обходное решение, которое я нашел, - это скрыть и изменить форму Form01, которая заставляет экран мерцать. Application.ScreenUpdating = False и обратно в True, похоже, тоже не помогает. Мне действительно нужно выяснить, какие другие элементы управления недоступны, когда Form02 показан и затем закрыт. Кто-нибудь еще испытал это поведение или может иметь предложение?

+0

Я протестировал и попробовал (xl2010 + Win7) и не смог воспроизвести проблему. Поэтому моя лучшая догадка (поскольку вы не указали какой-либо код) основана на том, что вы сказали «Выгрузка Form02 сохранит данные и вызовет пару макросов, чтобы настроить именованный диапазон на листе хоста». Возможно ли увидеть вашу рабочую книгу ? –

+0

Проверьте, не установлено ли какое-либо из других событий формы (в * * * форме) 'Form01.ListBox1.Enabled = False' или' Form01.Listbox3.Enabled = False'. Вы также можете отлаживать в непосредственном окне с помощью '? Form01.Listbox1.Enabled' и отображать True или False. Если это так, их просто повторно включить. –

+0

@Siddharth. У меня есть образец файла, который я хотел бы предоставить. Извиняюсь, я новичок в этом форуме и не знаю, как загрузить приложение и не иметь персональный сайт для публикации. Любые предложения о том, как опубликовать этот образец файла? –

ответ

0

Изменить этот

Private Sub lstSiteMaster_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
    If lstSiteMaster.ListCount = 0 Then Exit Sub 
    LoadFrmEditDataset Me.Controls("lstSiteMaster"), "SITE MASTER" 
    frmEditDataset.Show 1 
    Unload frmEditDataset 
    DoEvents 
    Me.lstSiteMaster.ListIndex = -1 
    Me.lstSiteList.ListIndex = -1 
    Me.lstMiniPOR.ListIndex = -1 
    '''BounceTheForm 
End Sub 

в

Private Sub lstSiteMaster_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
    If lstSiteMaster.ListCount = 0 Then Exit Sub 
    LoadFrmEditDataset Me.Controls("lstSiteMaster"), "SITE MASTER" 
    frmEditDataset.Show 1 
    DoEvents 
    Me.lstSiteMaster.ListIndex = -1 
    Me.lstSiteList.ListIndex = -1 
    Me.lstMiniPOR.ListIndex = -1 
    '''BounceTheForm 
End Sub 

И

это

Private Sub cmdApply_Click() 
    With Me 
     UpdateDataset .lblDataset, .lblECR, .lblFA, .lblFieldId, .txtFieldValue, .cboAction, .lblIndex + 2 
    End With 

    Me.Hide 
End Sub 

в

Private Sub cmdApply_Click() 
    With Me 
     UpdateDataset .lblDataset, .lblECR, .lblFA, .lblFieldId, .txtFieldValue, .cboAction, .lblIndex + 2 
    End With 

    Unload Me 
End Sub 
+0

Это сработало отлично. Спасибо за помощь. Я очень ценю это. –

Смежные вопросы