Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10943 / 13646 ツリー ←次へ | 前へ→

【18963】コードを短くしたい mickeypapa 04/10/17(日) 22:20 質問[未読]
【18964】Re:コードを短くしたい かみちゃん 04/10/17(日) 23:13 回答[未読]
【18985】Re:コードを短くしたい mickeypapa 04/10/18(月) 23:31 質問[未読]
【18988】Re:コードを短くしたい かみちゃん 04/10/19(火) 6:40 発言[未読]
【19031】Re:コードを短くしたい mickeypapa 04/10/19(火) 21:28 質問[未読]
【19034】Re:コードを短くしたい かみちゃん 04/10/19(火) 23:16 回答[未読]
【19053】Re:コードを短くしたい mickeypapa 04/10/20(水) 9:51 お礼[未読]
【18966】Re:コードを短くしたい Kobasan 04/10/18(月) 0:26 回答[未読]
【18981】Re:コードを短くしたい mickeypapa 04/10/18(月) 21:13 お礼[未読]

【18963】コードを短くしたい
質問  mickeypapa WEB  - 04/10/17(日) 22:20 -

引用なし
パスワード
   こんにちは、自己流でVBAを始めて、少しずつ解り始めたのですが、
なかなか解決できないで、困っています。
今は、
If CheckBox1.Value = True Then
   Worksheets("稼働1").PrintOut
End If
  
If CheckBox2.Value = True Then
   Worksheets("稼働2").PrintOut
End If

というように30回のコードを繰り返しています。
Dim i As Integer(Long)
For i =1 To 30

と書くのは何となく解ってきましたが、
その後が続かないので、宜しくお願い致します。

また、変数iをListindex = iと使いたいのですが
その時には、別に変数を宣言する必要があるのでしょうか? 

【18964】Re:コードを短くしたい
回答  かみちゃん  - 04/10/17(日) 23:13 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>If CheckBox1.Value = True Then
>   Worksheets("稼働1").PrintOut
>End If
>  
>If CheckBox2.Value = True Then
>   Worksheets("稼働2").PrintOut
>End If
>
>というように30回のコードを繰り返しています。

以下のようにするとできると思います。
Dim i As Integer
For i = 1 To 30
 If Controls("CheckBox" & i).Value = True Then
  Worksheets("稼働" & i).PrintOut
 End If
Next

>また、変数iをListindex = iと使いたいのですが
>その時には、別に変数を宣言する必要があるのでしょうか? 

Listindexをどのように使うのかは知りませんが、使い方によっては宣言が必要ですが、そもそも変数自体いらないのかもしれません。

【18966】Re:コードを短くしたい
回答  Kobasan  - 04/10/18(月) 0:26 -

引用なし
パスワード
   ▼mickeypapa さん:こんばんは

Dim i As Integer(Long)
For i =1 To 30
  If Me.Controls("CheckBox" & i).Value = True Then Worksheets("稼働" & i).PrintOut
next
で試してみて下さい。

>また、変数iをListindex = iと使いたいのですが
>その時には、別に変数を宣言する必要があるのでしょうか? 

しなくても動きます。変数を宣言しなかったら
Dim Listindex as Variant
と同じ扱いになります。

【18981】Re:コードを短くしたい
お礼  mickeypapa WEB  - 04/10/18(月) 21:13 -

引用なし
パスワード
   有り難うございました。
おかげですっきりとさせることが出来ました。

【18985】Re:コードを短くしたい
質問  mickeypapa WEB  - 04/10/18(月) 23:31 -

引用なし
パスワード
   ▼かみちゃん さん:有り難うございます。

>以下のようにするとできると思います。
>Dim i As Integer
>For i = 1 To 30
> If Controls("CheckBox" & i).Value = True Then
>  Worksheets("稼働" & i).PrintOut
> End If
>Next
このようなコードで、UserForm_Activateイベントで
フォームが表示されるときにアクティブなシートのチェックボックスだけ
Trueにすることも出来るのでしょうか?

【18988】Re:コードを短くしたい
発言  かみちゃん  - 04/10/19(火) 6:40 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>このようなコードで、UserForm_Activateイベントで
>フォームが表示されるときにアクティブなシートのチェックボックスだけ
>Trueにすることも出来るのでしょうか?

「アクティブなシート」とは、どういう意味ですか?
ちなみに、ActiveSheet.Nameで、「アクティブなシートの名前」は取得できますが、これが「稼動1」「稼動2」・・・のどれなのかを調べて、一致したら、そのシートに対するチェックボックスをTrueにすることはできるのですが。

【19031】Re:コードを短くしたい
質問  mickeypapa WEB  - 04/10/19(火) 21:28 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>このようなコードで、UserForm_Activateイベントで
>>フォームが表示されるときにアクティブなシートのチェックボックスだけ
>>Trueにすることも出来るのでしょうか?
>
>「アクティブなシート」とは、どういう意味ですか?
>ちなみに、ActiveSheet.Nameで、「アクティブなシートの名前」は取得できますが、これが「稼動1」「稼動2」・・・のどれなのかを調べて、一致したら、そのシートに対するチェックボックスをTrueにすることはできるのですが。
説明が下手で申し訳ありません。アクティブなシートとは、選択しているシート
表示されているシートという意味です。宜しくお願い致します。

【19034】Re:コードを短くしたい
回答  かみちゃん  - 04/10/19(火) 23:16 -

引用なし
パスワード
   こんちには。かみちゃん です。

>>ちなみに、ActiveSheet.Nameで、「アクティブなシートの名前」は取得できますが、これが「稼動1」「稼動2」・・・のどれなのかを調べて、一致したら、そのシートに対するチェックボックスをTrueにすることはできるのですが。

>説明が下手で申し訳ありません。アクティブなシートとは、選択しているシート
>表示されているシートという意味です。宜しくお願い致します。

前回のコメントで書いたとおりなのですが、それをコードにすると、以下のような感じになるかと思います。

Dim i As Integer

'チェックボックスをすべてFalseにする。
For i = 1 To 30
  Me.Controls("CheckBox" & i).Value = False
Next
'アクティブシートが「稼動1」〜「稼動30」のどれかを検索する。
'i=0としているところに注意
For i = 0 To 30
 If ActiveSheet.Name = "稼動" & i Then
 Exit For
Next
'アクティブシートのチェックボックスをTrueなする。
If i > 0 Then Me.Controls("CheckBox" & i).Value = True

【19053】Re:コードを短くしたい
お礼  mickeypapa WEB  - 04/10/20(水) 9:51 -

引用なし
パスワード
   ▼かみちゃん さん:
的を得ない質問に丁寧にお答えいただき
有り難うございます。
動作を確認出来ました。
「Nextに対するForが有りません」みたいな
メッセージが出るので
Exit Forの後にEnd Ifを付けたのですが
これで良かったでしょうか?

10943 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free