Home > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > Office Web Componetをユーザフォームで使う - SpreadSheetコントロール

即効テクニック

ユーザーフォーム関連のテクニック

Office Web Componetをユーザフォームで使う - SpreadSheetコントロール

(Excel 2000)
サンプルではOffice Web Componetのうち、SpreadSheetコントロールの特徴のいくつかを紹介します。ユーザフォーム上でSpreadSheetコントロールを使う利点は、フォーム中心のアプリケーション作成が可能なこと、ワークシートとは異なるイベント(Mouse_Over,Key_Down,Before_Commandなど)やオブジェクトそのメンバが使用可能なことです。若干の制限と、ワークシートを扱う場合との処理方法の違いがありますが、用途によって使い分けることで、より柔軟にアプリケーションを開発することが可能となります。

(OWC SpreadSheetControlを使用可能にするには)
VBEでユーザフォームが選択された状態で”ツール”メニューから”その他のコントロール”をクリック、”コントロールの追加”ダイアログで、”Microsoft Office SpreadSheet 9.0”を選択して”OK”。”ツールボックスに”表示されたアイコンを通常のコントロールと同様ユーザフォームにドラッグ&ドロップで貼り付けてください。

(注)ユーザフォームを表示する際、”UserForm1.Show vbModeless”とするか、ShowModalプロパティーをFalseにするとPropertyToolBoxが使用可能となります。

1.フォームの表示とシート保護
Private Sub UserForm_Initialize()

'ワークシートからSpreadSheetコントロールへデータをコピー
Sheet1.Range("a1").CurrentRegion.Copy

With Me.Spreadsheet1
.ActiveSheet.Range("a1").Paste
'データ入力範囲のみ可視
.ViewableRange = _
    .ActiveSheet.Range("a1").CurrentRegion.Address

With .ActiveSheet
'セルの保護※Protection.Enabled=Trueで有効
.Cells.Locked = True

    'フィルタ,ソートを可能としてシート保護
    With .Protection
    .AllowFiltering = True
    .AllowSorting = True
    End With
    
Protectionを有効にする
.Protection.Enabled = True

End With
.DisplayPropertyToolbox = True
End With

End Sub

2.Key_Downイベントの使用

※イベントプロシージャの引数はすべてEvntinfoオブジェクト以下のプロパティーから取得します。

⇒	(AltKey,Button,Command,Ctrl,Key,EditData,KeyChar,
	KeyCode,Range,ReturnValue,ShiftKey,X,Y)
Private Sub Spreadsheet1_KeyDown(ByVal EventInfo As OWC.SpreadsheetEventInfo)

Dim Msg As String
Select Case EventInfo.KeyCode
Case vbKeyF2: Msg = "F2"
Case vbKeyF3: Msg = "F3"
Case vbKeyF4: Msg = "F4"
Case Else: Exit Sub
End Select

MsgBox Msg

End Sub

3.コマンドのキャンセル(Before_Commandイベント)
Private Sub Spreadsheet1_BeforeCommand _
	(ByVal EventInfo As OWC.SpreadsheetEventInfo)

'SpreadSheet上で実行されるコマンドのうちいくつかをReturnValueプロパティー
'を用いて強制的にキャンセルします
Select Case EventInfo.Command
Case ssCalculate
Case ssInsertRows: EventInfo.ReturnValue = False
Case ssInsertColumns: EventInfo.ReturnValue = False
Case ssDeleteRows: EventInfo.ReturnValue = False
Case ssDeleteColumns: EventInfo.ReturnValue = False
Case ssCut: EventInfo.ReturnValue = False
Case ssCopy
Case ssPaste
Case ssExport
Case ssUndo
Case ssSortAscending
Case ssSortDescending
Case ssFind
Case ssClear: EventInfo.ReturnValue = False
Case ssAutoFilter
Case ssProperties
End Select

End Sub