|
▼acec さん:
こんにちは
手打ちタイプのミスだということは了解しました。
さて仕切り直して。
マクロを実行するには、様々な方法があります。
で、acecさんがやろうとしておられるのは、シートにフォームツールのボタンを配置して
そこにマクロを登録して、クリックしたときに実行させたいということですよね。
一方、Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
といったものは、まず記述の場所が、通常のマクロを記述する「標準モジュール」ではなく、
シートモジュールという特殊なところです。で、その動きも特殊で、マクロを実行するのではなく
シート上で、指定した動きがあったときに、自動的に実行されます。
BeforeDoubleClick は、シート上の任意のセルをダブルクリックした時に、自動的に動きます。
で、アップされたコードでやっているのは、ダブルクリックされたセルの行のA列〜C列の値を
見積シートのD1:F1に転記します。たとえばクリックされたセルが10行目なら、A10:C10の値を転記します。
再度アップされたコードがシートモジュール書かれていれば、エラーなく、目的が実行されるはずです。
もし、エラーになるということであれば、エラーで止まった時に黄色く光っているコードがどこなのか
そのときにどんなメッセージが出たかを教えてください。
で、もし、そうじゃなく、ボタンに登録して、クリックして動かしたいんだということであれば
まず、コードは「標準モジュール」に書きます。ただし、その形が
Sub Micro3()
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Sheets("見積").Range("D1:F1").Value = Target.EntireRow.Range("A1:C1").Value
End Sub
End Sub
だったとしますと、具合が悪いですね。これだと「デバッグ」以前に、コンパイルエラーで
コンパイラーから「しかられます」
Sub から始まる1つのマクロは、必要なコードをかい多後、End Sub で終わる必要があります。
↑のコードだと、Sub Micro3() に対して、End Sub が出てくる前に、Subから始まる別のマクロ
Private Sub Worksheet_BeforeDoubleClickが記述されていますので、
Sub Micro3()にたいするEnd SUbがないよということになります。
もし、acecさんのやろうとしておられることが
・あるセルを選択する。
・その状態でボタンをクリックする。
・クリックされたら選択されている行のA列〜C列の値を見積シートのD1:F1に転記させたい。
こういうことであれば、
Sub Sample()
Sheets("見積").Range("D1:F1").Value = ActiveCell.EntireRow.Range("A1:C1").Value
End Sub
これを「標準モジュール」に記述して、ボタンに登録してください。
さて、
>それから、素人考えなのですが、
>Sheets("見積").Range("D1:F1").Value = Target.EntireRow.Range("A1:C1").Value
>だと、常にA1:C1のデータが取得されませんか?
確かにこの書き方は、「ちょっとマニアック?」です。
通常、A1といえば、シートの一番左上のA1という場所だと認識しています。
本来は、ある領域.Range("A1") というのが正しい書き方で、これは、ある領域の左上隅から数えて
最初の列、最初の行という意味なんです。単純に Range("A1") と書きますと
標準モジュールで言えば、アクティブシートのセル全体.Range("A1") という意味になります。
だから、いわゆる A1 を指すことになります。
で、上のケースでは、ある領域というのが、Target.EntireRow つまり、それが10行目だとしたら
10行目のセルが属する、その行全体 ということです。つまり10行目全体ですね。
その10行目全体の、A1 というと、A10 のことですし、C1 というと C10 のことになります。
(Aはその領域の1番目の列、Cは、その領域の3番目の列、1 はその領域の1番目の行)
|
|