[[20060815221827]] 『記録したマクロについて』(ちくりんぼう) ページの最後に飛ぶ

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

 

『記録したマクロについて』(ちくりんぼう)

 いつもお世話になります。
 早速ですが、記録したマクロについて教えて下さい。

 ツール → ユーザー設定 → ツールバータブ → フォーム → チェックボックス
 を使い、合否判定をするチェックシートを作ろうと思っています。
 チェックボックスの『合格』にチェックした時には、入力不要箇所(不合格の時に入力する場所)を
 結合したり、文字を消したり、チェックボックスを消したり・・・etc
 また、チェックボックスの『不合格』にチェックした時には、さらに追加検査を行い記入する。
 といった作業を行います。

 今回は、上記の『合格』した時の作業をマクロの記録を使って記録したのですが、
 『合格』のチェックボックスを実際にチェックすると、何か画面がパチパチパチとなってちょっと時間がかかります。
 これは記録したマクロをそのまま作業してくれているのだと思うのですが、『合格』を
 クリックしたらすぐに結果が反映される様に記録したマクロをダイエットさせる事は可能でしょうか?
 ご教授下さい。宜しくお願いいたします。

 ↓記録したマクロです。↓

 Sub チェック629_Click()
 '
 ' Macro1 Macro
 ' マクロ記録日 : 2006/8/15  ユーザー名 :
 '

 '
    Range("E30:I33").Select
    Selection.ClearContents
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
    End With
    Selection.Merge
    ActiveSheet.Shapes("Line 602").Select
    Selection.Delete
    ActiveSheet.Shapes("Check Box 636").Select
    Selection.Delete
    ActiveSheet.Shapes("Check Box 637").Select
    Selection.Delete
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = True
    End With
    With Selection.Font
        .Name = "MS Pゴシック"
        .FontStyle = "標準"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し"
    ActiveCell.Characters(1, 2).PhoneticCharacters = "ダイイチ"
    ActiveCell.Characters(8, 2).PhoneticCharacters = "ゴウカク"
    ActiveCell.Characters(11, 1).PhoneticCharacters = "タメ"
    ActiveCell.Characters(13, 2).PhoneticCharacters = "ダイニ"
    ActiveCell.Characters(19, 2).PhoneticCharacters = "ソクテイ"
    ActiveCell.Characters(22, 2).PhoneticCharacters = "ヒツヨウ"
    ActiveCell.Characters(24, 1).PhoneticCharacters = "ナ"
    Range("E30:I33").Select
End Sub

 こんばんは。
何をしているかよくわからなかったので、とりあえずセレクトをなくしてみましたが・・
  どうでしょう?                     (SHIOJII)

 Sub チェック629_Click()
    Application.ScreenUpdating = False
    With ActiveSheet
        .Shapes("Line 602").Delete
        .Shapes("Check Box 636").Delete
        .Shapes("Check Box 637").Delete

      With .Range("E30:I33")
           .Merge
           .HorizontalAlignment = xlCenter
           .VerticalAlignment = xlCenter

         With .Font
              .Name = "MS Pゴシック"
              .FontStyle = "標準"
              .Size = 12
         End With
        .FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し"
        .Characters(1, 2).PhoneticCharacters = "ダイイチ"
        .Characters(8, 2).PhoneticCharacters = "ゴウカク"
        .Characters(11, 1).PhoneticCharacters = "タメ"
        .Characters(13, 2).PhoneticCharacters = "ダイニ"
        .Characters(19, 2).PhoneticCharacters = "ソクテイ"
        .Characters(22, 2).PhoneticCharacters = "ヒツヨウ"
        .Characters(24, 1).PhoneticCharacters = "ナ"
        .Phonetics.Visible = True
     End With
   End With
   Application.ScreenUpdating = True

 End Sub


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

 記録したマクロでも、いらないコード?を省いて軽くしてやればいいって事ですね。
 実際にコードをひとつづつ起動させながら、作業内容を確認する事って可能でしょうか?
                                            ちくりんぼう

 F8を押すことにより確認できますよ。
その他、ブレイクポイントを設定することにより
その場所で一時中断させることも可能です。
http://www.v-aid.org/nakatu/exvba/2003/04/menu.html
一応、やり方の記載されたHPをリンクしておきます。
http://miyahorinn.fc2web.com/vbabegin/index.html
こちらのサイトも参考にして下さい。
Lesson 5  くらいか〜
(kenbou)


 kenbou様ありがとうございます。
今から勉強させていただきます。
                (ちくりんぼう)

 やりました!
上の様なだらだらした長いコードをここまでダイエットさせる事が出来ました(^_^)

 Sub チェック629_Click()
    Range("E30:I33").Select
    Selection.ClearContents
    Selection.Merge
    ActiveSheet.Shapes("Check Box 636").Delete
    ActiveSheet.Shapes("Check Box 637").Delete
    With Selection
        .VerticalAlignment = xlCenter
    End With
    With Selection.Font
        .Size = 12
        .FontStyle = "標準"
    End With
    ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し"
