[[20170104115718]] 『オブジェクト 定義エラーについて』(真由美) ページの最後に飛ぶ

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

 

『オブジェクト 定義エラーについて』(真由美)

いつも大変お世話になっております
教えて頂けたら幸いです

下記の様に書いてみましたが

 .Range("A2", Range("A2").End(xlDown)).Select
この部分でオブジェクト エラーが出てしまいます
どのようにすればいいのでしょうか
宜しくお願いいたします

ユーザーフォーム コマンドボタンで処理をしたいです

  With Worksheets("LIST")
 .Range("A2", Range("A2").End(xlDown)).Select
  .Sort.SortFields.Clear
  .Sort.SortFields.Add Key:=Range("A2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    End With

    With Worksheets("LIST").Sort
        .SetRange Range("A2", Range("C2").End(xlDown))
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

< 使用 Excel:Excel2010、使用 OS:Windows7 >


二つ目のRangeにも、頭に.(ドット)が必要?
他の所も見直してみて。

(γ) 2017/01/04(水) 12:40


γ様

有難う御座います

.Range("A2", .Range("A2").End(xlDown)).Select
このように書き換えました所
RangeクラスのSelectメゾット失敗しました
というメッセージが出てきました

装飾の問題と思いますが 下記の様にSelectで固めると
エラーが出ないのが よく解らない所です

Sub リスト並び替え()
'

   Sheets("LIST").Select
    Range("A2", Range("A2").End(xlDown)).Select
    ActiveWorkbook.Worksheets("LIST").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("LIST").Sort.SortFields.Add Key:=Range("A2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("LIST").Sort
        .SetRange Range("A2", Range("C2").End(xlDown))
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
(真由美) 2017/01/04(水) 14:12

 標準モジュールやワークブックモジュールにプログラムを置く場合、親が指定されていないRangeやCellはその時アクティブな
 シート上の物だと判断される。

 また、RangeやCellをSelectする場合、まずそれが存在するシートがSelectされてアクティブになっていないとならない。

 そもそも
 >  With Worksheets("LIST")
 >.Range("A2", Range("A2").End(xlDown)).Select
 の部分、Selectする必要があるのだろうか?

 なお、最初に挙げた条件によりシートがアクティブになっていない場合、すべてのRangeに親の指定が必要になる。

(ねむねむ) 2017/01/04(水) 14:23


 ねむねむさんのご回答のとおりかと思います。

 参考までに、こんな書き方もあります。

 Sub test2()
     Dim ws As Worksheet
     Dim rng As Range

     Set ws = Worksheets("LIST")
     Set rng = ws.Range("A2", ws.Range("A2").End(xlDown))

     With ws.Sort
         .SortFields.Clear
         .SortFields.Add Key:=rng.Cells(1, 1), _
                              SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                              xlSortTextAsNumbers
         .SetRange rng
         .Header = xlNo
         .MatchCase = False
         .Orientation = xlTopToBottom
         .SortMethod = xlPinYin
         .Apply
     End With
 End Sub

 # Key指定のところが一般性を欠くかもしれませんが。

(γ) 2017/01/04(水) 14:35


ねむねむ様

色々有難う御座います
勉強になりました

又何かありましたら
宜しくお願いいたします

γ様
色々有難う御座います
参考コードまで  本当に助かります
又 勉強になります

有難う御座いました
(真由美) 2017/01/04(水) 14:55


コメント返信:

[ 一覧(最新更新順) ]


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