2013-04-18 13 views
5

テキストボックスの内容をworkbookから別のものにコピーしようとしています。最初のworkbookのセル値を2番目にコピーするのに問題はありませんが、テキストボックスをコピーしようとするとobject requiredというエラーが発生します。このmacroは、コピーしたいデータを含むワークブックから実行されています。 Excel 2007を使用してください:Excel VBA実行時エラー '424':オブジェクトTextBoxをコピーしようとするときに必要

Sub UploadData() 
    Dim xlo As New Excel.Application 
    Dim xlw As New Excel.Workbook 
    Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") 
    xlo.Worksheets(1).Cells(2, 1) = Range("d4").Value 'Copy cell content (this works fine) 
    xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 'This gives me the object required error 
    xlw.Save 
    xlw.Close 
    Set xlo = Nothing 
    Set xlw = Nothing 
End Sub 

ありがとうございました。

+0

でこれを置き換えますか? ActiveWorkbook/ActiveSheetがxlwでないかどうか確認できますか?このような場合は、別のドキュメントを開く前にアクティブなドキュメントのオブジェクトを設定するだけです。 – dnLL

+0

これを試す '... = activesheet.TextBox1.Object.value'または' .Text'プロパティが最後にも働くはずです –

+0

いずれかのソリューションで「オブジェクトはこのプロパティまたはメソッドをサポートしていません」というメッセージが表示されるdnLL& KazJaw –

答えて

4

マクロの問題は、あなたの目的地(あなたのコードサンプルでxlwワークブック開けたら、それはActiveWorkbook対象として設定されていることであるとをTextBox1が存在しないため、エラーが発生します具体的にはワークブックです。この問題を解決するには、他のオブジェクトを開く前に、実際のワークブックに参照オブジェクトを定義します。

Sub UploadData() 
    Dim xlo As New Excel.Application 
    Dim xlw As New Excel.Workbook 
    Dim myWb as Excel.Workbook 

    Set myWb = ActiveWorkbook 
    Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") 
    xlo.Worksheets(1).Cells(2, 1) = myWb.ActiveSheet.Range("d4").Value 
    xlo.Worksheets(1).Cells(2, 2) = myWb.ActiveSheet.TextBox1.Text 

    xlw.Save 
    xlw.Close 
    Set xlo = Nothing 
    Set xlw = Nothing 
End Sub 

ご希望の場合は、アクティブとしてあなたの主なワークブックを戻すためにmyWb.Activateを使用することができます。また、ワークシートオブジェクトで実行すると機能します。 1つまたは別のものを使用することは、あなたが何をしたいか(主に複数のシートなどがある場合)によって異なります。

1

TextBox1はVBAモジュールとそれに関連するシートにスコープしていますが、Rangeは「アクティブシート」にスコープしています。

EDIT

ワークブックからテキストボックスを引っ張ってGetObject機能を使用することができるかもしれように見えます。

+0

textbox1の有効範囲をどのように設定できますか?私はActiveSheet.TextBox1を使用することができるとは思わない –

+0

これはコメントではなく、回答として投稿されているはずです。 – dnLL

+0

@dnLLなぜですか?それは答えであり、コメントや質問ではありません。あなたの答えほど徹底的ではありませんが、それは[定義上の]答えです(http://meta.stackexchange.com/questions/118582/what-is-an-acceptable-answer)。 –

0

問題は、あなたがここで使用されていないいくつかの他の場所で定義されたテキストボックスを持っている。このラインで

xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 

です。このテキストボックスがxlwで定義されている間、Excelは現在のシート内のテキストボックスオブジェクトを見つけることができません。

したがって、あなたは完全なApplication.ActiveWorkbook.ActiveSheet.TextBox1で試してみました

xlo.Worksheets(1).Cells(2, 2) = worksheets("xlw").TextBox1.Text 
関連する問題