Excelノート 11-1 ユーザーフォーム

HOME  検索  索引  もくじ  関数目次ージへ        次ページへ

タイトル欄のアドレスは、エクセルファンクラブの該当する頁へのリンク先です。
詳しい事は、こちらの
お願いをご覧になってください。

1   C1: C150を選択した場合のみ、ユーザーフォームを表示し、それ以外の時に閉じるには
2   A列のセルを選択すると,UserForm1をShow、
    B列のセルを選択すると,UserForm2をShowするには
3   A5"〜"A10"の1つのセルを選択するとUserForm1をShow、
    "B5"〜"B10だとUserForm2をShowするには
4   ユ−ザ−フォ−ムを動かないようにしたい
5   ユーザーフォームを開いた時にexcelを隠すには?
6   EXCELまたはブックを起動時にユーザーフォームを立ち上げたい
7   UserFormの"閉じる"ボタンを操作不可にするには
8   userformを最大化するには
9   userformを他のファイルにコピーするには
10 ユーザーフォームを閉じるには
11 ユーザフォームの閉じるボタンをグレーに無効化表示する方法
12 ユーザーフォームの右上のX印を消すには
13 ユーザーフォームを、モードレス(シート操作可能状態Excel2000)で表示するには
14 ユーザーフォームを出して、数秒後に消すには
15 ユーザーフォームを自由にサイズ変更し、最小化、最大化ボタンを作りたい。
16 ユーザーフォームのタイトルバーを消すには
17 ユーザーフォームを、Excelを最小化した状態で「左上」「左下」「右上」「右下」に移動するには
18 ユーザーフォームから印刷プレビューするには?
19 ユーザーフォームの、SHow・Load と Hide・Unload の違いとは?
20 ユーザーフォームを印刷するには?

1 C1: C150を選択した場合のみ、ユーザーフォームを表示し、
                       それ以外の時に閉じるには
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Cells.Count > 1 Then Exit Sub
 On Error Resume Next
 If Not Intersect(Target, Range("C1:C150")) Is Nothing Then
  UserForm1.Show vbModeless
 Else
  UserForm1.Hide
 End If
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
2 A列のセルを選択すると,UserForm1をShow.
               B列のセルを選択すると,UserForm2をShowするには
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Cells.Count > 1 Then Exit Sub
 Select Case Target.Column
  Case 1
   UserForm1.Show
  Case 2
   UserForm2.Show
 End Select
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
3 A5"〜"A10"の1つのセルを選択するとUserForm1をShow、
                  "B5"〜"B10だとUserForm2をShowするには
http://www.keep-on.com/~excelyou/2000lng4/200007/00070107.txt
  「ユーザーフォームをワークシートに特定の列のセルが選択された場合のみ
    表示するには?」    【VBAラウンジ】
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 With Target
  If .Cells.Count > 1 Then Exit Sub
  Select Case .Column
   Case 1
    If .Row >= 5 And .Row <= 10 Then UserForm1.Show
   Case 2
    If .Row >= 5 And .Row <= 10 Then UserForm2.Show
  End Select
 End With
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
4 ユ−ザ−フォ−ムを動かないようにしたい
http://www.keep-on.com/~excelyou/2000lng4/200004/00040245.txt
  「ユーザーフォームを固定するには」 【VBAラウンジ】
Excel97
Private Const MF_BYCOMMAND = &H0&
Private Const SC_MOVE = &HF010&
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetSystemMenu Lib "user32" _
  (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _
  (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Sub UserForm_Initialize()
 Dim hwnd As Long
 Dim hMenu As Long
 Dim rc As Long
 Dim strClassName As String
 strClassName = "ThunderXFrame"
 hwnd = FindWindow(strClassName, Me.Caption)
 hMenu = GetSystemMenu(hwnd, 0&)
 rc = DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND)
End Sub

Excel2000では、下から5行目の "ThunderXFrame" を "ThunderDFrame" に
変更します。
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
動かされても、元に戻します。表示位置のLeft = 100、Top = 100は、好みに変更します。
Private Sub UserForm_Initialize()
 UserForm1.Left = 100
 UserForm1.Top = 100
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As _
 Integer, ByVal X As Single, ByVal Y As Single)
 UserForm1.Left = 100
 UserForm1.Top = 100
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
5 ユーザーフォームを開いた時にexcelを隠すには?
ブックを開いたときにエクセルを非表示にして、フォームだけを表示します。
 Private Sub Workbook_Open()
  Application.Visible = False
  UserForm1.Show
 End Sub

  このコードの使い方は、マクロの使い方(3)This Workbookのモジュールにあります。
