「覚え間違い」を教えてください!

マルチディスプレイで2本のEXCELを起動しています。この間のデータ移動(シートのコピー&貼り付け)をマクロを使って行いたいが、相手側のEXCELを認識してくれません。どの様なマクロを書けばいいのか教えて下さい。ちなみに「マクロの記録」でも認識しません。

A 回答 (4件)

No.3です。


sample4,sample5,sample6で
>Set excel1 = New Excel.Application
>Set excel2 = New Excel.Application
の後に
excel1.Visible = True
excel2.Visible = True
を入れてください。


>プログラムは、スポーツ吹矢の大会(50~80名参加)で得点結果と順位をプロジェクターで表示するものです。
>プライマリーディスプレイは、得点の入力と順位を計算します。
>セカンダリーディスプレイは、プロジェクターでの表示用で指定した時間間隔で画面をスクロールさせます。
適当なシートにコントロールツールボックスのコマンドボタン(CommandButton1,CommandButton2,CommandButton3)を作って、そのシートのvba部に以下をコピーしてください。
Dim excel As New excel.Application
Dim displaySheet As Worksheet

'Excel起動
Private Sub CommandButton1_Click()
If excel.Workbooks.Count <> 0 Then
MsgBox "すでに起動しています"
Exit Sub
End If
'表示用Excelの起動と位置指定
With excel
.Top = 0
.Left = 600
.Width = 500
.Height = 500
.Visible = True
.Workbooks.Add
Set displaySheet = .ActiveWorkbook.ActiveSheet
End With
ThisWorkbook.ActiveSheet.Select 'フォーカスを戻しておく
End Sub

'Excel終了
Private Sub CommandButton2_Click()
If excel.Workbooks.Count = 0 Then
MsgBox "起動していません"
Exit Sub
End If
displaySheet.Parent.Close False
excel.Quit
End Sub

'データ転送(A1:C3範囲)
Private Sub CommandButton3_Click()
If excel.Workbooks.Count = 0 Then
MsgBox "起動していません"
Exit Sub
End If
displaySheet.Range("A1:C3").Value = Range("A1:C3").Value
End Sub
    • good
    • 0
この回答へのお礼

有難うございました。うまく表示され、マルチディスプレイもうまく行きました。これで何とかソフトが完成しそうです。本当にありがとうございました。

お礼日時:2009/09/02 14:26

どんなプログラムでしょうか?


たとえ別プロセスでもコピーできると思います。
どうしてもできないのがsample4ですが、後は相手の指定が不完全な場合だと思います。
マルチディスプレイはたぶん関係無いとは思います。

同じプロセス間で書式も含めてコピー。
Sub sample1()
Dim book1 As Workbook
Dim book2 As Workbook
Set book1 = Workbooks.Add
Set book2 = Workbooks.Add
book1.Sheets(1).Range("A1").Value = "123"
book1.Sheets(1).Range("A1").Copy book2.Sheets(1).Range("A1")
MsgBox book2.Sheets(1).Range("A1").Value
book1.Close False
book2.Close False
End Sub

同じプロセス間で値をコピー。
Sub sample2()
Dim book1 As Workbook
Dim book2 As Workbook
Set book1 = Workbooks.Add
Set book2 = Workbooks.Add
book1.Sheets(1).Range("A1").Value = "123"
book2.Sheets(1).Range("A1").Value = book1.Sheets(1).Range("A1").Value
MsgBox book2.Sheets(1).Range("A1").Value
book1.Close False
book2.Close False
End Sub

同じプロセス間でクリップボード経由でコピー。
Sub sample3()
Dim book1 As Workbook
Dim book2 As Workbook
Set book1 = Workbooks.Add
Set book2 = Workbooks.Add
book1.Sheets(1).Range("A1").Value = "123"
book1.Sheets(1).Range("A1").Copy
book2.Sheets(1).Paste Destination:=Range("A1")
MsgBox book2.Sheets(1).Range("A1").Value
book1.Close False
book2.Close False
End Sub

別プロセス間で書式も含めてコピー。
Sub sample4()
Dim excel1 As Excel.Application
Dim excel2 As Excel.Application
Dim book1 As Workbook
Dim book2 As Workbook
Set excel1 = New Excel.Application
Set excel2 = New Excel.Application
Set book1 = excel1.Workbooks.Add
Set book2 = excel2.Workbooks.Add
book1.Sheets(1).Range("A1").Value = "123"
book1.Sheets(1).Range("A1").Copy book2.Sheets(1).Range("A1")
MsgBox book2.Sheets(1).Range("A1").Value
book1.Close False
book2.Close False
End Sub

別プロセス間で値をコピー。
Sub sample5()
Dim excel1 As Excel.Application
Dim excel2 As Excel.Application
Dim book1 As Workbook
Dim book2 As Workbook
Set excel1 = New Excel.Application
Set excel2 = New Excel.Application
Set book1 = excel1.Workbooks.Add
Set book2 = excel2.Workbooks.Add
book1.Sheets(1).Range("A1").Value = "123"
book2.Sheets(1).Range("A1").Value = book1.Sheets(1).Range("A1").Value
MsgBox book2.Sheets(1).Range("A1").Value
book1.Close False
book2.Close False
End Sub

別プロセス間でクリップボード経由でコピー。
Sub sample6()
Dim excel1 As Excel.Application
Dim excel2 As Excel.Application
Dim book1 As Workbook
Dim book2 As Workbook
Set excel1 = New Excel.Application
Set excel2 = New Excel.Application
Set book1 = excel1.Workbooks.Add
Set book2 = excel2.Workbooks.Add
book1.Sheets(1).Range("A1").Value = "123"
book1.Sheets(1).Range("A1").Copy
book2.Sheets(1).Paste Destination:=book2.Sheets(1).Range("A1")
MsgBox book2.Sheets(1).Range("A1").Value
book1.Close False
book2.Close False
End Sub

この回答への補足

プログラムは、スポーツ吹矢の大会(50~80名参加)で得点結果と順位をプロジェクターで表示するものです。
プライマリーディスプレイは、得点の入力と順位を計算します。
セカンダリーディスプレイは、プロジェクターでの表示用で指定した時間間隔で画面をスクロールさせます。
この得点結果と順位を手作業でのコピー&貼り付けはできますが、できるだけ速やかに、かつ間違いの無い様にするためボタン操作で行いたい。
尚、ご回答頂いた sample6 を試してみたのですがメッセージボックスは表示しますが、book1,book2が表示されません。なぜでしょうか?
VBには不慣れのためご迷惑をおかけしますがよろしくお願いします。

補足日時:2009/09/02 09:50
    • good
    • 0

すでにでていますが別プロセスで立ち上げてるのではないですか?


例えばスタートからエクセルを2回起動すると各々別モノ(プロセス)になります。
VBEを立ち上げて「プロジェクト」の部分を見れば分かると思いますがそこに一緒にいるブック同士じゃないと扱えないと思います。

この回答への補足

同じプロセスで2つのブックを立ち上げるとマルチディスプレイがうまく働きません。どうせればいいのでしょうか。

補足日時:2009/09/02 08:26
    • good
    • 0

マルチディスプレイでなくても、プロセスの異なるExcelに対しては


相互に操作できません。
    • good
    • 0
この回答へのお礼

有難うございます。プロセスが別だったとの意識はありませんでした。試してみます。

お礼日時:2009/09/02 08:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A