[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ツリー形式のプルダウン作成について』(たんぐる)
初めて投稿させていただきます。
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.