[[20080921090313]] 『チェックボックスで図形を選択』(hiro) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスで図形を選択』(hiro)

 質問させていただきます。
 いくつかの図形がシートにあります。図形一つ一つに対応したチェックボックスを
 作り,チェックボックスにチェックが入っているときに,その図形が選択状態にな
 るようにしたいと思っています。
 複数にチェックされていれば,複数の図形が選択されるようにするには,どのよう
 したらいいでしょうか。
 ご教授よろしくお願いします。 

 図形を選択する目的は何でしょうか。

 単純に考えると、チェックボックスで選択しなくとも直接図形を選択すればよいと
 思ってしまうのですが、選択後にどのような処理をしたいのでしょうか。

 それによっては内容に即した回答ができるかと思います。
 (Mook)

 すでに印刷された定型の用紙の所定の位置に文字を印刷するシートを作っています。
 テキストボックスに入力された文字を決められた位置に印刷するために位置を微調
 整をする必要があります。
 エクセルの操作に不慣れな方も使えるようなシートを作るために,チェックボックスで
 テキストボックスを選択して,位置を微調整させたいと思っています。
 (hiro)


 なるほど、Excelは、印刷は不得意ですからねえ・・・。

 >チェックボックスでテキストボックスを選択して,位置を微調整

 もうちょっと仕様を汎用的にしました。
 ユーザーフォームに位置の微調整可能な図形名の一覧を表示します。
 この一覧から選択された図形の位置の微調整を可能します。
 したがって、選択用のチェックボックスは不要です。

 まずは、新規ブックにて試してみてください。

 新規ブックには、ユーザーフォーム(UserForm1)をひとつだけ作成してください。
 中のコントロールは、コードにて配置しますから、何も配置しないでください。

 作成したUserForm1のモジュールに

 '===================================================================================
 Option Explicit
 Private WithEvents btn_L As MSForms.CommandButton
 Private WithEvents btn_R As MSForms.CommandButton
 Private WithEvents btn_U As MSForms.CommandButton
 Private WithEvents btn_D As MSForms.CommandButton
 Private WithEvents btn_select As MSForms.CommandButton
 Private mvshp As ShapeRange
 Const mvscale = 0.75 'ワンクリックの移動ポイント
 Private Sub btn_D_Click()
    On Error Resume Next
    mvshp.IncrementTop mvscale
 End Sub
 '===================================================================================
 Private Sub btn_L_Click()
    On Error Resume Next
    mvshp.IncrementLeft -mvscale
 End Sub
 '===================================================================================
 Private Sub btn_R_Click()
    On Error Resume Next
    mvshp.IncrementLeft mvscale
 End Sub
 '===================================================================================
 Private Sub btn_U_Click()
    On Error Resume Next
    mvshp.IncrementTop -mvscale
 End Sub
 '===================================================================================
 Private Sub btn_select_Click()
    Dim nm() As Variant
    Dim g0 As Long
    Dim g1 As Long
    g1 = 0
    With Controls("list1")
       For g0 = LBound(.List()) To UBound(.List())
          If .Selected(g0) Then
             ReDim Preserve nm(0 To g1)
             nm(g1) = .List(g0)
             g1 = g1 + 1
             End If
          Next
       End With
    If g1 > 0 Then
       Set mvshp = ActiveSheet.Shapes.Range(nm())
       Erase nm()
    Else
       Set mvshp = Nothing
       End If
 End Sub
 '===================================================================================
 Private Sub UserForm_Initialize()
    Dim obj As Object
    With Me
       .Width = 380
       .Height = 256
       .Caption = "選択図形の位置微調整"
       End With
    With Controls.Add("Forms.Frame.1", , True)
       .Name = "frm2"
       .Left = 166
       .Top = 42
       .Width = 204
       .Height = 186
       .Caption = "微調整"
       Set btn_L = .Controls.Add("Forms.CommandButton.1", , True)
       With btn_L
          .Left = 18
          .Top = 78
          .Width = 65
          .Height = 26
          .Font.Size = 16
          .Caption = "←"
          .TabStop = False
          End With
       Set btn_U = .Controls.Add("Forms.CommandButton.1", , True)
       With btn_U
          .Left = 84
          .Top = 18
          .Width = 30
          .Height = 60
          .Font.Size = 16
          .Caption = "↑"
          .TabStop = False
          End With
       Set btn_R = .Controls.Add("Forms.CommandButton.1", , True)
       With btn_R
          .Left = 114
          .Top = 78
          .Width = 65
          .Height = 26
          .Font.Size = 16
          .Caption = "→"
          .TabStop = False
          End With
       Set btn_D = .Controls.Add("Forms.CommandButton.1", , True)
       With btn_D
          .Left = 84
          .Top = 104
          .Width = 30
          .Height = 60
          .Font.Size = 16
          .Caption = "↓"
          .TabStop = False
          End With
       End With
    Set btn_select = Controls.Add("Forms.CommandButton.1", , True)
    With btn_select
       .Left = 62
       .Top = 18
       .Width = 102
       .Height = 24
       .Font.Size = 9
       .Caption = "微調整する図形の決定"
       .TabStop = False
       End With
    With Controls.Add("Forms.ListBox.1", , True)
       .Name = "list1"
       .Left = 14
       .Top = 46
       .Width = 150
       .Height = 196
       .MultiSelect = 1
       .Font.Size = 11
       For Each obj In ActiveSheet.DrawingObjects
          .AddItem obj.Name
          Next
       End With
 End Sub

 次いで標準モジュールに

 '=================================================================================
 Option Explicit
 Sub main()
    UserForm1.Show
 End Sub

 これで図形位置を微調整したいシートをアクティブにして 上記のmainを実行してください。

 ユーザーフォームが表示されます。

 リストボックスには、位置微調整可能な図形名の一覧が表示されていますから、
 微調整を行いたい図形名を選択してください。複数選択可能です。

 選択が終わったら、「微調整する図形の決定」というボタンをクリックしてください。

 これで図形の選択が完了です。
 つまり、リストボックスで選択しただけでは、図形の選択は完了していませんので注意してください。

 図形の選択が完了したなら、「微調整」の ↑、↓、←、→のボタンをクリックすることで
 選択された図形が矢印の方向に微動します。

 やりたいことは、こんなことでしょうか?

 ichinose


 いやあ,感動しました。すばらしいの一言です。私がやりたいことそのままです。
 ichinoseさん,本当にありがとうございました。

 (hiro)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.