End Sub

 でも、新しい問題が・・・・(^へ^;)
間違ってチェックをいれてしまった時に、チェックを外したら元の状態に戻したいのですが戻せません。
間違ってチェックをいれてしまっても、チェックを外したら元の状態に戻す事は可能でしょうか?
宜しくご教授下さい。
            (ちくりんぼう)

 みやほりんさんのHPはご覧いただけましたか?
Selectは出来るだけしない方が良いです。
チラつく原因です。
例えばRange("E30:I33").ClearContents
とするほうが良いと思われます。その下にもSelectionが続くのでwithで全部
行ってしまわれは方が、良さそうですね。
基本的にはVBAで実行してしまった物は元には戻せません。
他のシートにバックアップしておくとか、コマンドボタンで実行させるとかでしょうか。
でも、保存しなしに終了なんで、苦肉の策も・・・
 Sub チェック629_Click()
    ActiveSheet.Shapes("Check Box 636").Delete
    ActiveSheet.Shapes("Check Box 637").Delete
    With Range("E30:I33")
        .ClearContents
        .Merge
        .VerticalAlignment = xlCenter
        .Font.Size = 12
        .Font.FontStyle = "標準"
        .FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し"
    End With
 End Sub
(kenbou)こうか。

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

 基本的にはVBAで実行してしまった物は元には戻せません。
>初めて知りました。ありがとうございました。
                       (ちくりんぼう)

 お世話になります。
以前ここで、"VBAで実行してしまった物は元には戻せません。"
と聞いて、そっかぁ。じゃぁしゃぁないなぁ。って思ってたのですが、
やっぱり、間違ってクリックしてしまう事も想定されますので、1回くらいは
確認して貰う方がいいかと思い、メッセージボックスで確認を促す様にしようと思って
下記コードを追加してみたのですが、キャンセルの時は上手くいきますが、OKの時に
思い通りの作業をしてくれません。(キャンセル時と同じ作業になってしまってる)
コードの記述が悪いのでしょうか?ご教授下さい。宜しくお願い致します。

 Sub チェック587_Click()
    MsgBox "本当に合格ですか?" & Chr(13) & Chr(10) & "『OK』をクリックすると取り消しできません", vbOKCancel + vbQuestion, "確認"
        If MYBTN = vbOK Then
            Range("E22:I25").Select
            Selection.ClearContents
            Selection.Merge
            ActiveSheet.Shapes("Check Box 593").Delete
            ActiveSheet.Shapes("Check Box 594").Delete
            ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し"
            Range("E22:I25").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    Selection.Font.Italic = False
    With Selection.Font
        .Name = "MS Pゴシック"
        .Size = 12
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
        Else
             MsgBox "キャンセルします"
End If
End Sub
(ちくりんぼう)


 MYBTNの宣言を忘れているみたいです。
    Dim MYBTN As VbMsgBoxResult
    MYBTN = MsgBox("本当に合格ですか?" & Chr(13) & Chr(10) & "『OK』をクリックすると取り消しできません", vbOKCancel + vbQuestion, "確認")
(ROUGE)


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

 >MYBTNの宣言を忘れているみたいです。
っていうかσ(・ω・)宣言とかいまいちわかってないんですよね。(^-^;)
もっと勉強します。
本当にありがとうございました。┏○ペコッ
(ちくりんぼう)


 (kenbou)さんのコメントにあるように
 Selectionをやめた形で記載するのも勉強して見るといいかも
 しれませんね。
 (kenbou)さんがせっかくコメントをくれているのですが
 そのあとの記載でいかされてないようだったので。。。(横道)


 この件についてもう一度質問させて下さい。
チェックボックスの『合格』をクリックした時にメッセージボックスを出し、
メッセージボックスの『キャンセル』を選択した時には、『合格』を取り消す為、
初めにチェックしたチェックボックスの「レ点」を取り消したいのですが、
そういった事はできますか?(現在はキャンセル後も『合格』にチェックが入ったままです)
宜しくご教授下さい。
(ちくりんぼう)

 ifは理解してますよね。
 ActiveSheet.OLEObjects("CheckBox1").Object.Value = True
 でチェックが入りFalseでチェックが外れます。
 >っていうかσ(・ω・)宣言とかいまいちわかってないんですよね。(^-^;)
 宣言もしていませんが、上では代入がされていないですよね。
 (kenbou)

 kenbou様
いつもありがとうございます。

 >ifは理解してますよね。
実は、まだまだ理解できておりません。
先程ヒントを頂き、分からないながらに試してみましたが、
どこに?どのように?が分かっていない為、思うように出来ません。
もう少しヒントを頂けないでしょうか?
宜しくお願い致します。
(ちくりんぼう)

 If MYBTN = vbOK Then
     真の場合の処理
 Else
     偽の場合の処理
 end If
となります。
(kenbou)

 kenbou様
遅くまでお付き合い頂きありがとうございます。

 上記ヒントを元に、私なりに考え下記の場所に追記致しましたがダメでした。
