何方か、回答をお願いします。
(A.xlsのAAAシート)(B.xlsのBBBシート)この2つ間のセル値をコピーしたい
のですが(共にブック名シート名に一貫性は無しで、既に開いています。)
マクロ付.xlsに下記のマクロを書いてA.xlsのAAAシートがアクティブの時にマクロを
実行してtwwにAAAシートをセット出来たのですが、Bk1にB.xlsのBBBシートをセット出来ません。
Application.Waitで止めている間にアクティブシートを変えようとしましたが駄目
Application.Dialogs(xlDialogWorkbookUnhide).Showでも駄目でした。
何方か、マクロ実行中のアクティブシート変更方法を教えて下さい。
又、この様なブック名に一貫性が無くて既に開いている物の間のコピー等はどの様に
するのか参考になる物が有れば教えて下さい。
Sub コピー()
Dim Bk1 As Worksheet
Dim tww As Worksheet
Set tww = ActiveWorkbook.Sheets(1)
'ここが分かりません
Set Bk1 = ActiveWorkbook.Sheets(1)
'-------1個目
tww.Range("D10").Value = Bk1.Range("H9").Value
Set Bk1 = Nothing: Set tww = Nothing
End Sub
No.1
- 回答日時:
Sub try()
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name = ThisWorkbook.Name Then
MsgBox "このブックだよ " & wb.Name
Else
MsgBox "違うブックだよ " & wb.Name
End If
Next
End Sub
開いているブックのうち自Bookかそうでないかは、
こんな感じでわかるかな?
その判定結果で変数へのセットを変えてみては?
n-jun様、回答ありがとう御座います。
なるほど、全てのブックをYES,NOで判別するのですね。
今度、確認したいと思います。
No.2ベストアンサー
- 回答日時:
マクロ付.xlsの標準モジュールではなく、
ThisWorkbookのモジュールに
'=============================================================
Option Explicit
Private sht1 As Worksheet
Private WithEvents app As Application
Sub main()
If ActiveSheet.Type = xlWorksheet Then
Set app = Application
Set sht1 = Application.ActiveSheet
Application.StatusBar = "データをやり取りするシートをアクティブにしてください"
End If
End Sub
'============================================================
Private Sub app_WorkbookActivate(ByVal Wb As Workbook)
If Wb.Sheets(1).Type = xlWorksheet Then
sht1.Cells(1, 1).Value = 1
Wb.Sheets(1).Cells(2, 1).Value = sht1.Cells(1, 1).Value
Application.StatusBar = False
End If
Set app = Nothing
End Sub
として、データ交換する最初のシートをアクティブにしてThisworkbook.mainを実行してください。
次に適当なブックをアクティブにしてください。
最初にアクティブになっていたシートのA1に1が設定され、
選択したブックの最左端シートのセルA2に
最初にアクティブになっていたシートのA1の値がコピーされます。
一例です。参考にしてください。
No.3
- 回答日時:
こんばんは。
以下のようなコードを間に入れればよいと思います。
もちろん、自分のマクロのあるブックは、ThisWorkbook ですね。
Sub Test()
Dim obj As Object
Dim oBook As Workbook
On Error Resume Next
Set obj = Application.InputBox("目的先のブックのシートのセルを選択してください。", Type:=8)
If obj Is Nothing Then
Exit Sub
End If
On Error GoTo 0
If StrComp(TypeName(obj), "Range") = 0 Then
Set oBook = obj.Parent.Parent 'ここでブックオブジェクト取得
If oBook Is ThisWorkbook Then
MsgBox "それは、目的先のブックではありません。", 48
Else
MsgBox oBook.Name
End If
End If
End Sub
この回答への補足
Wendy02様もし良ければ、時間がある時で結構ですので補足回答をお願いします。
Application.InputBoxを使うとどうも初めのActivateWorkbook以外のブックを
選択出来ません。(開いているファイルは、コピー元.xls-コピー先.xls-マクロ記入.xls
等の3個です。)
後、質問には1個のセル値のみコピーをしていますが実際は複数で位置もばらばらのセルを
コピーをしています。
問題はlark_0925様の回答で解決しましたが、良ければ回答をお願いします。
No.4
- 回答日時:
こんばんは。
元のコードは、マクロのあるブックと、コピー元が一致しているという想定です。
>(開いているファイルは、コピー元.xls-コピー先.xls-マクロ記入.xls等の3個です。)
しかし、それは、ThisWorkbook を端にActiveBook に書き換えたら済むことだと思います。
>質問には1個のセル値のみコピーをしていますが実際は複数で位置もばらばらのセルをコピーをしています。
なお、これ自体は、配列に入れておけば、一括で管理できると思います。
'-------------------------------------------
Sub Test1()
Dim obj As Object
Dim oBook As Workbook
On Error Resume Next
Set obj = Application.InputBox("目的先のブックのシートのセルを選択してください。" & vbCrLf & _
"コピー元: " & ActiveWorkbook.Name, Type:=8)
If obj Is Nothing Then
Exit Sub
End If
On Error GoTo 0
If StrComp(TypeName(obj), "Range") = 0 Then
Set oBook = obj.Parent.Parent
If oBook Is ActiveWorkbook Then
MsgBox "それは、目的先のブックではありません。", 48
Else
MsgBox "コピー元: " & ActiveWorkbook.Name & vbCrLf & _
"コピー先: " & oBook.Name
End If
End If
End Sub
'以下は、二つ選択する方法です。
'以下の場合は、どちらかというとUserForm のほうが管理しやすいです。
'-------------------------------------------
Sub Test2()
Dim obj As Object
Dim oBook As Workbook
Dim dstBook As Workbook
On Error Resume Next
Set obj = Application.InputBox("コピー元のブックのシートのセルを選択してください。", Type:=8)
If obj Is Nothing Then
Exit Sub
End If
On Error GoTo 0
If StrComp(TypeName(obj), "Range") = 0 Then
Set oBook = obj.Parent.Parent 'ここでブックオブジェクト取得
If oBook Is ThisWorkbook Then
MsgBox "それは、目的先のブックではありません。", 48
End If
End If
Set obj = Application.InputBox("コピー先のブックのシートのセルを選択してください。" & vbCrLf & _
"コピー元: " & oBook.Name, Type:=8)
If obj Is Nothing Then
Exit Sub
End If
On Error GoTo 0
If StrComp(TypeName(obj), "Range") = 0 Then
Set dstBook = obj.Parent.Parent 'ここでブックオブジェクト取得
If dstBook Is ThisWorkbook Or dstBook Is oBook Then
MsgBox "それは、目的先のブックではありません。", 48
End If
End If
If MsgBox("コピー元: " & oBook.Name & vbCrLf & _
"コピー先: " & dstBook.Name & vbCrLf & _
"よろしいですか?", vbOKCancel) = vbOK Then
'コピー実行
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
【Excel VBA】シートコピー時、...
-
EXCELで別のブックから式をコピ...
-
Excelの行をコピーして貼り付け...
-
エクセルの1シートの内容を複...
-
【エクセル】プルダウン設定の...
-
Excel シートのコピーの際、ペ...
-
ワークシートを別ファイルにコ...
-
ExcelVBAで、ユーザーフォーム...
-
ExcelのVBAで、application.inp...
-
PDFファイルをコピーしてエクセ...
-
excel表のコピー時、列・行幅も...
-
ExcelのBook内のシートを一枚だ...
-
【Excel】数式をそのまま他のシ...
-
エクセルのワークシートをUSBメ...
-
【VBA】コピー&複数個所のペー...
-
EXCELファイルをコピーすると終...
-
エクセルマクロで上書きして貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
EXCELで別のブックから式をコピ...
-
【Excel】数式をそのまま他のシ...
-
【VBA】コピー&複数個所のペー...
-
Excelの行をコピーして貼り付け...
-
【エクセル】プルダウン設定の...
-
エクセルのワークシートをUSBメ...
-
Excel シートのコピーの際、ペ...
-
エクセルの1シートの内容を複...
-
エクセルVBA 1行飛ばしで転記す...
-
【Excel VBA】シートコピー時、...
-
エクセルシートを別のエクセル...
-
ExcelVBAで、ユーザーフォーム...
-
エクセルでシートを「移動また...
-
Excel シートに別のExcelシート...
-
Excel 数式の保護をしたセルを...
-
EXCEL2007でシートをコピーする...
-
シートが保護されていないのに...
おすすめ情報