[[20031116195621]] 『VBA:別のページが印刷されてしまいます』(じゃぽね) ページの最後に飛ぶ

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

 

『VBA:別のページが印刷されてしまいます』(じゃぽね)

VBA初歩的なマクロ

 いつもお世話になっております。少しづつマクロを勉強しているところですが、また
 わからないとことがあり、宜しくお願いします。以下のような手順を記録させるだけの
 マクロなのですが、印刷したいページではなく別のページが印刷されてしまいます。
 印刷したいのは1ページ目でアクティブになっているはずなのですが、印刷されません。
 非表示等をつかっているのが理由なのか分かりませんがよろしくお願いします。

Sub ko( )

ActiveSheet.Unprotect

  If Range("f8") = "" Then
    Rows("8:9").Select
    Selection.EntireRow.Hidden = True
    End If
  If Range("f10") = "" Then
    Rows("10:11").Select
    Selection.EntireRow.Hidden = True
    End If

    Columns("E:E").Select
    Selection.EntireColumn.Hidden = True

    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True

    Rows("8:47").Select
    Selection.EntireRow.Hidden = False

    Range("E8").Select

    Columns("D:F").Select
    Selection.EntireColumn.Hidden = False

    ActiveSheet.Copy after:=ActiveSheet
    Range("E8:E27").Select
    Selection.ClearContents
    Range("k7").Select
    ActiveCell.FormulaR1C1 = DateAdd("m", 1, ActiveCell.Value)
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

    Range("E8").Select


 少しコードをまとめてみました。

 Sub ko()

 With ActiveSheet
    .Unprotect

    If .Range("f8").Value = "" Then
      .Rows("8:9").EntireRow.Hidden = True
    End If

    If .Range("f10").Value = "" Then
      .Rows("10:11").EntireRow.Hidden = True
    End If

    .Columns("E:E").EntireColumn.Hidden = True  
    .PrintOut From:=1, To:=1, Copies:=1, Collate:=True        
    .Rows("8:47").EntireRow.Hidden = False       
    .Columns("D:F").EntireColumn.Hidden = False     
    .Copy after:=ActiveSheet    
    .Range("E8:E27").ClearContents    
    .Range("k7").FormulaR1C1 = DateAdd("m", 1, ActiveCell.Value)    
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True    
    .Range("E8").Select
 End With

 誤動作の原因となるので、標準プロパティは省略しない方が良いと思います。
 普通に処理するときにはselectやActivateは必要ないです。
 主に対象シートなどを表示させるときに使用します。

   (INA)


 [INA]さん[標準プロパティ]というのは何でしょうか?
 (kazu)


 (INA)さんいつもありがとうございます。わたしは本当にここでマクロを教わって
 います。感謝しております。これから取り組んでみます。
 向学のために(kazu)さんのものについても教えていただけないでしょうか。
 (じゃぽね)


 説明不足ですみません。
 MSでは「既定のプロパティ」と記述されておりました。
 標準コントロールなどで、省略したときに適用されるプロパティです。
 以下のページが参考になると思います。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcn7/html/vacondefaultproperties.asp

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcn7/html/vbconpastingcodefragments.asp

