2016-06-29 27 views
0

ランタイムエラー1004が発生しました。オブジェクト '_Worksheet'のメソッド 'Range'が失敗しました。実行時エラー1004 - オブジェクトの範囲に失敗しました - VBA 2013

このコードは、このプロジェクトの草案では以前から働いていましたが、新しいプロジェクトファイルにインポートすると、これが表示されます。名前付き範囲やワークシート名は以前のバージョンから変更されていません。助けてください!

Private Sub UserForm_Initialize() 
'Set Variables to populate combobox 
Dim rngProjects As Range 
Dim ws1 As Worksheet 

Set ws1 = Worksheets("Validation") 

For Each rngProjects In ws1.Range("Projects") 

Me.cboProject.AddItem rngProjects.Value 
Me.cboAccount.AddItem rngProjects.Value 

Next rngProjects 

'Add static data for combobox 
Me.cboTransactionType.AddItem "Income" 
Me.cboTransactionType.AddItem "Expense" 
+0

どの行でエラーが表示されますか? – Kyle

+0

それは私に行を与えていない、デバッグするオプションを与えていない。 http://prntscr.com/bmrx1z –

+0

Strange。あなたは完全にワークブックの予選を試みましたか?だから 'WorkbookName.Worksheets(" Validation ")'。あなたが言うように、「Projects」という名前の範囲が存在する場合、それが問題を引き起こす可能性のある唯一のものです。 – Kyle

答えて

0

これは、シート名変更(時々、先頭または末尾のスペースは認識できない)、または変更の名前付き範囲の名前のいずれかのように私には思えます。さらに、指定された範囲が別のシート(検証シート以外)に移動された可能性もあります。

上記のすべてをチェックし、コメントに示唆されている明示的な参照を使用すると、問題を見つけることができるはずです。あなたのコードにいくつかの追加チェックがあります。試してみて、これがうまくいくか、あなたに問題があるかどうかを知らせてください。

Option Explicit 

Private Sub UserForm_Initialize() 
'Set Variables to populate combobox 
Dim rngProjects As Range 
Dim ws1 As Worksheet 
Dim bolFound As Boolean 
Dim nm As Name 

For Each ws1 In ThisWorkbook.Worksheets 
    If ws1.Name = "Validation" Then bolFound = True 
Next ws1 
If bolFound = False Then 
    MsgBox "Required sheet not found." 
    Exit Sub 
End If 

Set ws1 = Worksheets("Validation") 

For Each rngProjects In ws1.Range(ws1.Cells(8, 1), ws1.Cells(ws1.Rows.Count, 1).End(xlUp)) 
    frmAddTransaction.cboProject.AddItem rngProjects.Value 
    frmAddTransaction.cboAccount.AddItem rngProjects.Value 
Next rngProjects 

'Add static data for combobox 
frmAddTransaction.cboTransactionType.AddItem "Income" 
frmAddTransaction.cboTransactionType.AddItem "Expense" 

End Sub 

以下にコメントしたように、間接的な名前の範囲は削除されました。代わりに、シートがコード内で直接参照されるようになりました。このように、名前付き範囲の変更はコードに影響を与えません。代わりに、8行のオフセットはVBAに書き込まれ、少しより安全です。

+0

奇妙な、実行中にエラーメッセージが表示されるhttp://prntscr.com/bmsaz4名前のついた範囲http:// prnt.sc/bmsahb申し訳ありませんが、私が何かを逃してしまった場合、私の心は不安定になります。 –

+0

明らかに、キャリッジリターンは軽度のヒックアップを引き起こしました。だから私はそれを削除した(とにかく純粋に視覚的なので)。調整されたコードを見て、今すぐ実行できるかどうかを確認してください。 – Ralph

+0

デバッグを使用して、コードをws1 - ワークシート( "検証")の設定をすべて実行しても問題ありません。次に、名前付き範囲チェックに行きます...ブロックを1回、エラーなしで2回目に実行します。同じエラーが表示されます:nm.RefersToRange.Worksheet.Name <> "Validation" then –

関連する問題