Excel VBA質問箱 IV

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

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


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

【51356】コンボボックスのリストがイッパイ。 すず 07/9/12(水) 23:45 質問[未読]
【51357】Re:コンボボックスのリストがイッパイ。 ichinose 07/9/13(木) 8:35 発言[未読]
【51364】Re:コンボボックスのリストがイッパイ。 すず 07/9/13(木) 11:32 質問[未読]
【51365】Re:コンボボックスのリストがイッパイ。 Jaka 07/9/13(木) 12:44 発言[未読]
【51366】Re:コンボボックスのリストがイッパイ。 すず 07/9/13(木) 14:26 質問[未読]
【51367】Re:コンボボックスのリストがイッパイ。 Blue 07/9/13(木) 14:46 回答[未読]
【51368】Re:コンボボックスのリストがイッパイ。 すず 07/9/13(木) 15:07 質問[未読]
【51369】Re:コンボボックスのリストがイッパイ。 Jaka 07/9/13(木) 15:17 発言[未読]
【51371】Re:コンボボックスのリストがイッパイ。 Blue 07/9/13(木) 15:24 発言[未読]
【51372】Re:コンボボックスのリストがイッパイ。 Jaka 07/9/13(木) 15:39 発言[未読]
【51370】Re:コンボボックスのリストがイッパイ。 Blue 07/9/13(木) 15:21 回答[未読]
【51393】Re:コンボボックスのリストがイッパイ。 すず 07/9/14(金) 13:05 お礼[未読]

【51356】コンボボックスのリストがイッパイ。
質問  すず  - 07/9/12(水) 23:45 -

引用なし
パスワード
   コンボボックスに
Private Sub コンボ_Change()
  Dim i As Integer, k As Integer
  
  For i = 1 To 12
  For k = 1 To 5
    コンボ.AddItem i & "月/" & k
  Next
  Next

End Sub
というのを入れました。
そして、選択して処理をおこなっていたのですが、
暫くすると、コンボボックスのリストに
「4月/1」や「4月/2」という名前が複数個表示されるようになりました。
これは「1月/1」〜「12月/5」まで各1個表示されていればいいのですが、
何か対処法はありませんでしょうか?

【51357】Re:コンボボックスのリストがイッパイ。
発言  ichinose  - 07/9/13(木) 8:35 -

引用なし
パスワード
   ▼すず さん:
おはようございます。

>コンボボックスに
>Private Sub コンボ_Change()
>  Dim i As Integer, k As Integer
>  
   コンボ.clear
'とすれば、取り合えず回避はできますが・・・。
>  For i = 1 To 12
>  For k = 1 To 5
>    コンボ.AddItem i & "月/" & k
>  Next
>  Next
>
>End Sub
このイベントでコンボボックスのメンバー登録することが間違っていると思いますよ。

このコンボボックスがシートに貼り付けたものなのか
ユーザーフォームのそれなのかが不明です。
それによって、コードを記述するモジュールやプロシジャーが違ってきます。

シートに貼り付けたものならば、
 ブックを開いた時に、(Thisworkbookのモジュールのworkbook_open())

ユーザーフォームならば、
ユーザーフォームをロードした時に
(ユーザーフォームのモジュールのUserForm_Initialize())

実行されるイベントプロシジャーにコンボボックスのメンバを登録するコードを
記述します。

【51364】Re:コンボボックスのリストがイッパイ。
質問  すず  - 07/9/13(木) 11:32 -

引用なし
パスワード
   ▼ichinose さん:
はい、ワークシートに直接貼り付けております。
ただし、1枚のシートに何個もコンボボックスがあるのですが、
それは気にせず、

Private Sub Worksheet_Open()

 Dim i As Integer, k As Integer
  For i = 1 To 12
  For k = 1 To 5
    コンボ.AddItem i & "月/" & k
  Next
  Next
    コンボ.Clear
End Sub
としてのですが、動きませんでした。
というか、相変わらずイッパイありました。


何が異なっておるのでしょうか?

