|
|
| Excel VBA Macro ・ コピー ・ FAQ |
|
コピー貼り付けのマクロでエラーが出るが?
|
|
|
|
Question 54.1 |
Excel VBA Borad (掲示板)より |
 |
 |
|
|
初めまして。教えてください。
ユーザーフォームを作りテキストボックスの中に文字を入力して入力ボタンを押すと、シート1に作った表の中にデータが入る様に作りました。それと同時に、シート2をDB用として、ユーザーフォームで入力したデータをシート1に入力されると同時に、シート2に同じデータを転記させたいと考えています。
このホームページの 「エディットボックスで別シート経由でDBに入力」 を参考に考えているのですが、シート1にはきちんとデータが入力されるのですが、シート2にはどうも上手くデータが転記されません。どうしたら上手く行くのでしょうか?そもそも出来ないものなのでしょうか?
考え方をかえて、終了ボタンを押した時に転記される様にと思い作ってみたのですが、やはり上手く行きません。
誰かご教授下さい。コードは次のとおりです。宜しくお願い致します。
Sheets("Sheet2").Select
I = Range("A1").End(xlDown).Row
Sheets("入力").Select
Range("A2:C2").Copy
Sheets("Sheet2").Select
Range(Cells(I + 1, 1), Cells(I + 1, 1)).PasteSpecial _
Paste:=xlValues
|
|
|
TextBox1、2、3の値を Sheet1に格納しているのに、コピーしたシートは 入力 になっていて不一致と思います。
まずは、Sheets("入力").Select を Sheets("Sheet1").Select に修正してから実行してみて、結果をお知らせください。
|
|
|
longさん、レスありがとうございます。
ご指摘頂いた箇所をさっそく直して実行してみたところ、やはりダメでした。アプリケーション定義又はオブジェクト定義のエラーですとなりました。
エラーになる箇所は
Range(Cells(I + 1, 1), Cells(I + 1, 1)).PasteSpecial_
Paste:=xlValues
です。何がおかしいのでしょうか?
|
|
|
「アプリケーション定義又はオブジェクト定義のエラー」が出る原因は、Sheet2にデータがまったく入っていないか、1行目だけにしか入っていないからかと思います。
なぜかというと、I = Range("A1").End(xlDown).Row で取得した I の値は 65536 つまり、ワークシートの最下行になります。
従って、貼り付けするための Cells(I + 1, 1) が A65537セルとなり、ありえないセルを使うことになるので、このエラーが出るかと思います。
回避策としては、I = Range("A65536").End(xlUp).Row に修正すればよろしいかと思います。
なお、掲示板に書き込まれた Range(Cells(I + 1, 1), Cells(I + 1, 1)).PasteSpecial_ の末尾の l と _ の間にスペースが無いようですが、本当はあるのに掲示板へ書き込むときに漏れたものと理解しています。
また、ワークシートの最下行を意味する 65536 というのは Excel97以上の場合です。もしもExcel95ならば 16384 になりますから念のため。
|
|
|
|
| |
|
|