[[20150831193605]] 『マクロボタンが写真の下に配置されない』(ささ) ページの最後に飛ぶ

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

 

『マクロボタンが写真の下に配置されない』(ささ)

一つのシートに同じサイズの写真を10枚位、
張り付けるシートをマクロを実行して作成しています。

写真をマクロで挿入した際、マクロボタンが前面に表示され、
ボタンと写真どちらを最前面、最背面に選択しても、ボタンが前面にでてしまい、
写真の中央が見えません。印刷するとボタンは消えています。
これを背面にするか、
マクロを実行した際、ボタンを削除するコマンドを追加したいのですが、
どのようにすればよいでしょうか。

moduleは以下の様に書いてあります。

Sub ボタン4_Click()
Call Harituke_(4)
End Sub
Private Sub CommandButton4_Click()
Call Harituke_(4)
End Sub

Sub Harituke_(myNum As Integer)
Dim myGetFileName
Dim myFileName As String

myGetFileName = Application.GetOpenFilename("画像 (*.gif;*.bmp;*.jpg;*.wmf),*.gif;*.bmp;*.jpg;*.wmf,すべてのファイル(*.*),*.*")

If myGetFileName = False Then

    Exit Sub
End If
myFileName = Dir(myGetFileName)
If LCase(myFileName) Like "*.jpg" Then
    myFileName = Mid(myFileName, 1, Len(myFileName) - 4)
End If

Select Case myNum

    Case 4
        Range("b66").Select

End Select

ActiveSheet.Pictures.Insert(myGetFileName).Select

With Selection.ShapeRange

    .LockAspectRatio = True
    .Width = 361
End With

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub


また、以下のボタンマクロが数十個もあり、どれが有効になっているのかよくわからないのですが、設定を変えるには一括でできないのでしょうか。

Sub ボタン10_Click()
Call Harituke_(4)
End Sub
Private Sub CommandButton4_Click()
Call Harituke_(4)
End Sub

Sub Harituke_(myNum As Integer)
Dim myGetFileName
Dim myFileName As String

myGetFileName = Application.GetOpenFilename("画像 (*.gif;*.bmp;*.jpg;*.wmf),*.gif;*.bmp;*.jpg;*.wmf,すべてのファイル(*.*),*.*")

If myGetFileName = False Then

    Exit Sub
End If
myFileName = Dir(myGetFileName)
If LCase(myFileName) Like "*.jpg" Then
    myFileName = Mid(myFileName, 1, Len(myFileName) - 4)
End If

Select Case myNum

    Case 4
        Range("b194").Select

End Select

ActiveSheet.Pictures.Insert(myGetFileName).Select

With Selection.ShapeRange

    .LockAspectRatio = True
    .Width = 361
End With

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

以上、よろしくお願いします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 >>マクロを実行した際、ボタンを削除するコマンドを追加したいのですが、どのようにすればよいでしょうか。 

 ボタンを【削除】するということは、もうボタンクリックでのマクロ実行はできないということになりますね。
 であれば、最初からボタンを配置せず、ボタン起動ではなく、マクロにショートカットキーを割り当て
 Ctrl/その文字 での起動にすればいかがですか?

 あるいは、ボタン起動のマクロの先頭で、シート上のボタンをすべて非表示。
 別途、シート上のボタンをすべて表示にするマクロを用意しておいて、それにショートカットキーを割り当て
 Ctrl/その文字 でボタンを表示 というのも考えられますね。

 >>以下のボタンマクロが数十個もあり、どれが有効になっているのかよくわからないのですが

 これらボタンはフォームコントロールのボタンですか? それとも ActiveXコントロールの CommandButtonですか?

 いずれにしても、「どれが有効・・」という意味がよくわかりません。
 1つには、そのマクロを呼び出しているボタンが、もう存在しなければ、それは確実に、「死んだマクロ」でしょう。
 でも、実際に、それぞれのマクロはボタンに紐付いている。
 ただし、そのボタンを押して処理する運用はないというポイントであれば それは、回答側では判断できません。

(β) 2015/08/31(月) 20:04


 あるいは、ボタンで制御しているのは、貼り付け位置だけのようですから
 たとえば、セルのダブルクリックイベントあたりで、そのセルの場所に貼り付ける。
 そうすると、ボタンは不要ですし、また、プロシジャも1つで済みますね。

(β) 2015/08/31(月) 20:13


 現在のコード、フォームコントロールボタン、ActiveX CommandButton 両方のプロシジャが書かれており
 実際にシート上に配置されているのがどちらかはわかりませんが、図を挿入した際に、図の上にでるというとこから
 ActiveXだと推測されます。これらCommandButtonをすべてフォームコントロールに変えれば、とりあえずの目的は
 達成されるとは思いますが、いずれにしても、コードそのものを整理されたらいいですよ。