ユーザーフォームにボタンを配置し、非表示のエクセルを表示して、フォームを閉じます。
 Private Sub CommandButton1_Click()
  Application.Visible = True
  Unload Me
 End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
6 EXCELまたはブックを起動時にユーザーフォームを立ち上げたい
Private Sub Workbook_Open()
 Userform1.Show
End Sub

  このコードの使い方は、マクロの使い方(3)This Workbookのモジュールにあります。
7 UserFormの"閉じる"ボタンを操作不可にするには
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = vbFormControlMenu Then Cancel = True
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
8 userformを最大化するには
Private Sub UserForm_Initialize()
 Me.Left = Application.Left
 Me.Top = Application.Top
 Me.Width = Application.Width
 Me.Height = Application.Height
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
9 userformを他のファイルにコピーするには
Sub ユーザーフォームのコピー()
 Dim sf$, df$, md$
 Dim src, des, tmp$
 sf = ThisWorkbook.Name   
'コピ−元のbook名
 df = "book2"         
'コピ−先のbook名
 md = "UserForm1"     
'コピ−するComponent名
 tmp = Environ("temp") & "\~#!tmp." 'tmpファイル名
 Set src = Workbooks(sf).VBProject.VBComponents(md)
 Set des = Workbooks(df).VBProject.VBComponents
 On Error Resume Next
 des.Remove des(md)     
'上書き対応
 On Error GoTo 0
 src.Export (tmp)
 des.Import (tmp)
 Kill (tmp & "*")        
'注) tmpファイルを削除
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
10 ユーザーフォームを閉じるには
Unload UserForm1  メモリから削除します。
UserForm1.Hide    
 
非表示にしますが、アンロードしません。
 ユーザーフォームをHideした場合はインスタンス(実体)は残ったままですので、
 Hideした後でも、ユーザーフォーム上のコントロール等にアクセスできます。
11 ユーザフォームの閉じるボタンをグレーに無効化表示する方法
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200203/02030408.txt
 「フォーム右上のラを無効にできますか?」【VBAラウンジ】
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200105/01050113.txt
 「ユーザーフォームの右上にある閉じる(×)ボタンの表示を消すには?」【VBAラウンジ】
