2017-09-26 68 views
0

在excel文件'A.xlsx' - 我有一個用戶表單,其中點擊瀏覽按鈕(CommandButton1),打開另一個excel文件(說'B.xlsx)',目前在excelfile張在 '選擇需求計劃' 組合框顯示(ComboBox1通過特定工作簿循環(通過路徑)和特定工作表

enter image description here

執行此代碼是:

Private Sub CommandButton1_Click() 
    Dim sFilePath As String 
    sFilePath = Application.GetOpenFilename() 
    Workbooks.Open (sFilePath) 

    For Each sht In ActiveWorkbook.Sheets 
      Form.ComboBox1.AddItem (sht.Name) 
    Next sht 
End Sub 

我はNT所選擇的工作表的所有列標題(列名)(說Sheet1)選定的工作簿(B.xlsx)在其他組合框顯示(Part Number, CSUFI/ATA, Keyword ..)

我開始寫一個單獨的功能如下:

Private Sub ComboBox1_Change() 
    cmb = Form.ComboBox1.Value 
    Dim Cell As Range 
    For Each Cell In ActiveWorkbook.Worksheets(cmb).Range("A1:AR1") 
     Form.ComboBox2.AddItem (Cell.Value) 
     Form.ComboBox3.AddItem (Cell.Value) 
     Form.ComboBox4.AddItem (Cell.Value) 
     Form.ComboBox5.AddItem (Cell.Value) 
     Form.ComboBox6.AddItem (Cell.Value) 
     Form.ComboBox7.AddItem (Cell.Value) 
     Form.ComboBox8.AddItem (Cell.Value) 
     Form.ComboBox9.AddItem (Cell.Value) 
     Form.ComboBox10.AddItem (Cell.Value) 
     Form.ComboBox11.AddItem (Cell.Value) 
     Form.ComboBox12.AddItem (Cell.Value) 
     Form.ComboBox13.AddItem (Cell.Value) 
    Next Cell 
End Sub 

很明顯,這個代碼的問題是它通過當前的ActiveWorkbook這是A.xlsx循環。我希望它通過選定的工作簿循環(B.xlsx)

  1. 如何做到這一點?

另外,截至目前,我給它一個硬編碼範圍(A1:AR1),這會導致組合框中出現很多空條目。意圖是它只遍歷非空列標題(有效的列標題)

  1. 我該怎麼做?

完整的代碼截至目前:

Private Sub ComboBox1_Change() 
    cmb = Form.ComboBox1.Value 
    Dim Cell As Range 
    For Each Cell In ActiveWorkbook.Worksheets(cmb).Range("A1:AR1") 
     Form.ComboBox2.AddItem (Cell.Value) 
     Form.ComboBox3.AddItem (Cell.Value) 
     Form.ComboBox4.AddItem (Cell.Value) 
     Form.ComboBox5.AddItem (Cell.Value) 
     Form.ComboBox6.AddItem (Cell.Value) 
     Form.ComboBox7.AddItem (Cell.Value) 
     Form.ComboBox8.AddItem (Cell.Value) 
     Form.ComboBox9.AddItem (Cell.Value) 
     Form.ComboBox10.AddItem (Cell.Value) 
     Form.ComboBox11.AddItem (Cell.Value) 
     Form.ComboBox12.AddItem (Cell.Value) 
     Form.ComboBox13.AddItem (Cell.Value) 
    Next Cell 
End Sub 

Private Sub CommandButton1_Click() 
    Dim sFilePath As String 
    sFilePath = Application.GetOpenFilename() 
    Workbooks.Open (sFilePath) 

    For Each sht In ActiveWorkbook.Sheets 
      Form.ComboBox1.AddItem (sht.Name) 
    Next sht 
End Sub 
+0

然後不要使用'activebook',使用'workbooks(「B.xlsx」)' – jsotola

+0

如何?工作簿的路徑位於'CommandButton1_Click()' – user248884

回答

1

做這樣的事情:

Dim wb As Workbook 

Private Sub CommandButton1_Click() 
    Dim sFilePath As String 
    sFilePath = Application.GetOpenFilename() 
    Set wb = Workbooks.Open(sFilePath) 

    For Each sht In wb.WorkSheets 
      Form.ComboBox1.AddItem sht.Name 
    Next sht 
End Sub 

然後在其他的方法,你可以使用全局wb到位ActiveWorkbook

對於第2部分:

Private Sub ComboBox1_Change() 
    Dim cmb, Cell As Range, rng As Range, sht As Worksheet 

    cmb = Form.ComboBox1.Value 

    Set sht = wb.Worksheets(cmb) 
    'assuming your headers are always on the first row... 
    Set rng = sht.Range(sht.Range("A1"), _ 
         sht.Cells(1, Columns.Count).End(xlToLeft)) 

    'add some code here to clear the lists first!... 


    For Each Cell In rng.Cells 
     If Len(Cell.Value)>0 Then 
      Form.ComboBox2.AddItem (Cell.Value) 
      Form.ComboBox3.AddItem (Cell.Value) 
      Form.ComboBox4.AddItem (Cell.Value) 
      Form.ComboBox5.AddItem (Cell.Value) 
      Form.ComboBox6.AddItem (Cell.Value) 
      Form.ComboBox7.AddItem (Cell.Value) 
      Form.ComboBox8.AddItem (Cell.Value) 
      Form.ComboBox9.AddItem (Cell.Value) 
      Form.ComboBox10.AddItem (Cell.Value) 
      Form.ComboBox11.AddItem (Cell.Value) 
      Form.ComboBox12.AddItem (Cell.Value) 
      Form.ComboBox13.AddItem (Cell.Value) 
     End If 
    Next Cell 

End Sub 
+0

它爲'For Work單元中的每個單元格(wb).Worksheets(cmb).Range(「A1:AR1」)提供了'類型不匹配(錯誤13) 對不起,這些問題是如此相同。 VBA太過於我了。這是由於類型轉換造成的錯誤嗎? – user248884

+0

'wb'已經是一個Workbook對象,所以它只是'For Each Cell In wb.Worksheets(cmb).Range(「A1:AR1」)' –

+0

謝謝!這工作。 你能指出我應該如何解決第二個問題嗎? – user248884