[[20080725130903]] 『マクロボタンを2回目に押すと効かなくする』(サンハイツ) ページの最後に飛ぶ

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

 

『マクロボタンを2回目に押すと効かなくする』(サンハイツ)
 マクロボタンを2回目に押すと,2回目にはマクロが働かないように
 VBAで設定したいのですが,そんなコードはありますか?


 マクロボタンというのは何を指しているのでしょうか。
 自分で作成し他マクロを起動するためのボタンでしょうか。

 であれば、マクロの処理の最初で、ボタンを無効にすればよいかと思います。
 (Mook)

 すみません。支離滅裂で。

 言い方を変えまして
 マクロを1度実行したあと,2回目にマクロを実行しようとすると
 実行できなくなるようにしたいのですが,そんなことはVBAで設定できるのでしょうか。

 (サンハイツ)


 >2回目にマクロを実行しようとすると実行できなくなるように
 実行したらまず、実行済の「フラグ」を確認し立っていなければ実行し「フラグ」を立てる、
立っていたら何もせずに終わる。どこにフラグを立てるかは、何時まで実行したくないかによる。
(通りすがり)


 > 2回目にはマクロが働かないように
 1) 一度っきりで後は再度立ち上げても使わないってことですか?
 2) PCが変わっても同じこと?
 (seiya)

 はい,一度実行したら,そのマクロはもう使わないのです。
 マクロをボタンに登録していて,誤操作で再度ボタンを押すと
 変な画面になってしまうので,誤操作防止のため
 VBAの最後に,「このマクロは1回きり有効」
 のようなことを表現したいのですが,そんなことできますか。

 (サンハイツ)

 1) Sheet1を非表示にしてダミーシートにしておく
 2) マクロを実行する際にSheet1の存在を確認して、実行後にSheet1を削除する
 3) 再度マクロを実行しようとしてもできない。
 なんてのはどうでしょう?
 (seiya)

 なるほど,ありがとうございます。
 それで下のような感じにしまして,
 マクロを実行すると,1回目はSheet1を削除して,次の動作へ移る。
 でも,2回目に実行しようとすると,Sheet1は既に削除されているから,マクロがエラーになる。

 Sub Macro1()

    Sheets("Sheet1").Select
    ActiveWindow.SelectedSheets.Delete

    〜〜〜
  〜〜〜

 End Sub

 ここでですね,マクロを実行して,Sheet1を削除するときに,
 「選択したシートにデータが存在する可能性があります。データを完全に削除するには削除を
 クリックしてください」
 というメッセージが表示されてしまうのですが。
 今まで何もせずにマクロを実行できたのが,1つクリック動作が増えてしまったので,このメッセージ
 が表示されないようにすることはできますか。

 (サンハイツ)

 えーーと、
 こんな感じです。

  まず、シートの参照は CodeName にした方がより確実だと思いますので、
  VBE の Project Explorer の Sheet1(Sheet1) を選択して
  Property box の CodeName を好みで変更する (sheet1, sheet2 等は使用しない)
  仮に xyz とでもしておきましょう。

 Sub test()
 Dim ws As Worksheet, flg As Boolean
 For Each ws In Sheets
     If ws.CodeName = "xyz" Then
         Application.DisplayAlerts = False
         ws.Delete
         Application.DisplayAlerts = True
         flg = True
         Exit For
     End If
 Next
 If Not flg Then Exit Sub
 ' 実行されるべきマクロ名
 End Sub
 (seiya)


 ありがとうございます。
 だんだん分かってきました。

 ちなみに,CodeNameを使わない場合はどうなるのでしょうか。
 上の VBE とか Project Explorer とか Property box 
 というのは素人の私には難しすぎますので。

 わがまま言ってすみません。

 (サンハイツ)

 VBE : Visual Basic Editor (VB エディタ) Alt + F11 で出る画面
 Visual Basic を編集するためのソフト

 Project Explorer : プロジェクト・エクスプローラー VBE の左端画面に出る小枠窓
 モジュール および モジュールの集合体を表示

 Property Box : プロパティボックス : 通常はプロジェクト・エクスプローラーの下に出る小枠窓

 とか、説明するのが面倒だし、意味がないような気がするので省略...

 左端のシート名を暗号のようなもの(例:123qap6_r とか)に変更する。

 Sub test()
 Dim flg As Boolean
 If Sheets(1).Name = "123qap6_r" Then
     Application.DisplayAlerts = False
     Sheets(1).Delete
     Application.DisplayAlerts = True
     flg = True
 End If
 If Not flg Then Exit Sub
 まくろ
 End Sub
 (seiya)

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

 (サンハイツ)

 また質問させていただきます。
 以前教えていただいたコードと合わせて,下記のようなコードを作りました。

 Sub test()
 Dim ws As Worksheet, flg As Boolean
 For Each ws In Sheets
     If ws.CodeName = "xyz" Then
         Application.DisplayAlerts = False
         ws.Delete
         Application.DisplayAlerts = True
         flg = True
         Exit For
     End If
 Next
 If Not flg Then Exit Sub

 Dim aa, bb, astrLinks
 Dim fso As Object

 Set fso = CreateObject("Scripting.FileSystemObject")

 Application.ScreenUpdating = False
     For Each aa In fso.GetFolder(ThisWorkbook.Path & "\").Files
         If aa.Name <> ThisWorkbook.Name And aa.Name <> "ああ.xls" And aa.Name <> "いい.xls" Then
              Workbooks.Open Filename:=ThisWorkbook.Path & "\" & aa.Name, UpdateLinks:=0

              astrLinks = Workbooks(aa.Name).LinkSources(Type:=xlLinkTypeExcelLinks)

              If Not IsEmpty(astrLinks) Then
                 For Each bb In astrLinks
                     Workbooks(aa.Name).BreakLink Name:=bb, Type:=xlLinkTypeExcelLinks
                 Next
              End If

              Workbooks(aa.Name).Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).Cells
              Workbooks(aa.Name).Close False
              Exit For
         End If
     Next
 Application.ScreenUpdating = True

 Set fso = Nothing
 End Sub

 これは,フォルダ内に,たとえば,AA,ああ,いい,という名前のファイルがあって
 上記コードはAAファイルに入力していて,フォルダ内に上記ファイル名以外の
 任意の名前のファイル(たとえば,ウウ)を貼り付けてマクロを実行すると,
 ウウのデータをコピーしてAAに貼り付けるものです。

 ここで,ウウを貼り付けたあと,マクロを実行しますと,それ以上マクロは実行でき
 なくなって誤操作防止ができます。

 ここでですね,ウウを貼り付ける前の段階ではマクロを実行できないような設定は
 作れますでしょうか。

 ようするに,
 @AA,ああ,いい,以外のファイルを探しにいったが,見つからなかったので,
  その後のマクロ実行は中止。
 AAA,ああ,いい,以外のファイル,ウウが見つかったので,上記のマクロを実行。
 B一度マクロを実行してコピーしたので,その後はマクロは実行できない。

 という感じにしたいのですが。

 (サンパレス)


 実行済みのファイル名リストをどこかに書いておいて参照すれば良いのでは。
 (通りすがり)

コメント返信:

[ 一覧(最新更新順) ]


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