>▼すず さん:
>おはようございます。
>
>>コンボボックスに
>>Private Sub コンボ_Change()
>>  Dim i As Integer, k As Integer
>>  
>   コンボ.clear
>'とすれば、取り合えず回避はできますが・・・。
>>  For i = 1 To 12
>>  For k = 1 To 5
>>    コンボ.AddItem i & "月/" & k
>>  Next
>>  Next
>>
>>End Sub
>このイベントでコンボボックスのメンバー登録することが間違っていると思いますよ。
>
>このコンボボックスがシートに貼り付けたものなのか
>ユーザーフォームのそれなのかが不明です。
>それによって、コードを記述するモジュールやプロシジャーが違ってきます。
>
>シートに貼り付けたものならば、
> ブックを開いた時に、(Thisworkbookのモジュールのworkbook_open())
>
>ユーザーフォームならば、
>ユーザーフォームをロードした時に
>(ユーザーフォームのモジュールのUserForm_Initialize())
>
>実行されるイベントプロシジャーにコンボボックスのメンバを登録するコードを
>記述します。

【51365】Re:コンボボックスのリストがイッパイ。
発言  Jaka  - 07/9/13(木) 12:44 -

引用なし
パスワード
   ▼すず さん:
>Private Sub Worksheet_Open()
こういうのはないです。

ichinoseさんが書かれたものをよく読んでね。
>シートに貼り付けたものならば、
> ブックを開いた時に、(Thisworkbookのモジュールのworkbook_open())

【51366】Re:コンボボックスのリストがイッパイ。
質問  すず  - 07/9/13(木) 14:26 -

引用なし
パスワード
   ▼Jaka さん:

おぉ、そういうことなのですね。
ThisWorkbookのところに入れてみました。
しかし、オブジェクトが必要と怒られました。

Private Sub Workbook_Open()

  Dim i As Integer, k As Integer
  
  For i = 1 To 12
    コンボ1.AddItem i
  Next

  For i = 1 To 12
    コンボ2.AddItem i
  Next
  
  For i = 1 To 12
  For k = 1 To 5
    コンボ3.AddItem i & "月/" & k
  Next
  Next

End Sub

書きすぎですか?


>▼すず さん:
>>Private Sub Worksheet_Open()
>こういうのはないです。
>
>ichinoseさんが書かれたものをよく読んでね。
>>シートに貼り付けたものならば、
>> ブックを開いた時に、(Thisworkbookのモジュールのworkbook_open())

【51367】Re:コンボボックスのリストがイッパイ。
回答  Blue  - 07/9/13(木) 14:46 -

引用なし
パスワード
   どこのシートにあるコントロールなのか特定してあげないといけません。

シート名がSheet1のシートにあるならば

Worksheets("Sheet1").コンボ

という風にしなければ。

ちなみに
>  Dim i As Integer, k As Integer
>  
>  For i = 1 To 12
>    コンボ1.AddItem i
>  Next
>
>  For i = 1 To 12
>    コンボ2.AddItem i
>  Next
>  
>  For i = 1 To 12
>  For k = 1 To 5
>    コンボ3.AddItem i & "月/" & k
>  Next
>  Next
ならば

Dim i As Integer, k As Integer
Dim ws As Object

Set ws = Worksheets("Sheet1") ' シート名でコンボボックスのあるシートを特定

ws.コンボ1.Clear
ws.コンボ2.Clear
ws.コンボ3.Clear

For i = 1 To 12
  ws.コンボ1.AddItem i
  ws.コンボ2.AddItem i
  For k = 1 To 5
    ws.コンボ3.AddItem i & "月/" & k
  Next
Next

とループをまとめれますね。

【51368】Re:コンボボックスのリストがイッパイ。
質問  すず  - 07/9/13(木) 15:07 -

引用なし
パスワード
   ▼Blue さん:

どこのシートにあるのか、そうでうよね。
その宣言をしてませんでした。

しかし、宣言させたもののやはり
「オブジェクトが必要」と怒られます。

Private Sub Workbook_Open()

  Dim i As Integer, k As Integer
  Dim ws1 As Object, ws2 As Object, ws3 As Object

' シート名でコンボボックスのあるシートを特定
Set ws1 = Worksheets("Sheet1")
    ws1.コンボ1.Clear
  For i = 1 To 12
    コンボ1.AddItem i
  Next


Set ws2 = Worksheets("Sheet2")
    ws2.コンボ2.Clear
  For i = 1 To 12
    コンボ2.AddItem i
  Next

Set ws3 = Worksheets("Sheet3")
    ws3.コンボ3.Clear

  For i = 1 To 12
  For k = 1 To 5
    コンボ3.AddItem i & "月/" & k
  Next
  Next

End Sub

何故なのでしょう。