偽の場合の処理のコードの書き方が何かおかしいのでしょうか?それとも場所?
ん〜(T_T)

 Sub チェック587_Click()
    Dim MYBTN As VbMsgBoxResult
        MYBTN = MsgBox("本当に合格ですか?" & Chr(13) & Chr(10) & "『OK』をクリックすると取り消しできません", vbOKCancel + vbQuestion, "確認")
            If MYBTN = vbOK Then
            ActiveSheet.OLEObjects("CheckBox1").Object.Value = True
                Range("E22:I25").Select
                Selection.ClearContents
                Selection.Merge
                ActiveSheet.Shapes("Check Box 593").Delete
                ActiveSheet.Shapes("Check Box 594").Delete
                ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し"
                Range("E22:I25").Select
                    With Selection
                        .HorizontalAlignment = xlCenter
                        .VerticalAlignment = xlCenter
                    End With
                With Selection.Font
                    .Name = "MS Pゴシック"
                    .Size = 12
                    .Underline = xlUnderlineStyleNone
                    .ColorIndex = xlAutomatic
                End With
            Else: MsgBox "キャンセルします"
            MYBTN = vbCancel = False
End If
End Sub

(ちくりんぼう)


 場所はいいと思いますが
>ActiveSheet.OLEObjects("CheckBox1").Object.Value = True
>でチェックが入りFalseでチェックが外れます。
と書きました。
>MYBTN = vbCancel = False
これは違うんではないですか?
(kenbou)

 あれから色々考えてみましたが基本が無い為全く分かりません。
どなたかコードの記述をお願い出来ませんか?
宜しくお願い致します。
(ちくりんぼう)


 中身を全く見ていないので、ヒントだけ。。。
 
 >>ActiveSheet.OLEObjects("CheckBox1").Object.Value = True
 >>でチェックが入りFalseでチェックが外れます。
 ↓
 チェックが入る
 ActiveSheet.OLEObjects("CheckBox1").Object.Value = True
 
 チェックが外れる
 ActiveSheet.OLEObjects("CheckBox1").Object.Value = False
 
 追加で、もう一つヒントb
 
Sub test()
    If Range("A1") = 1 Then
        ActiveSheet.OLEObjects("CheckBox1").Object.Value = True
        Range("A1") = ""
    Else
        ActiveSheet.OLEObjects("CheckBox1").Object.Value = False
        Range("A1") = 1
    End If
End Sub
 
 (キリキ)(〃⌒o⌒)b

 >どなたかコードの記述をお願い出来ませんか?
 >宜しくお願い致します。
 いい加減にしてくれ。入門書ぐらい読んでくれますか?

 上の名無しさんのコメントは何なのでしょう?
 履歴を見る限りでは特にコメントもされていないようですし、ヒントを出された形跡も ない。
 人を中傷する様なコメントを残しておいてニックネームすら書いてないし、、
 ちくりんぼうさんのコメントを見る限りでは、
 >あれから色々考えてみましたが・・・
 何日か?何時間か?は自分なりに考えて試されたのだと思います。
 私自信も記録する程度しか出来ないので、ここで色んな人の質問や回答を拝見させて頂
 勉強させてもらっています。
 先生方はとても分かりやすく丁寧に教えて下さっているいいサイトだと思いますが、
 こういったコメントを残す様な人がいるのはとても残念に思います。
 最後に、つまらないコメントを残してしまい申し訳ありませんでした。

  (吉田)


 吉田さん、こんにちわ^^
 
 >何日か?何時間か?は自分なりに考えて試されたのだと思います。
 σ(^o^;)もそう思います。
 が、
 ちくりんぼうさんは、残念ながら「頑張った結果」を、今回はご提示いただけませんでした。。。
 残念ながらね・・・
 
 ですので、σ(^o^;)も
 >どなたかコードの記述をお願い出来ませんか?
 >宜しくお願い致します。
 に、引っかかった一人です。
 
 ここは学校です。
 勉強する場であって、質問者の希望通りに作成する(させる)場では無いと思いませんか?
 もし「依頼」であれば、お金を払ってそういった場所に「依頼」すればいいだけの事。
 
 このサイトは、本当に親切な方が多く勉強になる場だと思います。
 
 >いい加減にしてくれ。入門書ぐらい読んでくれますか?
 少なくとも、言い方は別としてσ(^o^;)も同じ印象受けました。
 (もちろん名無しさんを否定するものではありません。吉田さんもねb)
 変数やIf・・・
 本当に勉強する(した)なら、すぐに調べられるとは思いませんか?
 基本中の基本ではないでしょうか?
 
 だから、σ(^o^;)は
 >どなたかコードの記述をお願い出来ませんか?
 に対して、
 「ヒント」としたわけです。
 
 ※ここは学校だから、こう言った意見のやりとりも大いにありだと思う。
 (キリキ)(〃⌒o⌒)b

コメント返信:

[ 一覧(最新更新順) ]


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