[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロの実行について』(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.