(β) 2015/08/31(月) 21:07


何度も回答いただきありがとうございます。
申し訳ないのですが、マクロについては一部の修正くらいしかできず、仕組みを理解していないのですが、
質問の内容をかえさせていただくと、
「オブジェクトの選択と表示」でbuttonが30個くらいあるのを一括で非表示にしたいのですが、
一括ボタンを押すと写真まで非表示になってしまうので、オブジェクト(マクロボタン)だけを
非表示にする方法はないでしょうか。
もしくは、一括でボタンのみを非表示にするコマンドなどがあれば教えて下さい。

(ささ) 2015/08/31(月) 21:18


βさんも言及されていますが、ボタンが邪魔なら、
ボタンは使わないで、ダブルクリックで画像挿入がよいと思います。

 以下は、B列セルをダブルクリックで挿入する例です。

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim myGetFileName

    If Target.Column <> 2 Then Exit Sub
    Cancel = True

    myGetFileName = Application.GetOpenFilename( _
        "画像 (*.gif;*.bmp;*.jpg;*.wmf),*.gif;*.bmp;*.jpg;*.wmf,すべてのファイル(*.*),*.*")
    If myGetFileName = False Then Exit Sub

    With Pictures.Insert(myGetFileName).ShapeRange
        .LockAspectRatio = True
        .Width = 361
    End With

 End Sub

 ここは、何をしたいのか理解できませんでしたので、対応していません。
 >myFileName = Dir(myGetFileName)
 >If LCase(myFileName) Like "*.jpg" Then
 >    myFileName = Mid(myFileName, 1, Len(myFileName) - 4)
 >End If

(マナ) 2015/08/31(月) 23:24


 是非、マナさんのコードで処理することをおすすめします。
 現在の構えは(想像ですけど)、コードとしては フォームコントロールボタンとActiveX CommandButton それぞれ同じロジックを持つものが10個ほど。
 それぞれの違いは、図の貼り付け位置のみでしょうから、今あるシートモジュールのコードをすべてけしさり
 マナさんのダブルクリック処理一本にされることを強く強く推奨。

 と思いますが、一応、ボタン非表示と表示のコードを以下に。
 ActiveXのほうは、CommandButtonに限らずすべてを非表示にしますので、もし、他の コンロロールがあれば
 それも非表示になります。具合悪ければ、CommandButtonに限定することもできますが、とりあえず。

 Sub ボタン非表示()
    ActiveSheet.Buttons.Visible = False
    ActiveSheet.OLEObjects.Visible = False
 End Sub

 Sub ボタン表示()
    ActiveSheet.Buttons.Visible = True
    ActiveSheet.OLEObjects.Visible = True
 End Sub

(β) 2015/09/01(火) 00:05


 やはり気になりますので、おせっかいですがコメントします。

 最低限、現在のシートに配置されたボタンが、どちらなのかを調べたうえで
 フォームコントロールなら Private Sub CommandButton4_Click() 等をすべて消去、
 ActiveXなら Sub ボタン4_Click() 等をすべて消去しておかれるべきかと。

 で、仮にボタンでの処理を継続するということであれば、

 ・ボタンをフォームコントロールのものにする。
 ・以下のマクロを1つだけシートモジュールに記述。
 ・そのボタンを(いくつあるのかわかりませんが)クリックされたらその場所に図を挿入したいセルに配置。すべてに同じマクロをマクロ登録。
 (ボタンの左上隅がそのセル内に入るように配置してください)

 をおすすめします。

 Sub 図の挿入()
    Dim myGetFileName

    ActiveSheet.Shapes(Application.Caller).TopLeftCell.Select

    myGetFileName = Application.GetOpenFilename( _
        "画像 (*.gif;*.bmp;*.jpg;*.wmf),*.gif;*.bmp;*.jpg;*.wmf,すべてのファイル(*.*),*.*")
    If myGetFileName = False Then Exit Sub

    With Pictures.Insert(myGetFileName).ShapeRange
        .LockAspectRatio = True
        .Width = 361
    End With

 End Sub

(β) 2015/09/01(火) 06:42


返信遅くなりすみません。。
ひとまず、教えていただいたボタンを一括非表示する方法で行こうと思います。
OLEObjectsを削除したら使用できました。

他にもいろいろな方法を教えて頂きありがとうございます。
参考に保存させていただきます。
ありがとうございました。
(ささ) 2015/09/02(水) 15:00


コメント返信:

[ 一覧(最新更新順) ]


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