[[20091028161103]] 『シートにn個配置したCheckBoxのRowアドレス取得に』(まき) ページの最後に飛ぶ

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

 

『シートにn個配置したCheckBoxのRowアドレス取得について』(まき)

エクセル:2003、OS:Vista

いつも色々参考にしております。

今回シートのA9以降An欄ま(開くシートにより異なる)でCheckBoxを配置し、Ture時の行

に配置したファイル名の処理(印刷等)を行いたいと考えております。そこで、過去のhttps://www.excel.studio-kazu.jp/kw/20070228103207.html

を参考にしてクラスターモジュールに下記の通りVBAを明記しましたが、L欄にRowアドレ

スが書かれませんでした。

 Option Explicit
 Sub chk()

 Dim obj As OLEObject
 Dim i As Long
 i = 0
 For Each obj In Worksheets(1).OLEObjects
    If TypeOf obj.Object Is MSForms.CheckBox Then
        If obj.Object.Value = True Then
            Range("L9").Offset(i).Value = Range("B9").Offset(i).Row
        End If
    End If
 i = i + 1
 Next

 End Sub

そこで試しにシートに次のVBAを入れた所Rowアドレスは取得出来たのですが、CheckBoxがn個

有る為に2個目以降Rowアドレスを出す事が出来ません。

 Private Sub CheckBox1_Click()
 Dim n As Long

    n = 9

    If CheckBox1.Value = True Then
        Range("L9") = n 
    End If

 End Sub

恐れ入りますが、良い方法が有ればご伝授お願い申し上げます。


 TopLeftCell
 BottomRightCell
 をヘルプで調べてください。
 BJ

 これ、コントロールツールボックスにあるチェックボックスでもクラスモジュールを使えば、
 出来ますが、安定性を考慮すると、コマンドバー「フォーム」にあるチェックボックスを
 使ったほうが不具合が少ないと思いますよ!!
 シートをユーザーに触らせる仕様は、モジュールレベルの変数が初期化されてしまう可能性があるので。
 変数が初期化されると、クラスモジュールで生成したオブジェクトも消えてしまうので・・・。

 検討してみてください。

 ichinose


BJ様、 ichinose様

おはようございます、まきです。

BJ様から言われました「TopLeftCell」と「BottomRightCell」を2003のVba HelpとシートHelpを探して

みましたが、見当たりませんでした?Webで検索した所、画像?を何かする時に使うのかなぁ??

ichinose様から言われ初めて知ったのですが、今までコントロールツールボックスのCheckBoxしか無い

と思っていましたが、フォームにもCheckBoxが有ったのですね。(確かにHelpを読んでいた時に、フォーム

と出て来たのですが、userFormを指していると思い読み飛ばしていました。)現在フォームのCheckBoxを

使い組み直しておりますが、レ点を入れた際にリンク先セルにTRUEしか入れられないのでしょうか?出来

ればアクセスの様に-1とかになりませんか?(後で同列を置換すればいいのですが。。。。)

以上よろしくお願いします。


 >「TopLeftCell」と「BottomRightCell」を2003のVba HelpとシートHelpを探して 
 >みましたが、見当たりませんでした?
 2002だと、VBEのヘルプの質問欄に「TopLeftCell」を貼り付けてから検索で、
 「TopLeftCell プロパティ」
 と、出るんですけどね。

 MsgBox Worksheets("Sheet1").OLEObjects("CheckBox1").TopLeftCell.Address

 For Each obj In Worksheets(1).OLEObjects
    If TypeOf obj.Object Is MSForms.CheckBox Then
        If obj.Object.Value = True Then
           MsgBox obj.TopLeftCell.Row
        End If
    End If
 i = i + 1
 Next
 BJ

BJ 様

今晩は、まきです。

素人なので教えて下さい。BJ様のVBAを新規のBOOKのSheet1にCheckBox1を作り、クラスモジュールや標準

モジュールやSheet1に入れてみましたが、コンパイルエラー:プロシージャの外では無効です。と出て来ます。

どうしてなのでしょうか?ちなみに、2003のHelp検索部をupしてみました。まさか2003ではサポート外

なのでしょうか?


以上よろしくお願いします。


 >レ点を入れた際にリンク先セルにTRUEしか入れられないのでしょうか?
 仕様ですからねえ・・・。

 >出来ればアクセスの様に-1とかになりませんか?
 どうしてTrue/Falseだと駄目なんですか?何か厄介なことでもありますか?
Trueだって、1と掛け算すれば、ほらこのとおりですから、

 sub test()
    Range("a1").Value = True
    MsgBox "ok"
    MsgBox Range("a1").Value * 1
 end Sub

 そんなに嫌わなくても・・・。

 ichinose


ichinose様

おはようございます、まきです。

数値で出したかったのでは、設置したn個設置したCheckBox(A列)の中から順番にファイル(C列にあるフォ

ルダーのリストを表示しており)名をを開き、次の処理に進む際に何個開けば良いのかとの判断材料にす

る為に数値で欲しかったのです。しかし、指定するフォルダーによりファイル数が違いますので、最終行を

見つけ出しoffsetでSUMを張る予定にしています。その際に、Ture時に1へ置換するマクロを1命令追加しま

す。この度は有り難うございました。また何かあった際には、ご指導お願いします。(営業職なのでVBA

は、仕事の合間に行っていますので、分からない事がいっぱいあります。)

BJ 様にも感謝しております。

以上よろしくお願いします。


コメント返信:

[ 一覧(最新更新順) ]


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