通过特定工作簿(按path)和特定工作表循环

在excel文件“ A.xlsx ”中 – 我有一个用户窗体,其中点击浏览button( CommandButton1 ),打开另一个Excel文件( B.xlsxB.xlsx ),excelfile中存在的图纸名称显示在“select需求计划“combobox( ComboBox1

在这里输入图像说明

这样做的代码是:

 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 

我希望所选工作簿( B.xlsx )中所选工作表(Say Sheet1 )的所有列标题(列名)显示在其他组合Part Number, CSUFI/ATA, KeywordPart 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 

显然,这个代码的问题是,它循环了当前的A.xlsx ActiveWorkbook 。 我希望它循环选定的工作簿(B.xlsx)

  1. 如何做到这一点?

此外,截至目前,我给它一个硬编码范围(A1:AR1),这会导致combobox中的空条目很多。 意图是它只循环通过非空列标题(有效的列标题)

  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 

做这样的事情:

 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