2017-04-18 6 views
1

別のシートからシートをアクティブにしようとしていて、Excelのメッセージボックスにセルの値を表示しようとしていますが、実行するたびにサブスクリプトがあります範囲の。セルから値を取り出すことができませんVBA

マイコード:

Sub Home() 
Dim tbValue As String 
tbValue = Worksheets("Home").TextBox1.Value 

Worksheets(tbValue).Activate 

MsgBox Cells(7,1).Value 


End Sub 

誰もが範囲外の理由添字任意のアイデアがありますか?ありがとう

+1

実際に 'Textbox1 'に入力したシート名はシートとして存在しますか? TextBox1の値を 'TRIM'でラップして最後に余分な空白を取り除くと、' Trim(Worksheets( "Home")。TextBox1.Value) ' –

+0

ええ、それはシートをハードコーディングしてみました名前はtbValueを使用する代わりに、同じエラー、実行時エラー9、範囲外の添え字です。 – decemberrobot

+0

私は 'TextBox1'はそれほどアクセスできないとは思わない。シェイプ( "TextBox1")... ' – Slai

答えて

0

コードは実行可能に見えますが、上にWith/ End withOption Explicitを試してみてください。さらに、.Cells(7,1)はエラーなのかもしれません。とにかく、もう一度試してください。

Option Explicit 

Sub Home() 
    Dim tbValue As String 
    tbValue = trim(Worksheets("Home").TextBox1.text) 

    with worksheets(tbValue) 
     MsgBox .Cells(7,1) 
    end with 

End Sub 

Trimためのアイデアコメントでも良いものです。 もう一度進むには、TextBox1.Textを使用してください。ここをクリックしてください - Distinction between using .text and .value in VBA Access

+0

今、msgboxは表示されますが、何も表示されません。シート内のセルの値を取得できないようです。 – decemberrobot

+1

何が入っていますか?これはA7です。 – Vityata

+0

'Option Explict'と' With'は添え字を範囲外に解決する方法は? –

2

ワークシート名が見つからないため、添え字が範囲外です。 Worksheet(...)の回線コードで発生することがあります。

  1. Worksheets("Home")あなたのアクティブなブックは、あなたのホームワークシートと1ではないかもしれないので、添字エラーを返すことがあり、

  2. Worksheets(tbValue)が同じ第1の理由で失敗し、tbValueが正確なシート名と一致しない可能性があるためです。

最初のソリューションは、正しいブックがアクティブであることを確認することができる。

Sub Home() 
    Dim tbValue As String 
    Workbooks("your_workbook_name.xlsm").Activate 
    tbValue = ThisWorkbook.Worksheets("Home").TextBox1.Value 
    Worksheets(tbValue).Activate 
    MsgBox Cells(7,1).Value 
End Sub 

よりよい解決策をシートや書籍アクティベーションを回避し、完全修飾オブジェクトを使用することです。マクロは、ホームのシートと同じブック内にある場合:

Sub Home() 
    Dim tbValue As String 
    tbValue = ThisWorkbook.Worksheets("Home").TextBox1.Value 
    MsgBox ThisWorkbook.Worksheets(tbValue).Cells(7,1) 
End Sub 

また、ワークシート、おそらくSheet1(IDEでこの名前を確認することができます)に割り当てられた名前VBAでWorksheets("Home")を置き換えることができます。

+0

私は通常、以下のようにハードコードされたwbとwsを設定します: 'Dim wb As Workbookをワークシートとして設定するwb = Application.Workbooks(" workbookname.xlsm ")ws = wb.Worksheets(" Sheetname ")を設定すると、 'Msgbox ws.Cells(7,1)' – Luuklag

+2

しかし、なぜオブジェクトを既に作成しているときに新しい変数を作成するのですか? 'ThisWorkbook'は以前に定義されたもので、あなたが変更する可能性のあるファイル名に依存しません! –

+0

複数のブックが開いているときの複雑さを避けるためです。 – Luuklag

関連する問題