2017-09-26 9 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選択したブック(B.xlsx)で選択したワークシート(Sheet1セイ)のすべての列ヘッダ(列名)は、他のコンボボックスに表示されていること(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)を与えています。その目的は、NULLでない列ヘッダーだけをループすることです(有効な列ヘッダー)

  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 

その後、他の方法であなたがActiveWorkbook

の代わりに、グローバルwbを使用することができます。

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

はこのような何かをパート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 Each Cell In Workbooks(wb).Worksheets(cmb).Range(" A1:AR1 ")'でタイプミスマッチ これらの質問について同じことができて申し訳ありません。 VBAはあまりにも私を超えています。このエラーは型キャストによるものですか? – user248884

+0

'wb'はすでにWorkbookオブジェクトなので、' For Each Cell wb.Worksheets(cmb).Range( "A1:AR1") ' –

+0

ありがとう!これはうまくいった。 第2号にどのように取り組むべきかについての指摘もできますか? – user248884

関連する問題