[[20230301123158]] 『マクロで入力規則を設定すると起動時に問題が発生』(おっちょこちょい) ページの最後に飛ぶ

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

 

『マクロで入力規則を設定すると起動時に問題が発生する』(おっちょこちょい)

マクロ付きブックに入力規則があるセルがあるのですが、
当初自分で設定していた入力規則を下記コードのようにマクロで設定したところ、
そのブックの起動時に「問題が発生しました。回復しますか?」的なメッセージが出るようになりました。
(メッセージは詳しく覚えていません、すみません)

閉じるときに全ての入力規則を削除し起動時に再設定するように組みなおしたらメッセージは出なくなったのですが、
テストブックで同じように設定してみても問題は発生しませんでした。

このような現象が分かる方はいらっしゃいますでしょうか?

Sub V()

    Dim ArrayList() As Variant
    Dim DropList As String
    Dim DataCount As Long
    Dim i As Long

    With ThisWorkbook.Worksheets(1)
        DataCount = .Cells(.Rows.Count, "I").End(xlUp).Row
        ReDim ArrayList(DataCount - 1)

        For i = 1 To DataCount
            ArrayList(i - 1) = .Cells(i, "I").Value
        Next i

        DropList = Join(ArrayList, ",")
        With .Cells(1, 1).Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:=DropList
        End With
    End With

End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


ええと、いちいち文字にしないで参照セルを記載すれば良いのでは。
更に言うと255文字ぐらいしか対応してません。(変わってなければ)
無駄な苦労に思います。
(お疲れ) 2023/03/01(水) 13:54:16

コメントありがとうございます。

取り敢えず方法論や無駄かどうかではなく何故エラーのようなものが出るか、についてお聞きしたのですが。
コメントを見るに文字数がオーバーフローしたために起動時にメッセージが出る可能性があるのですかね?

オーバーフローしたら設定コードを実行したその時点でエラーになり操作ものですが。
(おっちょこちょい) 2023/03/01(水) 16:15:48


なり操作→なりそうな

すみません、ミスタイプです。
(おっちょこちょい) 2023/03/01(水) 16:17:11


 こんばんは!
先日、私も入力規則ではないですけど、同じ様なメッセージに遭遇しました。
私の場合は、quit だったんですけど、
その時の感想としてはエクセル的に処理が残ったまま終了した。と感じました。
プロシージャを跨ぐようなコードで次の一行が残っている。とか
要は、処理が完結していないんだと思います。
なので、閉じるときに全て削除して開く時に再設定されたのは正解だと思います。
これだけのコードが書けるのですから思い当たるところはありませんか?
(SoulMan) 2023/03/01(水) 22:00:57

ググったらこんなのが。

Excelのリスト化でファイルが壊れる件
https://how-to-business.com/excel%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E5%8C%96%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E5%A3%8A%E3%82%8C%E3%82%8B%E4%BB%B6/

(agt) 2023/03/01(水) 22:57:20


SoulManさん、agtさん、コメントありがとうございます。
255文字以上の設定でもその時点ではオーバーフローしないんですね・・・
だとするとagtさんの紹介してくれたサイトの通りリストが255文字を超えていることが原因のようです。
※テストでは255文字を超えないリストだったのでメッセージが出なかったのですね。

ご教授、ありがとうございました。
(おっちょこちょい) 2023/03/02(木) 07:45:31


 あれっすね、ショートカット(.lnk)のリンク先の文字数制限みたいな感じですね。

 VBAからCreateObject("WScript.Shell")でWshShortcutの.Argumentsに設定する分には何文字でも入るけど、
 いざ作ったショートカットのプロパティ開いたら、あたかも途中で切れちゃってる様に見えるし、
 そのまま[OK]ボタンで閉じようものなら、ホントに途中で切れちゃったりするわで、
 最初原因が分からずに苦労した覚えがあります。

 なんか状況が似てたんで思い出しちゃいました。

(白茶) 2023/03/02(木) 09:17:10


まんま、お疲れさんの言う通りだったじゃん。
文字列にしないでセル参照にすればVBAもいらないじゃん。
謝っといたら?
(通り過ぎる) 2023/03/02(木) 13:26:21

通り過ぎるさん、コメントありがとうございます。

>文字列にしないでセル参照にすればVBAもいらないじゃん。
質問時に載せたコードはテストコードなので連続した固定の範囲ですが、
実際に使用しているコードは可変かつ連続していない(ところどころリストに入れない)範囲なので
文字列に変換しています。
なのでVBAを使用しなければいちいち変更のたびに範囲を手作業で選択しなおさなければなりません。
また一旦セルを連続する状態に置き換えてフィルタリングしてもよかったのですが、
結局必要なセルを探したりとかのコードが必要となるので、分かりやすく配列にした次第です。
(おっちょこちょい) 2023/03/03(金) 10:16:37


コメント返信:

[ 一覧(最新更新順) ]


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