次の方法で共有

2003で正常に実行できるVBAが2010で実行するとエラーとなってしまうのはなぜでしょうか?

Anonymous
2011-06-10T09:15:48+00:00

お世話になっております。

VBAに関する質問です。

以下のVBAを2003で実行したところ正常に実行できるのですが、

2010で実行するとエラーとなってしまいます。

ご質問したい内容としては、

①2003で実行可能なのに2010でエラーとなってしまうのはなぜか?

②2003で実行可能だが2010で実行不可となってしまう類似のケースについて報告がされているか。

   報告されていましたらお教えください。

の2点になります。

では、問題のVBAについてご説明致します。

【エラーとなった作業】

チェックボックスに複数個チェックをつけてある処理を実行しました。

次に、つけたチェックボックスの中からチェックを一つ外して再度実行しようとしたところエラーとなります。

エラーメッセージは「実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」が表示されます。

【VBA】

 ===============================================

 選択不可状態の書式を変更

' ===============================================

Private Sub setSelectedForm(ws As Worksheet)

    Dim i As Integer

    Dim sAddr As String

    Dim rMyRange As Range

    With ws.CheckBoxes

        For i = 1 To .Count

            If .Item(i).Value = Common.CHK_OFF And .Item(i).Enabled = True Then

                ' LinkedCell(B列:チェック状態保持)のアドレスを設定

                sAddr = .Item(i).LinkedCell

                Set rMyRange = ws.Range(sAddr)

                ' A列:CheckBox

                ' rMyRangeはB列:チェック状態保持領域を指し示す為、1つ左の領域を設定。

                ' B列:チェック状態保持領域

                With rMyRange

                    If .Font.ColorIndex = Common.ORANGE And _

                       .Interior.ColorIndex = Common.ORANGE Then

.FormatConditions.Delete            ' 書式設定削除

                        .FormatConditions.Add Type:=xlExpression, _

                            Formula1:="=" & rMyRange.Address & "=TRUE"              ' 条件付き書式の条件を設定

                        .FormatConditions(1).Font.ColorIndex = Common.YELLOW        ' 条件付き書式で文字の色を黄色に設定

                        .FormatConditions(1).Interior.ColorIndex = Common.YELLOW    ' 条件付き書式でセルの色を黄色に設定

                        .Font.ColorIndex = Common.WHITE                             ' 書式設定で文字の色を白色に設定

                        .Interior.ColorIndex = Common.WHITE

                    End If

                End With

            End If

        Next i

    End With

End Sub

太線と下線が引いてある「.FormatConditions.Delete」でエラーとなり処理が中断されます。

【実行エラー時の保有値】

・i = 9

・Common.CHK_OFF = -4146

・sAddr = "$H$8"

・rMyRange = False

個人的な見解と致しましては、

Rangeオブジェクトが"False"の状態でFormatConditions.Deleteを実行するとエラーとなってしまうのではと考えています。

VBAを始めてまだ日が浅いためご教示お願いします。

追加で知りたい情報があればご指摘願います。

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

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-06-10T15:07:31+00:00

一般論ですが、OfficeでもOSでもバージョンが変わった時、すべてが当然のように下位互換があると思われない方がよろしいと思います。(WindowsやOfficeに限りません)

ですから、プラットフォームのバージョンが変わった時はすべて詳細な再テストが必要だと考えて頂いても差し支えないくらいです。(ある意味動かなくて当然と言う態度が必要です)

動かなくなる理由はいくらでもありますが、同じ機能でもプロパティが追加され、下位バージョンでは当然指定するようなコーディングにはなっていない訳で、それが問題になることもありますし、本来正しくないコーディングが結果オーライで動いていたのに、厳密なチェックが入りエラーになるなどです。

もちろん単純に新バージョンにバグがあるケースもあります。

特にOfficeでは2003以前と2007以降では全く別のソフトと考えても良いくらいです。

(とは言え基本的には互換性が維持されていますので、相当特殊な事をやっていなければ経験的には大丈夫です)

実際に私の経験の範囲では2007に上げた時動かなくなったと言うのは殆どありません。

追検証することに否やはないのですが、どうも実際のコードをそのまま投稿されているようです。

もっと単純な形でエラーが発生する条件とコードを示してください。

今のコードですと、前提とするシートの状態を推定して作るのも相当面倒ですし、多分くろねこくんが使っている問題のシートとはかけ離れたものになると思います。

具体的にはチェックボックスをシートにいくつ置き(例えば二つ)、Linkedセルはどこで、どういう保護をかけている等です。

(単に書式削除が問題ならカラーがどうのこうのなんてIFは要らないはずです)

場合によってはそうやって発生条件を絞りこんでゆくと、原因をご自分で突き止められる可能性もかなり高いと思いますよ。

どう質問されている症状は保護状態のシートでの話のようですが、私に言わせれば保護状態でコードを実行するのは愚の骨頂で、コードの頭で保護を解除して、終了時に保護をかけなおせば良いだけの話です。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-06-17T02:27:41+00:00

    解答ありがとうございます。

    いろいろと試してみた結果、保護状態でコードを実行したことによって今回の事象が発生したようです。

    y sakuda様のご指摘どおりの原因でした。

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

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません