Top > Programmingとか > Office > タブと闘う

03 シートの取得と表示

まずお詫びと訂正。

説明と画像が別のものになっておりました。

020328-01.png

前回の説明とソースであれば、上のような結果となります。カレントブックの行が選択反転されることはありません。まだそんなコード書いてないもの。



ならば書きましょう。
現在表示されているブックはActiveWorkbookオブジェクトとして提供されていますので、ブック用ListBoxに格納されている各ブック名とActiveWorkbookオブジェクトのNameプロパティを突き合わせれば、どのブック名を反転選択させればいいかがわかります。

といぅコードが、以下な感じ。

For i = 0 To Workbooks.Count - 1
If (lstWorkBooks.List(i, 0) = ActiveWorkbook.Name) Then
lstWorkBooks.Selected(i) = True
Exit For
End If
Next
ブック取得の機能もおんなじようなループを持っていますので、ひとつにまとめてもいいんですけど。
いろんな機能を同時進行でまぜこぜにしてしまうと、意図外の干渉を起こしてバグったりデバッグの際にややこしかったりとあまりろくなことがないので、私は単機能縦書き派

てゅうかこの方が説明しやすいから、ってのもあるんですけどね。

ここまで書いてから実行すると、前回の最後の画像通りにカレントブックが選択された状態になります。同じ画像を2回提示してもしょーないので割愛しますが。
プロシージャとしてはこんな感じでまとめてみました。

'**********************************************
' Excelにロードされている全Book情報の取得と表示
'**********************************************
Private Sub sGetAllBooks()
Dim i As Integer
'*** ExcelにロードされているBookの名前をListBoxに表示する
'ListBoxのClear
lstWorkBooks.Clear
'Book名→ListBox
For i = 1 To Workbooks.Count
lstWorkBooks.AddItem Workbooks(i).Name
Next
'*** 現在Excelで表示されているBookの行を選択状態にする
For i = 0 To Workbooks.Count - 1
If (lstWorkBooks.List(i, 0) = ActiveWorkbook.Name) Then
lstWorkBooks.Selected(i) = True
Exit For
End If
Next
End Sub



さて、今回のお題はシートの取得と表示なんですけれども。

実はあんまり説明することがないんです。
だってブックの取得→表示とほぼ同じロジックなんだもの。

ポイントは、ブック/カレントブックのオブジェクトを、上手にシート/カレントシートのオブジェクトに差し替えるだけだったりします。

ですので、これもさっくりコードの提示で済ませてしまいます。

'****************************************
' 指定されたBookの全Sheet情報の取得と表示
'****************************************
Private Sub sGetSheets(wbSlct As Workbook)
Dim i As Integer
'*** 指定されたBook中のSheetの名前をListBoxに表示する

'ListBoxのClear
lstSheets.Clear
'Sheet名→ListBox
For i = 1 To wbSlct.Sheets.Count
lstSheets.AddItem wbSlct.Sheets(i).Name
Next
'*** 現在Excelで表示されているSheetの行を選択状態にする

For i = 0 To wbSlct.Sheets.Count - 1
If (lstSheets.List(i, 0) = wbSlct.ActiveSheet.Name) Then
lstSheets.Selected(i) = True
Exit For
End If
Next
End Sub
これを連続した動作にしてしまえば、[再取得]ボタンの押下ひとつで一気にシートの一覧表示まで持ち込めます。のでClickイベントにシート用の関数も追加。
'*** 再取得ボタン
Private Sub cmdGetSheets_Click()
Call sGetAllBooks
Call sGetSheets(ActiveWorkbook)
End Sub
で、実行結果はこちら。

020328-02.png

正直言ってだから何っ?って機能なんですけどね。

でもまぁこれからこれから。

よぅやくブックとシートの一覧が表示できるよぅになりましたので、次回からはこのフォームを使ってブック/シートをいじくることを考えてみましょう。

→続く。

トラックバック

このエントリーのトラックバックURL:
http://salv.miscnotes.com/mt/mt-tb.cgi/335

コメントを投稿