’標準モジュール
Public Declare Function FindWindow Lib "user32" _
   Alias "FindWindowA" (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
Public Declare Function GetSystemMenu Lib "user32" _
   (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Public Declare Function DeleteMenu Lib "user32" _
   (ByVal hMenu As Long, ByVal nPosition As Long, _
   ByVal wFlags As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" _
   (ByVal hwnd As Long) As Long
Public Const SC_CLOSE = &HF060&
Public Const MF_BYCOMMAND = &H0&
  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。

’フォームモジュール
Private Sub UserForm_Initialize()
 Dim hwnd As Long
 Dim hMenu As Long
 Dim rc As Long
 hwnd = FindWindow("ThunderDFrame", Me.Caption)
 hMenu = GetSystemMenu(hwnd, 0&)
 rc = DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
 rc = DrawMenuBar(hwnd)
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
'×ボタンはそのままで、操作不可にします
'フォームのモジュール
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = 0 Then Cancel = 1
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
12 ユーザーフォームの右上のX印を消すには
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200203/02030408.txt
 「フォーム右上のラを無効にできますか?」【VBAラウンジ】
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200105/01050113.txt
 「ユーザーフォームの右上にある閉じる(×)ボタンの表示を消すには?」【VBAラウンジ】
'標準モジュール
'標準的な名称が決まっているAPIで使用する値を、定数として宣言
'ウインドウスタイルの処理
Private Const GWL_STYLE = (-16)  
'
Private Const WS_SYSMENU = &H80000
'使用するAPIを宣言
'アクティブウインドウのハンドルを取得する
Private Declare Function GetActiveWindow Lib "user32" () As Long
'メニューバーを描画する
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
'ウインドウに関するデータを取得する
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
'指定されたウィンドウの属性を変更
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Sub HideSysmenu(Optional ByVal Dummy As Boolean)
 Dim Ret As Long, hWnd As Long, Wnd_STYLE As Long
 'アクティブウインドウのハンドルを取得する
 hWnd = GetActiveWindow()
 'ウインドウに関するデータを取得
 Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE)
 '
 Wnd_STYLE = Wnd_STYLE And (Not WS_SYSMENU)
 '指定されたウィンドウの属性を変更
 Ret = SetWindowLong(hWnd, GWL_STYLE, Wnd_STYLE)
 'メニューバーを描画
 Ret = DrawMenuBar(hWnd)
End Sub
  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。

'フォームのモジュール
Private Sub UserForm_Activate()
 HideSysmenu
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。

'標準モジュール
Public Declare Function FindWindow Lib "user32" _
   Alias "FindWindowA" (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "user32" _
   Alias "GetWindowLongA" (ByVal hwnd As Long, _
   ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" _
   Alias "SetWindowLongA" (ByVal hwnd As Long, _
   ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" _
   (ByVal hwnd As Long) As Long
Public Const GWL_STYLE = -16&
Public Const WS_SYSMENU = &H80000
  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。

'フォームのモジュール
Private Sub UserForm_Initialize()
 Dim hwnd As Long
 Dim lngs As Long
 Dim rc As Long
 hwnd = FindWindow("ThunderDFrame", Me.Caption)
 lngs = GetWindowLong(hwnd, GWL_STYLE)
 rc = SetWindowLong(hwnd, GWL_STYLE, lngs Xor WS_SYSMENU)
 rc = DrawMenuBar(hwnd)
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
13 ユーザーフォームを、モードレス(シート操作可能状態Excel2000)で表示するには
http://www.keep-on.com/~excelyou/2000lng4/200006/00060297.txt
 「ユーザーフォームを表示させたままワークシートをアクティブにするには?」【VBAラウンジ】
http://www.ae.wakwak.com/cgi-bin/sbox/~efc21/wwwlng.cgi?print+200204/02040162.txt
 「ユーザーフォームを表示したままシートを編集するには?」【VBAラウンジ】
Excel2000、Excel2002 共通
Sub フォーム表示()
 UserForm1.Show vbModeless
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
Excel97
エクセル97の場合、バグ技を利用するとできるようです。
 http://www.fuji.ne.jp/~excelyou/fc00002.txt
ユーザーフォームにコマンドボタンを配置します。
ユーザーフォームを開いてコマンドボタンを押すと、「ファイルを開く」ダイアログが出ますが、これを閉じた後、97でもモードレス状態になります
 Private Sub CommandButton1_Click()
  Application.GetOpenFilename
 End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
14 ユーザーフォームを出して、数秒後に消すには
ユーザーフォームの Activate イベントプロシージャとして、
Private Sub UserForm_Activate()
  Application.Wait Now() + TimeValue("00:00:05")
  Unload Me
End Sub

というコードを書いておくと、5秒後に勝手に閉じられます。
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
15 ユーザーフォームを自由にサイズ変更し、最小化、最大化ボタンを作りたい。
Excel97、Excel2000 共通
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Declare Function GetWindowLong Lib "user32" _
   Alias "GetWindowLongA" _
   (ByVal hwnd As Long, _
   ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
   Alias "SetWindowLongA" _
   (ByVal hwnd As Long, _
   ByVal nIndex As Long, _
   ByVal dwNewLong As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Public Sub CustomizeForm()
 Dim Ret As Long
 Dim hwnd As Long
 Dim Wnd_STYLE As Long
 hwnd = GetActiveWindow()
 Wnd_STYLE = GetWindowLong(hwnd, GWL_STYLE)
 Wnd_STYLE = Wnd_STYLE Or WS_THICKFRAME Or &H30000
 Ret = SetWindowLong(hwnd, GWL_STYLE, Wnd_STYLE)
 Ret = DrawMenuBar(hwnd)
End Sub

Sub test()
 UserForm1.Show
End Sub

  このコードの使い方は、
マクロの使い方(1)標準モジュールにあります。

Private Sub UserForm_Activate()
 CustomizeForm
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
16 ユーザーフォームのタイトルバーを消すには
Excel97、Excel2000 共通
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Declare Function GetWindowLong Lib "user32" _
   Alias "GetWindowLongA" _
   (ByVal hWnd As Long, _
   ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
   Alias "SetWindowLongA" _
   (ByVal hWnd As Long, _
   ByVal nIndex As Long, _
   ByVal dwNewLong As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Public Sub HideCaption()
 Dim Ret As Long
 Dim hWnd As Long
 Dim Wnd_STYLE As Long
 hWnd = GetActiveWindow()
 Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE)
 Wnd_STYLE = Wnd_STYLE And (Not WS_CAPTION)
 Ret = SetWindowLong(hWnd, GWL_STYLE, Wnd_STYLE)
 Ret = DrawMenuBar(hWnd)
End Sub

Sub test()
 UserForm1.Show
End Sub

  このコードの使い方は、
マクロの使い方(1)標準モジュールにあります。
Private Sub UserForm_Activate()
 HideCaption
End Sub
Private Sub CommandButton1_Click()
 Unload Me
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
17 ユーザーフォームを、Excelを最小化した状態で
             「左上」「左下」「右上」「右下」に移動するには
Public a, b, c, d, e, f
 Private Sub CommandButton1_Click()
 Me.Left = e
 Me.Top = f
End Sub
Private Sub CommandButton2_Click()
 Me.Left = c - d
 Me.Top = f
End Sub
Private Sub CommandButton3_Click()
 Me.Left = e
 Me.Top = a - b
End Sub
Private Sub CommandButton4_Click()
 Me.Left = c - d
 Me.Top = a - b
End Sub
Private Sub UserForm_Initialize()
 e = Application.Left
 f = Application.Top
 a = Application.Height
 c = Application.Width
 b = UserForm1.Height
 d = UserForm1.Width
 Application.WindowState = xlMinimized
 AppActivate Application.Caption
End Sub
Private Sub UserForm_Terminate()
 Application.WindowState = xlMaximized
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
18 ユーザーフォームから印刷プレビューするには?
http://www.ae.wakwak.com/cgi-bin/sbox/~efc21/wwwlng.cgi?print+200205/02050074.txt
 「ユーザーフォームから印刷プレビューする方法」 【VBAラウンジ】
Private Sub CommandButton1_Click()
 UserForm1.Hide
 Worksheets("出力用紙").PrintPreview
 UserForm1.Show
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
19 ユーザーフォームの、SHow・Load と Hide・Unload の違いとは?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200104/01040167.txt 
 「Loadの使い方は?」 【VBAラウンジ】
'Userform1を読み込みます(表示はされません)
 Load UserForm1
'Userform1を表示します(表示されます)
 UserForm1.Show
'Userform1を非表示にします(表示はされていない)
 UserForm1.Hide
'Userform1を閉じます(表示はされていない)
 Unload UserForm1

※UserForm_InitializeイベントはUserFormをLoadしたときに発生します。
※Loadを実行するとユーザーフォームは表示されませんが、
 メモリ上にユーザーフォームのインスタンス(実体)が生成されますので、
 Loadした後は、ユーザーフォーム上のコントロール等にアクセスできます。
 ユーザーフォームをHideした場合はインスタンスは残ったままですので、
 Hideした後でも、ユーザーフォーム上のコントロール等にアクセスできます。
20 ユーザーフォームを印刷するには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200107/01070029.txt
 「フォームを印刷するには?」 【編集ラウンジ】
VBEditorで印刷するフォームを選択しておき、
「ファイル」「印刷」で「フォーム」チェックボックスをつけて印刷します
Private Sub UserForm_Click()
    UserForm1.PrintForm
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。

HOME  検索  索引  もくじ  関数目次ージへ        次ページへ

このページのTOPへ

 

 

 

inserted by FC2 system