[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『book名の指定について』(tomo)
Workbooks名を指定せずにコピーする方法がありませんか?
都度book名が、違うので・・・マクロエラーが起こる
同時に開いているbookは対象は2つです。
よろしくお願いします。
Sub 共通掛率()
Dim sh As Worksheet
Set sh = Workbooks("内訳.xlsm").Worksheets("表紙")
With Workbooks("計算式_一般.xlsm").Worksheets("Sheet1")
.Range("P38").copy sh.Range("AK66:AK67")
.Range("P39").copy sh.Range("AK70:AK71")
.Range("P40").copy sh.Range("AK74:AK75")
End With
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
コピー先、コピー元、両方のブック名が変わるのですか?
シート名は固定ですか?
このマクロは、どこに記述しているのですか?
(マナ) 2019/06/10(月) 18:58
(tomo) 2019/06/10(月) 19:14
表紙というシートは、コピー先にしかないですか。
Sheet1というシートは、コピー元にしかないですか。
>>このマクロは、どこに記述しているのですか?
>標準Moduleです。
どのブックの標準Moduleですか。
コピー元、コピー先、その他?
(マナ) 2019/06/10(月) 19:25
で、最初に
ActiveWorkbook.name<>Thisworkbook.nameであれば
windows(2).activate
を実行し
Worksheets("Sheet1")
をコピー元シートとしてはどうですか。
(マナ) 2019/06/10(月) 19:52
無条件で、最初に、
Thisworkbook.activate
windows(2),activate
でもよいかもしれません。
(マナ) 2019/06/10(月) 19:57
Dim sh As Worksheet
ThisWorkbook.Activate
Windows (2), Activate’★ココでエラー
.Range("P38").copy sh.Range("AK66:AK67")
.Range("P39").copy sh.Range("AK70:AK71")
.Range("P40").copy sh.Range("AK74:AK75")
(tomo) 2019/06/10(月) 20:07
Windows (2), Activate ↓ Windows (2).Activate
(マナ) 2019/06/10(月) 20:31
.Range("P38").copy sh.Range("AK66:AK67")
.Range("P39").copy sh.Range("AK70:AK71")
.Range("P40").copy sh.Range("AK74:AK75")
(tomo) 2019/06/10(月) 20:38
(マナ) 2019/06/10(月) 20:40
(tomo) 2019/06/10(月) 21:01
(マナ) 2019/06/10(月) 21:07
With Worksheets("Sheet1")
.Range("P38").copy sh.Range("AK66:AK67")★
.Range("P39").copy sh.Range("AK70:AK71")
.Range("P40").copy sh.Range("AK74:AK75")
End With
(tomo) 2019/06/11(火) 01:33
With Worksheets("Sheet1")
.Range("P38").copy Range("AK66:AK67")
.Range("P39").copy Range("AK70:AK71")
.Range("P40").copy Range("AK74:AK75")
End With
(tomo) 2019/06/11(火) 01:44
コピー先が指定されていませんが、
理解できていますか。
(マナ) 2019/06/11(火) 19:15
(マナ) 2019/06/11(火) 21:46
(マナ) 2019/06/12(水) 19:09
ブック名では、指定できないので、
そのかわりに、
コピー先は、自ブック(Thisworkbook)
コピー元は、activeなブック(最前面のブック)
としています。
(マナ) 2019/06/12(水) 19:13
2019/06/12(水) 01:30の
マクロで一応希望通りの動きなのですが、不安なため確認です。
手順をもう一度説明すると
1.コピー先bookからマクロ実行ぃます。 .Worksheets("表紙") このbook
2.コピー元 .Worksheets("Sheet1") です。このbook
違いますか?
>ActiveWorkbook.name<>Thisworkbook.nameであれば
>windows(2).activate
>を実行し
>Worksheets("Sheet1")
>をコピー元シートとしてはどうですか。
このあたりの説明が 理解できていません?
(tomo) 2019/06/12(水) 20:08
でなく、
↓のように、ブック名を省略すると
Worksheets("Sheet1")
アクティブなブックのSheet1という意味になります。
一番手前に表示されているブックのSheet1です。
なので、Sheet1のあるコピー元ブックはアクティブにしないとだめです。
ですが、仮にマクロ開始時に、アクティブでなかったとしても
マクロの中、強制的にアクティブにしてあげればよいわけです。
つまり、2番めのブックをアクティブにするということで
それが、
windows(2).activate
です。
でも、もし、最初からコピー元がアクティブなら
windows(2).activate
を実行すると、
逆に、コピー先がアクティブになってしまいます。
なので、こう書きました。
>ActiveWorkbook.name<>Thisworkbook.nameであれば
>windows(2).activate
>を実行し
でも、あとで考えてみたら
どっちがアクティブであったとしても
Thisworkbook.activate
windows(2),activate
を実行すると、
まずはThisworkbookがアクティブになり
(実行前からアクティブでも変化しないだけ)
つぎの、windows(2),activateでコピー元がアクティブになるはず。
ということです。
>コピー先bookからマクロ実行ぃます。
この意味が、表紙に、マクロを登録したボタンがあるとかなら
絶対に、最初はThisworkbookがアクティブなので、
Thisworkbook.activate
は、必要ありません。
(マナ) 2019/06/12(水) 20:55
>ActiveWorkbook.name=Thisworkbook.nameであれば
に訂正されてますよ。
それなら理解できますか?
(チオチモリン) 2019/06/12(水) 21:18
(tomo) 2019/06/13(木) 01:40
・同時に開いているbookは2つ ・コピー先となるブックにマクロを記述している
という前提が崩れないなら、それぞれのブックは↓でも特定できますよ。
Sub ブック取得() Dim 複写元 As Workbook Dim 貼付先 As Workbook
Set 貼付先 = ThisWorkbook
For Each 複写元 In Workbooks If 複写元.Name <> 貼付先.Name Then Exit For Next
Debug.Print "貼付先のブックは" & 貼付先.Name & "です" Debug.Print "複写元のブックは" & 複写元.Name & "です"
End Sub
(もこな2) 2019/06/13(木) 03:18
貼付先のブックは内訳.xlsmです
複写元のブックはPERSONAL.XLSBです
となりますが、今回対象は、もう一つ開いている
計算式_一般.xlsm こちらが2つ目なのですが
マクロ指定の仕方ですか?
copyPasteはどのように絡んできますか
(tomo) 2019/06/13(木) 04:32
Sub ブック取得() Dim 複写元 As Workbook Dim 貼付先 As Workbook Set 貼付先 = ThisWorkbook
For Each 複写元 In Workbooks If 複写元.Name <> 貼付先.Name And StrConv(複写元.Name, vbUpperCase) <> "PERSONAL.XLSB" Then Exit For Next
Debug.Print "貼付先のブックは" & 貼付先.Name & "です" Debug.Print "複写元のブックは" & 複写元.Name & "です"
End Sub
(もこな2) 2019/06/13(木) 19:42
最初に >同時に開いているbookは対象は2つです。 とありますが、それは >内訳.xlsm >計算式_一般.xlsm じゃなかったんですか? 〜〜〜〜〜〜〜〜〜〜〜〜 それはそれとして PERSONAL.XLSBのワークシートが表示されているんですね。 〜〜〜〜〜〜〜〜〜〜〜〜 シンプルに 計算式_一般.xlsm がアクティブな状態で 「ブック取得」を走らせれば良さげに思います。 Sub ブック取得() Dim 複写元 As Workbook:Set 複写元 = ActiveWorkBook Dim 貼付先 As Workbook:Set 貼付先 = ThisWorkbook とか 〜〜〜〜〜〜〜〜〜〜〜〜 >都度book名が、違うので・・・マクロエラーが起こる >Workbooks("計算式_一般.xlsm").Worksheets("Sheet1") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ の部分を ActiveWorkBook.Worksheets("Sheet1") に置き換えられます。 (チオチモリン) 2019/06/13(木) 23:22
しかしながら、取得できたとしても私のマクロ知識では次の展開が読めません。
ネット上で、いろいろググってみたのですが「ブック間コピペ」など
同じような事案がなくとても、難しく思います
>計算式_一般.xlsm がアクティブな状態で 「ブック取得」を走らせれば良さげに思います。
マクロ登録ボタンは、内訳.xlsmに配置してあります。内訳.xlsm側から操作
乏しい知識の中で以下のようなマクロで一応は希望する動き(コピペ)するのですが
回答の内容を踏まえ、修正点教授いただけると助かります。
計算式_一般.xlsm.sheet1(シート名)
内訳.xlsm.表紙(シート名)
Sub test()
Dim sh As Worksheet
Windows(2).Activate
Set sh = ThisWorkbook.Worksheets("表紙")
With Worksheets("Sheet1")
.Range("P38").copy sh.Range("AK66:AK67")
.Range("P39").copy sh.Range("AK70:AK71")
.Range("P40").copy sh.Range("AK74:AK75")
End With
ThisWorkbook.Activate
End Sub
(tomo) 2019/06/14(金) 01:12
Sub 共通掛率() Dim 貼付先 As Worksheet Dim 複写元 As Worksheet Dim W1 As Workbook Set 貼付先 = ThisWorkbook.Worksheets("表紙") For Each W1 In Workbooks If W1.Name <> 貼付先.Parent.Name Then If W1.Windows(1).Visible = True Then If MsgBox("複写元は【" & W1.Name & "】ですか?", vbYesNo) = vbYes Then Set 複写元 = W1.Worksheets("Sheet1") End If End If Next If 複写元 Is Nothing Then MsgBox "複写元が指定されませんでした。", vbCritical: Exit Sub With 複写元 .Range("P38").Copy 貼付先.Range("AK66:AK67") .Range("P39").Copy 貼付先.Range("AK70:AK71") .Range("P40").Copy 貼付先.Range("AK74:AK75") End With End Sub (チオチモリン) 2019/06/14(金) 02:10
For Each〜next文という手順を踏まないと、book(Sheet)の指定ができないと言うことなんですか?
Set 複写元 = W1.Worksheets("Sheet1")
with ・・・ のように1行で表したのでは×なんでしょうね
貼付先.Parent.Nameとか、あまり目にしたいマクロを使うんですね
とても、手に負えませんね・・・
(tomo) 2019/06/14(金) 17:35
>For Each〜next文という手順を踏まないと、book(Sheet)の指定ができないと言うことなんですか? できないか?という直球にこたえれば、そんなことはないです。
>with ・・・ のように1行で表したのでは×なんでしょうね いいですよ。
>貼付先.Parent.Nameとか、あまり目にしたいマクロを使うんですね 手におえないですか? 別の書き方もできますよ。 自分が理解できる書き方が良いと思います。 でも、理解しようとすれば、視野が広がるかもしれませんよ。(今は無理でも)
ある意味、お好きなようにです。 10人いれば、10通りの書き方があるといってもいいです。 そのうち、自分のスタイルもできます。
〜〜〜〜〜〜〜〜〜 ※ 2019/06/14(金) 01:12 のコードで希望通りの結果になるなら、それでよいと思います。 希望通りにならないなら、その時に原因を追究して修正すればよいです。
(チオチモリン) 2019/06/14(金) 18:32
(tomo) 2019/06/15(土) 01:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.