[[20130617170935]] 『SPECIALCELLSが正常に働かない』(x11eUser) ページの最後に飛ぶ

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

 

『SPECIALCELLSが正常に働かない』(x11eUser)

 テスト用に下記のプログラムを作りました。
 TESTCALLを実行すると期待通りの答えが出てきますが、
 TESTRUNを任意のセルに「=TESTRUN(B27:B36)」とセットして
 計算を実行したところ、Function TESTが実行されますが、
 このとき、SPECIALCELLSによって絞込みが行われません。
 どこに問題があるのかお手上げの状態になっています。
 どなたかお教え頂けないでしょうか。よろしくお願いします。

 EXCEL2003、WindowsXPで動かしています。

'------------------------------------------------
Sub TESTCALL()
Dim xRange As Range
Dim Ans

    Set xRange = Range("B27:B36")
    Ans = TEST(xRange)
End Sub

'------------------------------------------------
Function TESTRUN(xParam)
Dim xRange As Range
Dim Ans

    Set xRange = xParam
    Ans = TEST(xRange)
End Function
'--------------------------------------------------------------------
'   呼ばれるプログラム
'--------------------------------------------------------------------
Function TEST(xParams)
Dim xErrorMSG As String
Dim xObject
Dim xRange As Range
    On Error Resume Next
'    Set xObject = Selection
    Set xObject = xParams
    If TypeName(xObject) = "Range" Then
        With xObject
            Set xRange = .SpecialCells(xlCellTypeAllFormatConditions)
            Call ErrMSG2(xRange, Err.Number, "AllFormatConditions")
            Set xRange = .SpecialCells(xlCellTypeAllValidation)
            Call ErrMSG2(xRange, Err.Number, "AllValidation")
            Set xRange = .SpecialCells(xlCellTypeBlanks)
            Call ErrMSG2(xRange, Err.Number, "Blanks")
            Set xRange = .SpecialCells(xlCellTypeComments)
            Call ErrMSG2(xRange, Err.Number, "Comments")
        '---------------------
            Set xRange = .SpecialCells(xlCellTypeConstants, xlErrors)
            Call ErrMSG2(xRange, Err.Number, "Constants, xlErrors")
            Set xRange = .SpecialCells(xlCellTypeConstants, xlNumbers)
            Call ErrMSG2(xRange, Err.Number, "Constants, xlNumbers")
            Set xRange = .SpecialCells(xlCellTypeConstants, xlLogical)
            Call ErrMSG2(xRange, Err.Number, "Constants, xlLogical")
            Set xRange = .SpecialCells(xlCellTypeConstants, xlTextValues)
            Call ErrMSG2(xRange, Err.Number, "Constants, xlTextValues")
        '---------------------
            Set xRange = .SpecialCells(xlCellTypeFormulas, xlErrors)
            Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlErrors")
            Set xRange = .SpecialCells(xlCellTypeFormulas, xlNumbers)
            Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlNumbers")
            Set xRange = .SpecialCells(xlCellTypeFormulas, xlLogical)
            Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlLogical")
            Set xRange = .SpecialCells(xlCellTypeFormulas, xlTextValues)
            Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlTextValues")
        '---------------------
            Set xRange = .SpecialCells(xlCellTypeLastCell)
            Call ErrMSG2(xRange, Err.Number, "LastCell")
            Set xRange = .SpecialCells(xlCellTypeSameFormatConditions)
            Call ErrMSG2(xRange, Err.Number, "SameFormatConditions")
            Set xRange = .SpecialCells(xlCellTypeSameValidation)
            Call ErrMSG2(xRange, Err.Number, "SameValidation")
            Set xRange = .SpecialCells(xlCellTypeVisible)
            Call ErrMSG2(xRange, Err.Number, "Visible")
        End With
    End If
    Exit Function
NotFound:
    On Error Resume Next
End Function

'------------------------------------------------------------
Sub ErrMSG2(xRange, xErrNo, xOder)

    If xErrNo = 0 Then
        MsgBox xOder & "…OK Special Cell's Count=" & xRange.Cells.Count
    Else
        MsgBox xOder & "…NG Err=" & xErrNo
        Err.Clear
    End If
End Sub


 具体的に、どのSpecialCellsで絞り込みが行われなかったのかな?
 基本的には、該当のものがあれば領域取得ができるし、なければエラーになるよね。

 ところで、該当のものがない場合でも、左辺のオブジェクトはNothingにはならないということは認識してるかな?
 左辺に対しては【何も行われない】ので、直前に成功した時のものになっているよ。

 あと、これは、Functionプロシジャ仕立てになっていて、だから Ans = TEST(xRange) というコードになっているわけだけど
 実際は、SpecialCellsの機能を確認する、プロシジャなんだよね。(テーマとは関係ないけど)

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


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