>どこのシートにあるコントロールなのか特定してあげないといけません。
>
>シート名がSheet1のシートにあるならば
>
>Worksheets("Sheet1").コンボ
>
>という風にしなければ。
>
>ちなみに
>>  Dim i As Integer, k As Integer
>>  
>>  For i = 1 To 12
>>    コンボ1.AddItem i
>>  Next
>>
>>  For i = 1 To 12
>>    コンボ2.AddItem i
>>  Next
>>  
>>  For i = 1 To 12
>>  For k = 1 To 5
>>    コンボ3.AddItem i & "月/" & k
>>  Next
>>  Next
>ならば
>
>Dim i As Integer, k As Integer
>Dim ws As Object
>
>Set ws = Worksheets("Sheet1") ' シート名でコンボボックスのあるシートを特定
>
>ws.コンボ1.Clear
>ws.コンボ2.Clear
>ws.コンボ3.Clear
>
>For i = 1 To 12
>  ws.コンボ1.AddItem i
>  ws.コンボ2.AddItem i
>  For k = 1 To 5
>    ws.コンボ3.AddItem i & "月/" & k
>  Next
>Next
>
>とループをまとめれますね。

【51369】Re:コンボボックスのリストがイッパイ。
発言  Jaka  - 07/9/13(木) 15:17 -

引用なし
パスワード
   一応の書き方例
HTTP://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=157;id=FAQ

>  Dim ws1 As Object, ws2 As Object, ws3 As Object
> Set ws1 = Worksheets("Sheet1")
Objectでもいいけど、
Dim ws1 As Worksheet のが良くないですか。

【51370】Re:コンボボックスのリストがイッパイ。
回答  Blue  - 07/9/13(木) 15:21 -

引用なし
パスワード
   >' シート名でコンボボックスのあるシートを特定
> Set ws1 = Worksheets("Sheet1")
>    ws1.コンボ1.Clear
>  For i = 1 To 12
>    コンボ1.AddItem i
コンボ1の前に ws1. がついていない
>  Next

> Set ws2 = Worksheets("Sheet2")
>    ws2.コンボ2.Clear
>  For i = 1 To 12
>    コンボ2.AddItem i
コンボ2の前に ws2. がついていない
>  Next

> Set ws3 = Worksheets("Sheet3")
>    ws3.コンボ3.Clear
>
>  For i = 1 To 12
>  For k = 1 To 5
>    コンボ3.AddItem i & "月/" & k
コンボ3の前に ws3. がついていない
>  Next
>  Next

【51371】Re:コンボボックスのリストがイッパイ。
発言  Blue  - 07/9/13(木) 15:24 -

引用なし
パスワード
   ▼Jaka さん:
>>  Dim ws1 As Object, ws2 As Object, ws3 As Object
>> Set ws1 = Worksheets("Sheet1")
>Objectでもいいけど、
>Dim ws1 As Worksheet のが良くないですか。
Worksheetにすると、コンボ1というメンバを持っていないためエラーになってしまいます。
(Object型やWorksheets("Sheet1").コンボ1とかは実行時に
Sheet1オブジェクトとして解釈されるのでエラーにはならない)

Sheet1とかSheet2とかというオブジェクト名(シート名ではない)であれば

Sheet1.コンボ1.Clear

とか

Dim sht As Sheet1
Set sht = Worksheets("シート1")

sht.コンボ1.Clear

とかでエラーは出ないですけどね。

【51372】Re:コンボボックスのリストがイッパイ。
発言  Jaka  - 07/9/13(木) 15:39 -

引用なし
パスワード
   普段オブジェクトブラウザなんて全く見ないので、気づきませんでした。
勉強になりました。

【51393】Re:コンボボックスのリストがイッパイ。
お礼  すず  - 07/9/14(金) 13:05 -

引用なし
パスワード
   ▼Blue さん:
ありがとうございます。
何とか動いたようです。


>>' シート名でコンボボックスのあるシートを特定
>> Set ws1 = Worksheets("Sheet1")
>>    ws1.コンボ1.Clear
>>  For i = 1 To 12
>>    コンボ1.AddItem i
>コンボ1の前に ws1. がついていない
>>  Next
>
>> Set ws2 = Worksheets("Sheet2")
>>    ws2.コンボ2.Clear
>>  For i = 1 To 12
>>    コンボ2.AddItem i
>コンボ2の前に ws2. がついていない
>>  Next
>
>> Set ws3 = Worksheets("Sheet3")
>>    ws3.コンボ3.Clear
>>
>>  For i = 1 To 12
>>  For k = 1 To 5
>>    コンボ3.AddItem i & "月/" & k
>コンボ3の前に ws3. がついていない
>>  Next
>>  Next

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