2016-01-24 48 views
0

我創建了用於更新數據庫的小型Excel窗體。工作很好,雖然工作人員做了奇怪的事情,必須每週更換一個乾淨版本的Excel。所以我正在考慮創建更新Excel工作表(DutySelection)的用戶表單。 我有很多按鈕(窗體)A4:A31將控制其打開取決於B4 3個不同的用戶窗體一個宏:B31下拉列表中選擇許多按鈕(用戶窗體)控制單個宏將根據選擇打開不同的用戶窗體

目前我的代碼只從B4作品無論我點擊了哪個按鈕。 EG:B4選擇開始,開始表單打開。 B6選擇完成,開始窗體打開

Sub Duty() 

    If Sheets("DutySelection").Range("B4,B31") = "Start" Then 
     frmStart.Show 

    ElseIf Sheets("DutySelection").Range("B4,B31") = "Duty Type" Then 
     ReportUpdate.Show 

    Else: Sheets("DutySelection").Range("B4,B31") = "Finish" 'Then 
     frmFinish.Show 

    End If 
End Sub 

我在想,我很想念一兩行字,但就是找不到什麼,我需要在線

+0

我不知道爲什麼你有這麼多按鈕調用相同的宏。您可以將事件添加到工作表中,以便在選擇單元格時檢查它的列,如果列B,則可以將按鈕移動到特定單元格並使其可見。選擇其他單元格將隱藏按鈕。也解鎖你允許工作人員改變的單元格,然後保護工作表,例如'Activesheet.Protect UserInterfaceOnly:= True' – PatricK

回答

1

Sheet.Range(「B4,B31」)不會返回您認爲它所做的事情:它將返回由2個區域組成的複合範圍,區域1爲單元格B4,區域2爲單元格B31。也就是說,當你選擇單元格B4,然後按住Ctrl單擊單元格B31時,就會得到相同的結果。

我認爲你的意思是「B4:B31」,但是這也會返回其他內容:一個數組填充(範圍爲B4到B31的所有單元格的值)。您無法將其與文本字符串進行比較。

什麼你想在這裏通過B4和B31之間的所有細胞的循環,那麼它們的值與您感興趣的文本。

另一個問題是,你的代碼在第一個文本永遠只能充當它匹配。因此,如果單元格B4包含「開始」,那麼ElseIf將無法評估,即使單元格B5包含「職務類型」也不行。處理這個問題的最好方法取決於您如何在表單的B列中獲取這些文本。

+0

最好在循環中嘗試選擇案例嗎?或者根據標準設置一個sub來啓動用戶表單?我的第二個問題是更多的實驗,可能最好,但循環中的情況可能是一個很好的選擇。 –

+0

好吧,我會說謝謝你沒有意識到,卡爾科林,你的回答實際上給了我正確的答案。結束了使用3循環,它的工作只是花了我一些時間來使其工作。謝謝 – Drag00n

0

如果我正確地理解了你,你在B列旁邊的每一行都有一個按鈕,然後單擊它來調用在對應行中列B中選擇的動作,對吧?

在這種情況下,我會建議你將3個按鈕放在一起,以便調用3個不同的宏。

問候, 增值稅

相關問題