2015-10-19 102 views
0

我已經實現了下面的代碼,列出一個ComboBox內的所有打開的工作簿的名稱:列表打開的工作簿減去當前工作簿

Option Explicit 
Private Sub ComboBox1_Change() 
If Me.ComboBox1.ListIndex < 0 Then 
Me.CommandButton2.Enabled = False 
Else 
Me.CommandButton2.Enabled = True 
End If 
End Sub 

Private Sub CommandButton1_Click() 
Unload Me 
End Sub 
Private Sub CommandButton2_Click() 
MsgBox "Are you sure you want to select " & Me.ComboBox1.BoundValue, vbOKOnly 
Application.Workbooks(Me.ComboBox1.Value).Activate 
End Sub 
Private Sub UserForm_Initialize() 

Dim myWin As Window 
Dim wkbk As Workbook 

With Me.ComboBox1 
.Style = fmStyleDropDownList 
End With 

With Me.CommandButton1 
.Caption = "Cancel" 
.Enabled = True 
.Cancel = True 
.TakeFocusOnClick = False 
End With 

With Me.CommandButton2 
.Enabled = False 
.Default = True 
.Caption = "Activate Workbook" 
.TakeFocusOnClick = False 

End With 

Me.Caption = "Please select a workbook" 

For Each wkbk In Application.Workbooks 
For Each myWin In wkbk.Windows 
If myWin.Visible = True Then 
Me.ComboBox1.AddItem wkbk.Name 

Exit For 
End If 
Next myWin 
Next wkbk 

End Sub 

這個偉大的工程,但也列出在列表頂部的當前工作簿。有沒有辦法將當前工作簿從列表中排除?

我已經嘗試在ComboBox下拉單擊事件上實施以下操作,但沒有多少運氣。

ComboBox1.RemoverItem ("Workbook.xls") 

乾杯

+0

添加一個'if not thisworkbook'? – findwindow

+0

'如果不是wkbk.Name = Thisworkbook.Name' –

回答

1

每我的意見。

For Each wkbk In Application.Workbooks 
If not wkbk.name =thisworkbook.name then 
For Each myWin In wkbk.Windows 
If myWin.Visible = True Then 
Me.ComboBox1.AddItem wkbk.Name 
Exit For 
End If 
Next myWin 
end if 
Next wkbk 
+0

嗨,感謝您的回覆。我試過了代碼,它被掛在「Next wkbk」,編譯錯誤「Next without For」 – user1993376

+0

我的錯。放置在錯誤的地方endif。 – findwindow

+0

這個伎倆!謝謝 – user1993376