2016-05-18 21 views
2

.Findに基づいて範囲を指定しようとしていますが、その範囲を自分の変数として定義して、変数を別の関数に入力できます。コードを実行すると、型の不一致エラーが発生します。ダイナミックレンジの名前を付けて変数に変換する

Sub Faked() 
Dim r As Range 
Cells.Find(What:="EE status", After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False).Activate 
    Range(Selection, Selection.End(xlDown)).Name = "Win" 
Set r = ("Win") 


End Sub 
+2

試してみてください 'set r = range(" Win ")' – findwindow

+2

@findwindow Dudeあなたはこれらのいくつかにお答えしたいと思います。私たちはあなたが質問を編集できるように2000年以上にあなたを得る必要があります。 –

+0

ブリリアント。それは私のエラーメッセージを取り除いた。私がrの上にマウスを置いてコードがそれをピックアップしたかどうかを見ると、名前や何も表示されません。変数を使用する以外にも、それが機能しているかどうかを確認する別の方法はありますか? – TonyP

答えて

6

スコットがそう言っているからです。これでコードを交換するか、あなたはディルクのようなクールだ場合、

Set r = [Win] 
+0

笑これは4 upvotesの価値がないです。つまり、[this](http://stackoverflow.com/questions/34028430/deleting-via-autofilter-takes-too-long)は、同じ数の票しか得ておらず、はるかに印象的です。編集:また、それをした人は私にコメントを残しましたが、私はそれをキャッチする前にそれを削除しました... – findwindow

+2

かっこいい 'set r = [Win]'を見てください:P –

+0

LOL私はそれをdownvoteしたいですか?あなたがそれでOKならない限り、私はそれをしません... – UnEscapedCharacter

5

rが正しく範囲を拾った場合、1が

for each c in r 
    debug.print c 
next 

編集を行うことができますテストするにはSet r = range("Win")

をお試しください:

Dim r As Range 
Cells.Find(What:="EE status", After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False).Activate 
Set r = Range(Selection, Selection.End(xlDown)) 
r.Name = "Win" 

説明:

SETコマンドは、rangeオブジェクトのnameプロパティでは使用できません。最初にオブジェクトに範囲選択が設定されている必要があります。オブジェクトのプロパティを使用して値を割り当てることができます(この場合はNameプロパティ)。

希望に役立ちます!

+0

これも動作します。 – findwindow

+2

「rngMyEmployeeStatus」などのように、わかりやすい名前を付けて、コード内のすべてのオブジェクト変数を追跡するのを忘れないでください。 ;) – UnEscapedCharacter

関連する問題