2016-11-29 4 views
0

VBAコーディングには新しく、仕事中のプロジェクトではすぐにVBAを自分で教えなければなりませんでした。できるだけ頻繁に.selectコマンドを使用しないようにするため、いくつかのコードを書き直そうとしています。問題は、ある範囲を変数として定義し、それを設定しようとしていることです。最初にシートを選択せず​​に範囲変数を設定することはできません

Dim SearchRng As Range 

Set SearchRng = Sheets("Employee Data").Range("B9", Range("B9").End(xlDown).End(xlToRight)) 

アクティブシートのコードのこのビットが実行されたときに、「従業員データ」シートではないと私は常に取得「実行時エラー 『1004』:アプリケーション定義またはオブジェクト定義のエラーを」。

「従業員データ」シートを最初に選択してから範囲を設定すると、コードが機能することがわかりました。すなわち

Dim SearchRng As Range 

Worksheets("Employee Data").Select 
Set SearchRng = Range("B9",Range("B9").End(xlDown).End(xlToRight)) 

これは、.selectコマンドを回避しようとする目的を無効にします。

コードの最初のビットは機能しませんが、2番目のコードは機能しない理由を誰でも説明できますか。

この問題を解決するために必要な追加情報を教えてください(私はVBAの初心者で何が必要なのか分かりません)。

+0

定義しようとしている範囲は何ですか? 「B9」からどこまで?どのセルが 'Range(" B9 ")かEnd(xlDown).End(xlToRight)'であると仮定しますか?私の答えの下のコードはエラーなしで実行されます(あなたが望む範囲についてはわかりません) –

+0

ありがとう。私が言及している範囲は基本的に "従業員データ"シートに格納されているデータベースです。 B9は左上のセルで、データベース全体を選択したいので、.Endコマンドを使用します。範囲は、検索できるように定義することを意図しています。 –

+0

下のコードをテストしましたか?あなたは必要な結果を得ましたか? –

答えて

2

わからないRangeあなたはこの行で定義しようとしていることを知っています: Range("B9", Range("B9").End(xlDown).End(xlToRight))

以下のコードは、Rangeと定義したい場合はエラーなしで実行され、Select「従業員データ」シートが最初に必要はありません。

Option Explicit 

Sub DefineRange() 

Dim SearchRng As Range 

With Sheets("Employee Data") 
    Set SearchRng = .Range(.Range("B9"), .Range("B9").End(xlDown).End(xlToRight)) 
End With 

' for debug purposes 
Debug.Print SearchRng.Address 

End Sub 
0

私はあなたの意図は、あなたのシートに以下のコード従業員データRange("B9").End(xlDown).End(xlToRight)を参照することですが、あなたのコードがActiveSheetを参照していることを前提としています。 これは次のコードで表示されますDebug.Print Range("B9").End(xlDown).End(xlToRight).Parent.Nameそのような場合、Shaiのように参照する必要があります。

関連する問題