[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ツリー形式のプルダウン作成について』(たんぐる)
初めて投稿させていただきます。
Excelのドロップダウンリストの中にドロップダウンリストを作りたいのですが
どなたかご存知の方がいらっしゃいましたらご教示ください。
例でたとえるとExcel等のメニューでツリー上に選択することを1つのプルダウンで行いたいです。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
検索しただけですけれど、このあたりの適用でしょうか。
TreeViewコントロールの使い方 http://officetanaka.net/Excel/vba/treeview/index.htm (Mook) 2014/09/26(金) 12:51
衝突! 勘違いだったみたいだけど、標準機能のご紹介ということで・・・
┌─────────┐ │新規作成 │ │開く │ │上書き保存 │┌────────┐ │名前をつけて保存▼││エクセルブック │ │○○○○ ││マクロ有効ブック│ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 こういうメニューを作りたい、ということですか?
標準機能(入力規則やフォームコントロール)では出来なかったと思いますが ユーザーフォームのマウスオーバーイベントなどを拾って似たようなものは作ることが出来ると 思います。
実装は結構知識が必要になると思いますので、 おすすめはセルを二つ使って、「入力規則 リスト 連動」のやり方を推します。 http://www.excelist.net/faq/10.html 参考
(稲葉) 2014/09/26(金) 12:58
プルダウンで下記のようにしたいと思っております。
┌─────────┐ │新規作成 │ │開く │ │上書き保存 │┌────────┐ │名前をつけて保存▼││エクセルブック │ │○○○○ ││マクロ有効ブック│ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
色々しわべてみたのですが2階層(2つのセルのプルダウン)では可能なのですが
これを1つのセル(プルダウン)で選択したいと思っております。
(たんぐる) 2014/09/26(金) 14:59
私には出来ませんので、他の方の返信をお待ちください。 (稲葉) 2014/09/26(金) 15:16
[シートモジュール]
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) ActiveCell.Value = fPop(Application.hwnd) Cancel = True End Sub
[標準モジュール]
Public Const MF_STRING = &H0& Public Const MF_POPUP = &H10& Public Const TPM_LEFTALIGN = &H0& Public Const TPM_RETURNCMD = &H100&
Public Type POINTAPI x As Long y As Long End Type
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long Private Declare Function CreatePopupMenu& Lib "user32" () Private Declare Function AppendMenu& Lib "user32" Alias "AppendMenuA" (ByVal hMenu&, ByVal wFlags&, ByVal wIDNewItem&, ByVal lpNewItem As Any) Private Declare Function TrackPopupMenu& Lib "user32" (ByVal hMenu&, ByVal wFlags&, ByVal x&, ByVal y&, ByVal nReserved&, ByVal hwnd&, lpReserved As Any) Private Declare Function DestroyMenu& Lib "user32" (ByVal hMenu&) Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Function fPop(hwnd As Long) As Long Dim hMenu As Long Dim hMenu2 As Long Dim PT As POINTAPI
hMenu = CreatePopupMenu() AppendMenu hMenu, MF_STRING, 1&, "test1" AppendMenu hMenu, MF_STRING, 2&, "test2"
hMenu2 = CreatePopupMenu() AppendMenu hMenu2, MF_STRING, 3&, "test3" AppendMenu hMenu2, MF_STRING, 4&, "test4" AppendMenu hMenu, MF_POPUP, hMenu2, "test"
GetCursorPos PT fPop = TrackPopupMenu(hMenu, TPM_LEFTALIGN Or TPM_RETURNCMD, PT.x - 8, PT.y - 8, 0, hwnd, ByVal 0&)
DestroyMenu hMenu2 DestroyMenu hMenu End Function (???) 2014/09/26(金) 15:46
#回答、思いっきりかぶりましたけれど、せっかく書いたので。
マクロの CommandBars でのおあそび例です。
標準モジュールに Sub popupMenu() With CommandBars.Add(Position:=msoBarPopup) With .Controls.Add .Caption = "選択A" .OnAction = "'SetSelectValue ""A""'" .FaceId = 481 End With With .Controls.Add .Caption = "選択B" .OnAction = "'SetSelectValue ""B""'" .FaceId = 482 End With With .Controls.Add(Type:=msoControlPopup) .Caption = "選択C" With .Controls.Add .Caption = "選択C-1" .OnAction = "'SetSelectValue ""C-1""'" .FaceId = 483 End With With .Controls.Add .Caption = "選択C-1" .OnAction = "'SetSelectValue ""C-2""'" .FaceId = 484 End With End With .ShowPopup .Delete End With End Sub
Sub SetSelectValue(result) ActiveCell.value = result End Sub
シートモジュールに Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.CountLarge <> 1 Then Exit Sub popupMenu Cancel = True End Sub
(Mook) 2014/09/26(金) 16:14
Mookさんの面白いですね! activecell(s)のTypoも!
勉強になりました。 (稲葉) 2014/09/26(金) 16:42
ありゃ >< 指摘ありがとうございます。
修正しました。 (Mook) 2014/09/26(金) 16:45
私の例では、API 使っていないけれど・・・。
瑣末なことですけれど、 マクロ ≠ API です。
(Mook) 2014/09/26(金) 17:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.