Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Excel 2019)
RangeクラスのCurrentRegionプロパティを取得できません。
投稿日時: 24/07/22 14:44:09
投稿者: mattuwan44

Private Sub Setデータ更新(ByRef d As Double)
    Stop
    'リソース欄
    With ThisWorkbook.Worksheets("リソース").Range("A1").CurrentRegion   ’2回目
        '旧データクリア
        On Error Resume Next
        .AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=mMyDate
        On Error GoTo 0
        If .Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then   ’1回目
            .Offset(1).ClearContents
        End If

 
上記のコードですが、
 
1回目の位置で:「RangeクラスのSpecialCellsプロパティを取得できません。」
2回目の位置で:「RangeクラスのCurrentRegionプロパティを取得できません。」
 
と出ます。
一見エラーにはならないつもりなんですが、なにかおかしいですかね?
ちなみに、この後ファイルを閉じようとしても、
固まって閉じません。
ファイルが壊れているのでしょうか?
 
思い当たる原因があれば、教えてください。

回答
投稿日時: 24/07/22 15:19:50
投稿者: simple

> .AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=mMyDate
でエラーが発生しており、その副作用ではないですか?
まずは、そのエラーを解決するのが先決かと思います。
意図がこちらではわかりませんので、そちらでトライしてください。

投稿日時: 24/07/22 16:11:15
投稿者: mattuwan44

回答ありがとうございます。
 
意図が分かりませんが、
ファイルが初期化(?)されてしまったので、
シート上の復旧に時間がかかりますので、
しばし返事が遅れるかと思います。

回答
投稿日時: 24/07/22 22:01:12
投稿者: WinArrow

そぼくな疑問
> On Error Resume Next
このエラートラップは必要ですか?
私的には、
問題を把握する意図があるならば、
エラートラップは考えないことです。(不要です)

回答
投稿日時: 24/07/24 11:42:18
投稿者: simple

最初に確認したところ、私の環境でも同様な事象が確認されました。
タスクマネージャでプロセスを強制終了させました。
理由はCriteria2が悪さをしていたのでしょう。
 
日を置いて念のため再度実行したら、事象は再現しませんでした。
なにかOffice本体に不具合があり、それが水面下で解消されたたものと想像します。
 
たしかに簡単なエラーなのに、タスクマネージャを使わないといけない事態になるのは
珍しい事象なので、議論の対象にする意味はあったかもしれませんが、
ベテランの回答者さんなのに、不思議な質問でしたね。
宣言すらしていない変数を使っていたり、よほど慌てておられたのでしょうか。
 
# エラーになる箇所のコードは基本的なものですから、コードを確認されれば回避できる話でした。
# エラーがそのような深刻な状態をもたらす部分を解決しようとしても、
# 内部処理にかかることなので、ユーザーサイドでどうなるものでもない
#(自己解決はできない)種類の話だと思います。
# 今となっては取り上げる意味もないことのように思いますので、
# ファイルの回復は別途時間を掛けて頂いて、早めに閉じられることをお願いしておきます。

投稿日時: 24/07/25 08:00:35
投稿者: mattuwan44

回答ありがとうございます。
ファイルが壊れて凹んで放置してました^^;
 
>そぼくな疑問
>> On Error Resume Next
>このエラートラップは必要ですか?
 
デバック中に必ずエラーが出るので、
とりあえず他をチェックしている間、のつもりが、
結局そこが原因でした。
 
 
 
.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=gMyDate
ここの行で表がタイトル行しかないときにエラーになっていました。
そしてその後プログラムを中断してもしなくても、
「別のoleの操作が完了するまで待機します」
の状態になっている(表示が出ない)ため、
Rangeクラスのプロパティが取得できませんでした。
(シート上でクリックしてもセルが選択できない)
 

    With ThisWorkbook.Worksheets("リソース").Range("A1").CurrentRegion
        If .Rows.Count > 1 Then
            '旧データクリア
            .AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=gMyDate
            If .Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
                .Offset(1).ClearContents
            End If
        End If

 
上記のようにしてエラーを回避しました。
 
回答ありがとうございました。