[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コンパイルエラー』(らら)
大変お世話になっております
[[20170528223055]]
既存マクロ変更のやり方
日曜日に質問させていただきましてその節はありがとうございました
2010で試したところ正常に動いているのですが
2013で試すと
Private Sub ComboBox1_Click()のdicの所で
コンパイルエラー sub 又はfunctionが定義されてません
というエラーが出てしまいます
どのように修正すればいいのでしょうか
よろしくお願いいたします
Private Sub ComboBox1_Click()のdicの所です
If .ComboBox1.ListIndex > -1 Then .ComboBox2.List = dic(.ComboBox1.Value).Keys
Private Sub CommandButton4_Click()
Dim a, i As Long, ii As Long Set dic = CreateObject("Scripting.Dictionary") dic.CompareMode = 1 a = Sheets("aaa").Cells(1).CurrentRegion.Resize(, 3).Value For i = 2 To UBound(a, 1) For ii = 1 To UBound(a, 2) a(i, ii) = CStr(a(i, ii)) Next If Not dic.Exists(a(i, 1)) Then Set dic(a(i, 1)) = CreateObject("Scripting.Dictionary") dic(a(i, 1)).CompareMode = 1 End If If Not dic(a(i, 1)).Exists(a(i, 2)) Then Set dic(a(i, 1))(a(i, 2)) = CreateObject("Scripting.Dictionary") dic(a(i, 1))(a(i, 2)).CompareMode = 1 End If
Next Me.ComboBox1.List = dic.Keys
Application.ScreenUpdating = True Worksheets("aaa").Select End Sub
Private Sub ComboBox1_Click() Dim W As Worksheet For Each W In Worksheets If W.AutoFilterMode Then W.AutoFilterMode = False Next W With Me .ComboBox2.Clear
If .ComboBox1.ListIndex > -1 Then .ComboBox2.List = dic(.ComboBox1.Value).Keys End With End Sub
Private Sub ComboBox2_Change() On Error Resume Next Dim i As Long If Me.ComboBox2.ListIndex <> -1 Then With Sheets("aaa").Cells(1).CurrentRegion .Parent.AutoFilterMode = False For i = 1 To 2 .AutoFilter i, Me.Controls("ComboBox" & i).Value Next End With End If
Dim frng As Range Set frng = Worksheets("aaa").AutoFilter.Range Set frng = frng.Offset(1).Resize(frng.Rows.Count - 1) With frng.Columns("B:B")
End With
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
dicの変数宣言がされてないからじゃないでしょうか?
2010の方は変数宣言の強制がされてなくて 変数宣言がされてなくてスルーしてしまい、 2013の方は変数宣言の強制がされていて Option Explicit が自動的に付き、変数宣言が無いのでコンパイルエラーになってるとか。
※2010も2013も持ってないので違っていたらすみません。 (カリーニン) 2017/05/29(月) 21:53
Dim で強制宣言したら
.ComboBox2.List = dic(.ComboBox1.Value).Keys
型が違いますって言われてしまいました
(らら) 2017/05/29(月) 22:05
変数の型は何にしましたか (カリーニン) 2017/05/29(月) 22:06
参考HPです。
Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_dictionary.html (カリーニン) 2017/05/29(月) 22:09
変数はもよくわかってないので
As Variant
で逃げてみました
紹介して頂いたページ
参考にしてみます
(らら) 2017/05/29(月) 22:19
変数宣言 As Object, myKey オブジェクト変数 with ブロック変数が設定されてません .ComboBox2.List = dic(.ComboBox1.Value).Keys
この部分ででしまいます
対象シートをアクティブにしないとダメなのでしょうか
2013だと アクティブにしないとエラーが出るのでしょうか
本当にわからなくなってきました 笑い
(らら) 2017/05/29(月) 22:32
書き換えた後のコード全体は提示できませんか? (カリーニン) 2017/05/29(月) 23:06
Private Sub UserForm_Initialize() Dim a, i As Long, ii As Long Set dic = CreateObject("Scripting.Dictionary") dic.CompareMode = 1 a = Sheets("aaa").Cells(1).CurrentRegion.Resize(, 3).Value For i = 2 To UBound(a, 1) For ii = 1 To UBound(a, 2) a(i, ii) = CStr(a(i, ii)) Next If Not dic.Exists(a(i, 1)) Then Set dic(a(i, 1)) = CreateObject("Scripting.Dictionary") dic(a(i, 1)).CompareMode = 1 End If If Not dic(a(i, 1)).Exists(a(i, 2)) Then Set dic(a(i, 1))(a(i, 2)) = CreateObject("Scripting.Dictionary") dic(a(i, 1))(a(i, 2)).CompareMode = 1 End If
Next Me.ComboBox1.List = dic.Keys
Application.ScreenUpdating = True Worksheets("aaa").Activate
End Sub
Private Sub ComboBox1_click() Dim dic As Object, myKey
Dim W As Worksheet For Each W In Worksheets If W.AutoFilterMode Then W.AutoFilterMode = False Next W With Me .ComboBox2.Clear
If .ComboBox1.ListIndex > -1 Then .ComboBox2.List = dic(.ComboBox1.Value).Keys End With End Sub
Private Sub ComboBox2_Change() On Error Resume Next Dim i As Long If Me.ComboBox2.ListIndex <> -1 Then With Sheets("aaa").Cells(1).CurrentRegion .Parent.AutoFilterMode = False For i = 1 To 2 .AutoFilter i, Me.Controls("ComboBox" & i).Value Next End With End If
Dim frng As Range Set frng = Worksheets("aaa").AutoFilter.Range Set frng = frng.Offset(1).Resize(frng.Rows.Count - 1) With frng.Columns("B:B")
End With
End Sub
Private Sub ClearComb(myStart, myEnd) Dim i As Long For i = myStart To myEnd Me.Controls("ComboBox" & i).Clear Next End Sub
(らら) 2017/05/30(火) 22:10
???様のご指導の下
「ツール」-「参照設定」で、「Microsoft Scripting Runtime」にチェックを入れるとどうなるでしょうか?
ComboBox1にリストは表示されるようになりました
しかしComboBox1を選択すると
実行エラー91 オブジェクト変数または withブロック変数が設定されてません
というエラーがでしまいます
どのようにすればいいのでしょうか
よろしくお願いいたします
Private Sub ComboBox1_click()の下記の部分が黄色くなってエラーになっています
.ComboBox2.List = dic(.ComboBox1.Value).Keys
(らら) 2017/05/30(火) 22:17
>2010で試したところ正常に動いているのですが >2013で試すと ・・コンパイルエラー
多分、バージョンとは関係ない気がします。 つまり、(失礼ながら)ららさんの勘違いであろうと思います。
>Dim で強制宣言したら >.ComboBox2.List = dic(.ComboBox1.Value).Keys >型が違いますって言われてしまいました
dicを宣言する場所が間違っているのでは、と推測します。
最上段に Option Explicit と書かれていると思いますが、 その直下に Dim dic As Object と書く、そして その他の場所にある Dim dic と定義したものは全て消去すれば正常化する(のではないか)。
(半平太) 2017/05/31(水) 16:31
この件で悩んでOption Explicit 外したんですよ実は
でも言われた通り Dim dic As Object 宣言したら
出来ました
しかし2010 だとつかえてたSelectは
2013では全てActivateに変更を余儀なくされました
結果できましたけど ちょい腑に落ちなくてしょうがありません
笑い
結果出来ましたから
本当にありがとうございます
(らら) 2017/05/31(水) 21:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.