2016-06-23 6 views
0

ダッシュボードページのセルD15に表示されている部門に基づいてデータを入力する正しい場所にユーザーを誘導する動的なボタンを作成しようとしています。私は文字列がSetコマンドを必要としないことを知っていますが、私はそれで間違っているのか分かりません。Setを使用すると、オブジェクトにエラーが発生します。セットを使用しない場合ブロック変数でエラーが発生しない

Sub GPS1() 
    Dim Dashboard As Worksheet 
    Set Dashboard = ThisWorkbook.Worksheets("Dashboard") 
Dim Func1 As String 
    'Set does not belong here Func1 = Dashboard.Range("D15") 
Dim OpenJobsCalculations As Worksheet 
    Set OpenJobsCalculations = ThisWorkbook.Worksheets("Open Jobs Calculations") 


    OpenJobsCalculations.Range("B:B").Find(Func1).Select 



End Sub 
+0

'Dashboard.Range(" D15 ")'の後に '.Value'を入れてみましたか? –

+1

'OpenJobsCalculations.Range(" B:B ")。Find(Func1).Select'は、一致しないので何も返しません。変数を範囲変数に設定し、変数が選択されていない場合はテストします。 –

+0

@ScottCranerしました。どちらの方法でも同じエラーが発生します。 – TonyP

答えて

2

私は、単一列の検索に一致機能を使用したいです。それは(検索よりもわずかに速いですTHISページ)によると、単一列の検索用:

Sub GPS1() 
    Dim Dashboard As Worksheet 
    Set Dashboard = ThisWorkbook.Worksheets("Dashboard") 

    Dim Func1 As String 
    Func1 = Dashboard.Range("D15").Value 

    Dim OpenJobsCalculations As Worksheet 
    Set OpenJobsCalculations = ThisWorkbook.Worksheets("Open Jobs Calculations") 

    Dim mtch 
    'find match 
    mtch = Application.Match(Func1, OpenJobsCalculations.Range("B:B"),0) 
    'If no match was found mtch will be an error. 
    'we now test whether it is an error or not. 
    If IsError(mtch) Then 
     MsgBox "No Match Found" 
    Else 
     OpenJobsCalculations.Range("B" & mtch).Select 
    End If 
End Sub 
+0

申し訳ありません、別の編集です。ページを更新するようにしてください。@TonyP –

+0

コードを実行する前に[ジョブを開く計算]ページを選択しても、別のページが選択されている場合には気付きました。そのページを最初にアクティブにするために行を追加する必要がありますか? – TonyP

+0

.selectのすぐ上にある "OpenJobsCalculations.Activate"を追加したところ、正しく動作しました。 – TonyP

0

Dashboard.Range("D15")が範囲ですが、私はそれはあなたがそのセルの値をしたい取る...あなたはRangeオブジェクトのプロパティで.Valueそれを指定する必要があります。

Func1 = Dashboard.Range("D15").Value

は、この情報がお役に立てば幸い!

+0

これはエラーを解決しません。 – TonyP

+1

'Range'変数を' String'変数に代入すると、その範囲のデフォルトプロパティを暗黙的に文字列にキャストします。私は暗黙の変換を避け、デフォルトのプロパティに頼るのがはるかにクリーンなコードであることに同意しますが、それを実行してもエラーは発生しません。 –

2

これらのWorksheetオブジェクトの参照は不要です。 プロジェクトエクスプローラます(Ctrl + R)での「ダッシュボード」シートを選択し、その性質を立ち上げ、およびDashboardSheetのように、意味のあるものにその(name)プロパティを設定するF4を打ちます。 「オープン・ジョブズのため

MsgBox DashboardSheet.Range("A1").Value 

同上:

この「コードネームは」このように、そのワークシートを表します(無料!)グローバルスコープオブジェクト変数を参照するために、コードでどこでも使用することができます計算」シート - OpenJobsCalcSheetのようなものにその(name)プロパティを設定し、あなたがこれを行うことができます。

Dim result As Range 
Set result = OpenJobsCalcSheet.Range("B:B").Find("SomeStringValue") 

If result Is Not Nothing Then result.Select 

Find呼び出しの結果はNothingすることができますどのように注意してください -を呼び出しますon Nothingは、実行時エラー91 "オブジェクト参照またはブロック変数が設定されていない"を返すので、返されたRangeオブジェクトがNothingかどうかを最初にチェックする必要があります。

今、"SomeStringValue"があなたのコメントアウトされた文字列変数ですので、完全なコードは次のようになります。

Dim func1 As String 
func1 = DashboardSheet.Range("D15").Value 

Dim result As Range 
Set result = OpenJobsCalcSheet.Range("B:B").Find(func1) 

If result Is Not Nothing Then 
    result.Select 
Else 
    MsgBox "Woopsie!" 
End If 
+0

私はこのオプションが好きです。私の問題は、CTRL + Rは何もしないということです。それに到達する別の方法はありますか? – TonyP

+0

[Rubberduck](http://www.rubberduckvba.com)で* Project Explorer *(表示>プロジェクトエクスプローラ)のVBEのデフォルトのホットキーです。コードエクスプローラ*が表示されます。これはほぼ同じですが、例外的なモジュールメンバーにドリルダウンし、モジュールを仮想フォルダに再編成することができます。 –

2

あなたは、非アクティブシート上のセルを選択することはできません。使用:

Set OpenJobsCalculations = ThisWorkbook.Worksheets("Open Jobs Calculations") 
OpenJobsCalculations.Select 
関連する問題