Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1030 / 13644 ツリー ←次へ | 前へ→

【76708】マクロを実行するボタンの自動生成&会社名の横に自動で配置 さとちぃ 15/3/3(火) 9:32 質問[未読]
【76709】Re:マクロを実行するボタンの自動生成&会... β 15/3/3(火) 10:46 発言[未読]
【76710】Re:マクロを実行するボタンの自動生成&会... さとちぃ 15/3/3(火) 13:42 質問[未読]
【76711】Re:マクロを実行するボタンの自動生成&会... 独覚 15/3/3(火) 14:18 発言[未読]
【76712】Re:マクロを実行するボタンの自動生成&会... β 15/3/3(火) 14:19 発言[未読]
【76726】Re:マクロを実行するボタンの自動生成&会... さとちぃ 15/3/5(木) 11:13 お礼[未読]

【76708】マクロを実行するボタンの自動生成&会社...
質問  さとちぃ  - 15/3/3(火) 9:32 -

引用なし
パスワード
   いつもお世話になっております。
下記の件について、やり方がわからず教えていただけますでしょうか?


(やりたいこと)
緊急連絡網でそれぞれの会社名のセルの横に、検索用のための
マクロを走らせるボタン付けたいです。

単純にボタンを用意してマクロに関連付けることは出来ますが
会社が多すぎて、この作業をVBAにて自動化したいと考えてます。


    A       B        C       D

1 株式会社ABC  リンクボタン  株式会社DFG  リンクボタン
2
3 株式会社XYZ  リンクボタン  株式会社MOMOZ  リンクボタン
4

 表には規則性があり、A、Cに必ず会社名が入り、その横のセルがリンクボタン用の
 セルとなります。 

 
(プログラムのコード)
  
  Sub 拠点情報ボタン自動生成
  
  もし、A列に文字列が入力されているならば、B列にオフセットしたセルにリンクボタンを生成しなさい。

  もし、C列に文字列が入力されているならば、D列にオフセットしたセルにリンクボタンを生成しなさい。


  ActiveSheet.Buttons.Add(以上のIF文で選択したセル).Select
  Selection.OnAction = "拠点情報検索"
  Selection.ShapeRange.ScaleWidth 14, msoFalse, msoScaleFromTopLeft
  Selection.ShapeRange.ScaleHeight 7, msoFalse, msoScaleFromTopLeft
  ActiveSheet.Shapes("Button 1635").Select
  Selection.Characters.Text = "拠点情報"
  With Selection.Characters(Start:=1, Length:=4).Font
    .Name = "MS Pゴシック"
    .FontStyle = "標準"
    .Size = 11
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .ColorIndex = 1
  End With

 こんな形で考えてますが、条件文、ボタン自動生成について教えていただけますでしょうか?
 

【76709】Re:マクロを実行するボタンの自動生成&...
発言  β  - 15/3/3(火) 10:46 -

引用なし
パスワード
   ▼さとちぃ さん:

おはようございます。
回答ではないんですが、このテーマの一連のトピを拝見して
なぜボタン? と思います。

たとえば、会社名のセル(A1とかC1とか)をダブルクリックしたら
当該の会社用の処理を実行するという構えにしておけば、会社が増えても
ボタンを追加してマクロ登録する必要もなくなるんですけど?

仮に会社が500あれば、シート上に500個のボタンがあるわけですね。
重いシートになりそうですが?

【76710】Re:マクロを実行するボタンの自動生成&...
質問  さとちぃ  - 15/3/3(火) 13:42 -

引用なし
パスワード
   β様

さとちぃです。
早速ありがとうございます。

ダブルクリックによるマクロ実行は、私の勉強不足で知りませんでした。

以下の様な形で試行錯誤中ですが、うまくいきません・・・・。
おかしな点をご指摘いただけますでしょうか?


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

  Set MyTarget = Application.Intersect(ActiveCell, Range("A2:A4"))
  
  If Not MyTarget Is Nothing Then
    MsgBox "セル範囲A1:A10内のセルがダブルクリックされました"
    Cancel = True
  End If
End Sub

【76711】Re:マクロを実行するボタンの自動生成&...
発言  独覚  - 15/3/3(火) 14:18 -

引用なし
パスワード
    ▼さとちぃ さん:

メッセージでは「セル範囲A1:A10内」となっているけれどもVBAでは
Set MyTarget = Application.Intersect(ActiveCell, Range("A2:A4"))
となっていることかな?

ただ、「ActiveCell」ではなくて「Target」でも構わないかと。

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

  If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub
  MsgBox "セル範囲A1:A10内のセルがダブルクリックされました"
  Cancel = True
  
End Sub


【76712】Re:マクロを実行するボタンの自動生成&...
発言  β  - 15/3/3(火) 14:19 -

引用なし
パスワード
   ▼さとちぃ さん:

>以下の様な形で試行錯誤中ですが、うまくいきません・・・・。

うまくいかないとは
・A1:A4の範囲でダブルクリックしているのに全く反応がない(メッセージが出ない)
・そのほかの不具合
具体的には、どういう状況でしょうか?

で、コードですが

・このコードは標準モジュールではなくシートモジュールに書きますが
 それはOKですか?
 シートモジュールのだしかたはいろいろあありますが、簡単なのは
 シートのシートタブを右クリックして、コードの表示を選ぶとでてきます。

・コードではA1:A4の範囲のダブルクリックをチェックしてますが、メッセージでは
A1:A10 となっています。ちょっとしたタイプミスだと思いますが。

・ダブルクリックの場合、TargetはActiveCellの単一セルですから
 Application.Intersect(ActiveCell, Range("A2:A4"))
 これで、全く問題はないのですが
 Application.Intersect(Target, Range("A2:A4"))
 こう書くほうが一般的かもしれません。

【76726】Re:マクロを実行するボタンの自動生成&...
お礼  さとちぃ  - 15/3/5(木) 11:13 -

引用なし
パスワード
   β様

さとちぃです。
大変遅くなりましたが、この度はありがとうございました。
大変処理が軽くなり、更新作業が非常に楽になりました。

ありがとうございました。

1030 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free