[[20120508142540]] 『マクロの実行について』(me) ページの最後に飛ぶ

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

 

『マクロの実行について』(me)

いつもお世話になっています。

シートをアクティブにした時にマクロが実行されるようにしてあるのですが、
別のシートの指定したセル(A1:D1,A5:B5)の内いずれか1つでも空白の時、
マクロを実行させない事は出来ますか?

説明がへたで伝わらないこともあるかと思いますが、
どうかよろしくおねがいします。

エクセルは2003を使用しております。

(me)


 たとえば、今、シートのActivateルーティンで

 Private Sub Worksheet_Activate()
    Call 自動的に走るマクロ
 End Sub

 こんなふうにしているとして

 Private Sub Worksheet_Activate()
    With Sheets("Sheet2")    '別シート
        If WorksheetFunction.CountA(.Range("A1:D1,A5:B5")) = 6 Then
            Call 自動的に走るマクロ
        End If
    End With
 End Sub

 (ぶらっと)

いつもありがとうございます!

せっかく教えてくださったのにすみません;
「自動的に走るマクロ」のところには今まで使っていたコードを挿入するのでしょうか?
やってみたのですがうまくいかず…

いつもすみません;

(me)


 今までつかっていたコードをアップしてくれる?

 追記)それと、「うまくいかず」というのは、具体的に、どう、うまくいかなかったの教えてくれる?

 (ぶらっと)

返信が遅れてしまってすみません。

コードは以下の通りです。

Range("B2").Formula = "=IF(ISERROR(A2),"A",A2)
Selection.AutoFill Destination:=Range("B2:J2"), Type:=xlFillDefault

(↑のような式が20ぐらいあります)

    Dim sh2 As Worksheet
    Dim Target As Range
    Dim c As Range
    Dim sv As Variant
    Dim myR As Range

    Application.ScreenUpdating = False

    Set sh2 = Sheets("sheet1")
    Set myR = Sheets("sheet2").Range("B2:J52")

    sv = myR.Formula
    myR.Replace What:="", Replacement:=vbTab, LookAt:=xlWhole
    myR.Value = myR.Value
    myR.Interior.ColorIndex = xlNone

    For Each c In sh2.Range("B1", sh2.Range("B" & sh2.Rows.Count).End(xlUp))
        myR.Replace What:=c.Value, Replacement:="", LookAt:=xlWhole
    Next

    Dim r As Range
    Dim bgx As Double, bgy As Double, edx As Double, edy As Double

    On Error Resume Next
    Set Target = myR.Cells.SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not Target Is Nothing Then
        For Each r In Target
            bgx = r.Left + r.Width
            bgy = r.Top
            edx = r.Left
            edy = r.Offset(8).Top + r.Offset(8).Height
            Target.Parent.Shapes.AddLine bgx, bgy, edx, edy
        Next
    End If

    myR.Formula = sv

    Set sh2 = Nothing
    Set myR = Nothing
    Set Target = Nothing

    Application.ScreenUpdating = True

 このようなコードを挿入すると
 コンパイルエラー 修正候補 識別子
と出ます。

よろしくおねがいします。

(me)


 コードをアップしてとお願いしたのは、Sub  から End Sub までのフルセットのつもりだったんだけど

 >シートをアクティブにした時にマクロが実行されるようにしてあるのですが

 こうかいてあったので、当然、今、シートモジュールに

 Private Sub Worksheet_Activate()
    現在のコード群
 End Sub

 こんな形なんだよね。(これはこれで、ちょっと注意しなきゃいけないところもあるけど)

 で、その、現在のコード群が

 Range("B2").Formula = "=IF(ISERROR(A2),"A",A2) 
 Selection.AutoFill Destination:=Range("B2:J2"), Type:=xlFillDefault 

 これが20組ぐらいずらっと書かれている?

 それと、同じくアップされた
 Dim sh2 As Worksheet 〜 Application.ScreenUpdating = True が、その後に書かれている?

 いずれにしても、そのフルセットのコードをアップしてもらえれば、私がアップしたものとどのように組み合わせるかのアドバイスができると思う。

 それと、 コンパイルエラー 修正候補 識別子 がでたのは、どのコード?

 (ぶらっと)


ぶらっとさん

…すみません;
こちらのミスでした;;;
ほんとうにもうしわけないです;

ちゃんとできました!
ありがとうございました。

ひとつ質問なんですが、
こんな形なんだよね。(これはこれで、ちょっと注意しなきゃいけないところもあるけど)
とはどういうことでしょうか??

(me)


 Activate イベントプロシジャは、その名の通り、シートがアクティブになったときに実行されるんだけど
唯一、ブックが開かれたときに、そのシートがアクティブシートだった場合、実行されない。
(これは、限りなくバグに近いと思っているんだけど)
極端に言って、シートが1枚だけのブックで、シートのActivateイベントを書いておいても実行はされない。

 最初に開いたときには実行しなくてもいいような要件であれば、それでもいいんだけど。

 もし、最初に開いたときに、そのシートがアクティブなら、やはり実行するということなら
ブックのOpenイベントで、アクティブシートが、そのシートなら、シートのActivateイベントプロシジャでやっていることを実行。
同じロジックを書くのは、いろいろ問題が多いので、これを共通プロシジャにして標準モジュールに書いておいて
それをCallするか、あるいは、いっそのこと、シートモジュールのコードを削除して、
シートのActivateイベントもThisWorkbookモジュールで処理すれば、共通プロシジャもThisWorkbookモジュールに書くことで一本化できる。

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


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