2016-04-23 18 views
0

現在開いているすべてのシート名を表示するコンボボックスが必要です。コンボボックスで開いているすべてのシートを一覧表示する

開いているブックをすべて一覧表示し、シートを編集するコードが見つかりました。それは正しくすべてのブックを正しくサイクリングしているようですが、現在アクティブなExcelブックのワークシートのみを一覧表示しています。

現在のコードは以下のとおりです。このサブフォームは、フォームがロードされたときに呼び出されます。

dt.Columns.Add("sheets") 
    Try 
     If IsNothing(app) Then 
      app = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application) 
     End If 
     Dim bks = app.Workbooks 
     Dim dks = app.Worksheets 
     dt.Clear() 
     For Each bk As Excel.Workbook In bks 
      Debug.WriteLine(bk.Name) 
      For Each dk As Excel.Worksheet In dks 
       Debug.WriteLine(dk.Name) 
       dt.Rows.Add(dk.Name.ToString()) 
      Next 
     Next 
     ComboBox1.DataSource = Nothing 
     ComboBox1.Items.Clear() 
     ComboBox1.DataSource = dt 
     ComboBox1.DisplayMember = "sheets" 
    Catch ex As Exception 
     MsgBox(ex.ToString()) 
    End Try 

答えて

0

あなたは、ループの前にこれを読んでいる:

Dim dks = app.Worksheets 

アクティブワークブックのシートを返しApplication.Worksheets

2つのネストされたループを使用する場合、外側ループの変数を使用しない場合は何かが間違っている必要があります。
はこのようにそれを試してみてください。

Dim bks = app.Workbooks 
    'Dim dks = app.Worksheets 
    dt.Clear() 
    For Each bk As Excel.Workbook In bks 
     For Each ws As Excel.Worksheet In bk.Worksheets 
      dt.Rows.Add(bk.Name & ":" & ws.Name) 
     Next 
    Next 
0

私は以下のスクリプトをテストし、正常に動作するようです。それを試して、あなたの考えを見てください。

輸入のSystem.Data.OleDb

Public Class Form1 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim filePath As String = "C:\Users\xxx\YourFile.xlsm" 

     Dim connString As String = String.Empty 
     If filePath.EndsWith(".xlsx") Then   '2007 Format    
      connString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", filePath) 
     Else   '2003 Format    
      connString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", filePath) 
     End If   'Get the Sheets in Excel WorkBook   
     Dim connExcel As New OleDbConnection(connString) 
     Dim cmdExcel As New OleDbCommand() 
     Dim oda As New OleDbDataAdapter() 
     cmdExcel.Connection = connExcel 
     connExcel.Open() 
     ComboBox1.DataSource = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing) 
     ComboBox1.DisplayMember = "TABLE_NAME" 
     ComboBox1.ValueMember = "TABLE_NAME" 
     connExcel.Close() 
    End Sub 

End Class 
関連する問題