[[20170330083137]] 『リンク貼り付けができなくなりました』(ヨッシー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『リンク貼り付けができなくなりました』(ヨッシー)

出席簿と連絡票の「出欠の記録」をリンクして貼りつくように以下のマクロを教えてもらいました。新しい出席簿を作ったので、まず連絡票のブック内の「出席簿」シートにリンクして貼りつけました。リンクするのは確認済みです。ただ、以下のマクロを実行すると、止まってしまい、デバックすると
「 ActiveSheet.Paste Link:=True」のところにマーカーが引かれます。何か問題があるのでしょうか。

Option Explicit
Sub リンク貼り付けマクロ(コピーセル As Range, 貼り付けセル As Range)

    コピーセル.Worksheet.Select
    コピーセル.Select
    Selection.Copy
    貼り付けセル.Worksheet.Select
    貼り付けセル.Select
    ActiveSheet.Paste Link:=True

 End Sub
Sub test9()
    Dim データWS As Worksheet
    Dim 氏名WS As Worksheet
    Dim 書式WS As Worksheet
    Dim m As Long, n As Long, i As Long, j As Long
    Dim 貼付開始行 As Long

    Set データWS = Worksheets("出席簿")
    Set 書式WS = Worksheets("書式")

    貼付開始行 = 書式WS.Cells.Find(What:="出欠の記録").Row + 4

    Application.ScreenUpdating = False

    For m = 4 To データWS.Cells(Rows.Count, 2).End(xlUp).Row

       Set 氏名WS = Worksheets(データWS.Cells(m, 2).Value)
       n = 3

       For i = 貼付開始行 To 貼付開始行 + 4 Step 2

           For j = 9 To 39 Step 6
               Call リンク貼り付けマクロ(データWS.Cells(m, n), 氏名WS.Cells(i, j))
               n = n + 1
           Next
       Next
    Next

 End Sub

< 使用 Excel:Excel2016、使用 OS:Windows8 >


 回答ではありません。

 元トピを

[[20161230111936]] 『リンクして貼り付けられるようにしたい』(ヨッシー)

 このようにリンクしておくほうが回答者にとってはわかりやすいです。

 ところでエラーになった時に出ていたエラー番号とエラーメッセージの内容はどんなものでしたか?

(β) 2017/03/30(木) 09:04


すいませんでした。
「実行時エラー 1004」「データを貼り付けできません」という表示が出ます。
(ヨッシー) 2017/03/30(木) 09:12

 前トピには参加していなかったので、コードを読んでシートを想像で作り上げて、このまま実行しましたが
 結果が正しいかどうかは別にして、問題なく各氏名シートにリンク貼り付けができています。
 (XL2016は持っていないので xl2013 での検証ですが)

 メッセージがシート保護に関するものなら・・とちょっと期待(??)したんですが、そうじゃないんですね。

 『データを貼り付けできません』を、そのまま検索語にしてネット検索しますといろいろでてきます。
 中には、この学校内の過去トピもでてきますね。

 それらの中に、あてはまるものがないか探してみられてはいかがでしょう。

( β) 2017/03/30(木) 10:19


ありがとうございます。検索して方法を探してみます。
(ヨッシー) 2017/03/30(木) 10:26

>ActiveSheet.Paste Link:=True

これはリンク貼り付けを実行している部分です。

リンク貼り付けができているセルはありますか。
それとも、ひとつもリンク貼り付けできていない
つまり、最初の生徒の最初のデータでエラーとなるのでしょうか。

(マナ) 2017/03/30(木) 23:19


マナさんお久しぶりです。申し訳ありません、すこし助けてください。
昨日、学校でいろいろためしてみたり、マナさんから教えてもらったマクロについて、最初から学び直して、マクロの意味を確かめてみてたんですが、学校のパソコンではどうしても一つもリンク貼り付けができませんでした。半ばあきらめていたのですが、今日の朝、家のパソコンでやってみたら、きちんと全員分貼り付けができました。(まだ、1つの学年しかためしてみないのですが・・・)。
職場に行って、もう一度職場のパソコンで試してみようと思いますが、何か原因は考えられますか?
ちなみに家のパソコンはWindows10、Excel2016で、職場のパソコンはWindows8.1、Excel2013です。
(ヨッシー) 2017/03/31(金) 03:02

職場のパソコンでは、やはりうまくいきません。1つも貼り付けができません。ただ、どうもきちんとリンクされていないようです。職場の共通フォルダにいくつかの「出席簿」ファイルがあったので、整理してもう一度チャレンジしてみます。
(ヨッシー) 2017/03/31(金) 08:40

基の出席簿と連絡票にリンクさせて貼り付けた「出席簿」はきちんとリンクしています。
ですが、マクロを実行するとリンクして貼りつけさせたい「出欠表」には1つもデータが入りません。
家でもう一度試してみようと思います。
(ヨッシー) 2017/03/31(金) 13:13

家で試してみましたが、きちんと問題なくデータをすべて貼り付けることができました。
職場のパソコンに問題があるのでしょうか?
(ヨッシー) 2017/03/31(金) 15:54

ActiveSheet.Paste Link:=Trueの前にDoEventsを入れてみたらどうでしょ

Sub リンク貼り付けマクロ(コピーセル As Range, 貼り付けセル As Range)

    コピーセル.Worksheet.Select
    コピーセル.Select
    Selection.Copy
    貼り付けセル.Worksheet.Select
    貼り付けセル.Select
  DoEvents
    ActiveSheet.Paste Link:=True

 End Sub

(名無し) 2017/03/31(金) 15:58


もしくは

>>Call リンク貼り付けマクロ(データWS.Cells(m, n), 氏名WS.Cells(i, j))

のところを

Worksheets("書式").Cells(i, j) = "=" & Worksheets("出席簿").Name & "!" & Cells(m, n).Address

に変えるとかでもいいような(たぶんもっといい書き方があるハズ)。貼り付け先の書式が標準であればですが。

これならリンク貼り付けマクロ自体いりませんし、クリップボードを使わないので件のエラーは起きません。
エラーの原因はクリップボードへの格納が完了する前にpaste処理に入ってしまうためであると推測します。
PCスペックによって動作したりしなかったりは起きると思います。
(名無し) 2017/03/31(金) 16:38


名無しさんありがとうございます。「DoEvents」の方は、家のパソコンで試して、スムーズに入ります。
月曜日に職場で試してみます。
ただ、Csllリンク貼り付けマクロ自体いらないほうは、動きませんでした。「貼り付け先の書式が標準であれば」ではなかったからですか?
(ヨッシー) 2017/04/02(日) 07:03

「DoEvents」を入れても、職場のパソコンでは動きませんでした。
どうしたものでしょうか?
(ヨッシー) 2017/04/03(月) 10:08

遅くなり申した

>>貼り付け先の書式が標準であれば」ではなかったからですか?

何も記入されなかったのですか?エラーですか?どのようにダメだったのか教えて下さい。
記入自体はできているのならですが、文字列とかになってるとダメです。座標ではなくそういう文字として扱われるかと思います。どうせ転記するわけですから、全部標準にしては?

>>「DoEvents」を入れても、職場のパソコンでは動きませんでした。

入れても 「実行時エラー 1004」「データを貼り付けできません」が出るということですか?
うーん、DoEventsを複数入れてみるか、以下のような形でSleepも入れてみるかですかねぇ・・・

DoEvents

        Sleep 75
DoEvents

現時点ではどのように動かないのかわかりませんのでこんなもんしか言えませぬ
(名無し) 2017/04/03(月) 10:53


>>Worksheets("書式").Cells(i, j) = "=" & Worksheets("出席簿").Name & "!" & Cells(m, n).Address

あ、これ動かんわ

氏名WS.Cells(i, j) = "=" & データWS.Name & "!" & Cells(m, n).Address

こうですかね
普段setが煩わしくてsheet名の変数立ててごり押しなんかしてるからこういうことに・・・反省
(名無し) 2017/04/03(月) 11:10


名無しさんありがとうございます。
「氏名WS.Cells(i, j) = "=" & データWS.Name & "!" & Cells(m, n).Address 」を入れて、家で実行してみると、1秒で全部正確にはいりました。職場でためしてみます。
(ヨッシー) 2017/04/04(火) 04:17

名無しさん、職場のパソコンでも見事にデータが1秒ではいりました。
これで、仕事が大幅に軽減されます。ありがとうございました。
もし、時間があれば、今回の
「氏名WS.Cells(i, j) = "=" & データWS.Name & "!" & Cells(m, n).Address 」の意味を
教えていただけないでしょうか。
(ヨッシー) 2017/04/04(火) 08:27

うまくいったようで何よりです

もともとのコードがこれですよね
Call リンク貼り付けマクロ(データWS.Cells(m, n), 氏名WS.Cells(i, j))

渡す先がこれだった
リンク貼り付けマクロ(コピーセル As Range, 貼り付けセル As Range)

つまり
氏名WS.Cells(i, j) :貼り付け先
データWS.Cells(m, n):コピー元
氏名WS.Cells(i, j) = データWS.Cells(m, n):しかしこれだとリンク貼り付けではなく貼り付けになる

→氏名WS.Cells(i, j)に「=○○!××」で入れてやる必要がある
○○:シート名
××:セル名(A1とかG4とか)

データWSのシート名を吐かせる場合
データWS.Name

Cells(m, n)からA1とかG4という形にする場合
Cells(m, n).Address

「=○○!××」の形に繋げる
"=" & データWS.Name & "!" & Cells(m, n).Address

繋げたのを氏名WS.Cells(i, j)に入れる
氏名WS.Cells(i, j) = "=" & データWS.Name & "!" & Cells(m, n).Address

こんな感じですかねー他にもっといいやり方ありそうだけれどようわからんので
.Nameとか.Addressについてはぐぐったほうがわかりやすい情報がでるかと思うのであまり言及しませんがご容赦下さい。

(名無し) 2017/04/04(火) 09:47


名無しさん、大変ありがとうございました。
(ヨッシー) 2017/04/04(火) 17:51

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.