If Range("f8") = "" Then
 Rangeの場合は .Value が 既定のプロパティ なので、
 省略して Range("f8") = "" としても動作しますが、
 まれに誤動作の原因となるので、Range("f8").Value = "" の方が良いと思います。
 それに省略しない方が、誰がみても分かり易いので
 私は面倒でも記述するようにしています。 
  (INA) 


 [INA]さん説明ありがとうございます。
 参考になりました。
 (kazu)

 博学者のINAさんこんばんわ。
 チョッと教えておくんなはれ。
 Range("f8")=""で希に誤作動の原因となるっちゅうのんはどんなケースで起きまんのや
 ろ?
 規定値がvalueになっとって,なお誤作動が起きるっちゅう事は、エクセル側はそれを承
 知でvalueを規定値にしたんでっしゃろか。 
 私のように下手なマクロ書いてますと、実際ようこけまんねんけど、例えばCells(i,n)
 =と書くとiやnの値はもちろんの事Cells(i,n)の値もチップテキストで教えてくれます
 わなぁ。ところが=Cells(i,n).Valueではiとnしかチップテキストが出てけえしまへん
 わ。これだけやなしに、For Each C ...でも C.Valueと書いたらな〜にも教えてくれ
 まへんけど、Cだけなら何処を検索しとるか、ちゃ〜んと教えてくれますわ。

 まぁ、そら、クイックウォッチで確かめられへん事おまへんのやけど、そんな面倒
 なコトするよりそのままのコードで確認でけた方がはるかに手間が省けますし、更には
 .Valueと書く手間も省けると思いまんねんけど、私の考え間違うとりまっしゃろか?
 ただし、これはINAさんのおっしゃる誤作動が起こらんという条件を前提にしてまんね
 んけど、さあ、これが誤作動を引き起こすとなったら私しゃRange("f8")=とレスつけら
 れへん事になりますさかい、是非、是非教えておくんなはれ、お願いします。

 因みに、わたしの仕入れた「10日で覚えるVBA」にはついぞ.Valueで書くべしとは
 載ってまへんでしたわ。
    .Valueに迷う(弥太郎)


(INA) さんご丁寧にありがとうございます。職場に実行できる環境があり、まだ確認して
 いないのですが、早速確認してみます。いつも遅くなり申し訳ないです。
 確かにIf Range("f8") = "" Thenのところは、手入力したところなので、可能性は非常に
 あります。あらためてご報告いたします。(じゃぽね)

 >Range("f8")=""で希に誤作動の原因となるっちゅうのんはどんなケースで
 >起きまんのやろ?
 具体的なケースは忘れてしまいましたが、VBAを始めてから色々な掲示板を読んでいて、
「規定のプロパティ」を記述することで、不具合を解消できたという質問が
 過去半年内くらいに3件ほどありました。 今度、見つけたらご報告いたします。

 Findメソッドも引数を省略すると、誤動作することが多いですし、
 EXCELのバグのようなものは結構多いと思います。
 誤動作する正確な状況が分からない以上、その要因は潰しておきたい
 ということで、省略しないようにしています。

 チップテキストというのは、ctrl+j や ctrl+i の入力補助のことですよね?
  (INA)

 INAさん、おおきに。
 出かけとりましたさかい、返事遅うなりました。深謝。
 例の誤作動の件、ご自分が実際に遭遇なさったわけではおまへんねんなぁ。わたしゃ
 また、てっきりINAさんの実体験を語っておられるモンと思うとりましたわ、えぇ。

 >過去半年内くらいに3件ほどありました
 正直コレは由々しき問題でんなぁ。Rangeだけの問題や無うて.Valueの規定値はみんな
 アブナイ事に通じまっせ、ホンマに。

 私もそこそこ複雑なマクロ(なんちゅうて大したこと無い)を組んだ経験がおますけど
 幸か不幸かそんな目に遭うた事はおまへんわ。
 >今度、見つけたらご報告いたします
 是非、お願い致します。私も発見したらお知らせしますわ。

 >チップテキストというのは
 デバッグの際、変数やRangeにマウスポインター合わせると長方形の箱に入った文字列
 が表示されますわ。それが変数やRangeの中身を耳打ちしてくれまんねんで。大変重宝
 してますわ、えぇ。
 あっ、あれってチップテキストって言いまんのやろ?(違う?)
     ほな...(弥太郎)
 追伸、
 わたしゃ、誤作動、エラーが確認でけるまでRange("f8")=で通しまっさ。
     

  (INA)さん ありがとうございました。おかげさまで思ったとおりに実行されました。
 他の方が私のマクロで同じような誤動作が発生するのかはわかりませんが、いずれに
 しても解消されました。言葉足らずで恐縮ですが、改めて感謝申し上げます。(じゃぽね)

 INAさんこんばんわ。
 このスレ、.Valueでエラーが出る絶好の検証コードやと思うて早速.Valueを書いたんと
 それを除いたコードを試してみましたんやけど、結果はどっちもOKですわ。
 そう簡単にはつかまえられしまへんわなぁ、バグ程度や言うのに。残念。
   ほな...(弥太郎)
    


コメント返信:

[ 一覧(最新更新順) ]


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