Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10225 / 13644 ツリー ←次へ | 前へ→

【23023】シートのコピーがうまく出来ません。 hiro kun 05/3/10(木) 9:08 質問[未読]
【23030】Re:シートのコピーがうまく出来ません。 G-Luck 05/3/10(木) 13:18 発言[未読]
【23031】Re:シートのコピーがうまく出来ません。 hiro kun 05/3/10(木) 14:32 お礼[未読]

【23023】シートのコピーがうまく出来ません。
質問  hiro kun  - 05/3/10(木) 9:08 -

引用なし
パスワード
   はじめまして。VBA初心者です。
過去ログを検索して見てやっているのですがうまく出来ないのでお助けください。
したい事はA.xlsにB.xls C.xlsの全てのシートをコピーしたいのです。
1.コピーされるエクセルはエクセル名も一定でなくシート数も一定ではありません。
2.コピーしたシートにS1.S2みたいにコピー順にシート名を付けたいと思ってます。
下記のものを作ってみました。
Function GETFF()

  On Error Resume Next
  
  GETFF = Application.GetOpenFilename(FileFilter:="Excel;Csv ファイル (*.xls;*.csv), *.xls;*.csv", Title:="対象ファイルを選んで下さい")

End Function

Sub S()
Dim filem, filem_2
Dim shtnm, SN, sht As String
Dim a%, b%, c%, d%, e%, f%, g%, h%, i%, j%, k%, l%, n%


'確認メッセージ
clicked = MsgBox(PROMPT:="シートをコピーします。", Buttons:=1 + 16, Title:="シートのコピー")
If clicked = 2 Then Exit Sub

'処理を隠す
Application.StatusBar = "処理実行中"
Application.ScreenUpdating = False

 
'加工するブックを開く
On Error Resume Next
 filem = GETFF()
 Workbooks.Open Filename:=filem
 filem_2 = activebook
If Err.Number = 1004 Then
  MsgBox "ファイルが指定されてません。"
  
End If
 On Error GoTo 0
 
bkname_1 = ActiveWorkbook.Name
shtnm = ActiveSheet.Name
Windows("A.xls").Activate
Sheets("MENU").Select
Range("B100").Value = bkname
Range("B101").Value = shtnm
bkname = ActiveWorkbook.Name

'シートのコピーを始める
Windows(bkname_1).Activate
For i = 1 to Worksheets.count
Sheets(i).Copy Before:=Workbooks(bkname).Sheets(1)
next i
Windows(bkname_1).Close
'ステータスバーの表示解除
  Application.StatusBar = False
  
End Sub

コピーは出来ますが同じシートをシート数だけコピーしてしまいます。
宜しくお願いします。

【23030】Re:シートのコピーがうまく出来ません。
発言  G-Luck  - 05/3/10(木) 13:18 -

引用なし
パスワード
   ▼hiro kun さん:

>Windows(bkname_1).Activate
>For i = 1 to Worksheets.count
>Sheets(i).Copy Before:=Workbooks(bkname).Sheets(1)
>next i

Sheets(i).Copy
と書いてしまうと、アクティブブックが対象になります。
それで、上記Copyを実行するとアクティブブックはWorkbooks(bkname)に移ってしまいます。

よって、
i=2以降は
Workbooks(bkname)のみでの処理になってしまいますので、今追加したものをコピーすることになってしまします。

ので、

With Windows(bkname_1)
For i = 1 to .Worksheets.count
.Sheets(i).Copy Before:=Workbooks(bkname).Sheets(1)
next i
End With

とか

For i = 1 to Windows(bkname_1).Worksheets.count
Windows(bkname_1).Sheets(i).Copy Before:=Workbooks(bkname).Sheets(1)
next i
End With

でどうでしょう?

【23031】Re:シートのコピーがうまく出来ません。
お礼  hiro kun  - 05/3/10(木) 14:32 -

引用なし
パスワード
   ▼G-Luck さん:
返答ありがとうございます。
下記の構文を使わせて頂きました。

>With Windows(bkname_1)
>For i = 1 to .Worksheets.count
>.Sheets(i).Copy Before:=Workbooks(bkname).Sheets(1)
>next i
>End With

シートの名前はコピー後に変更する事にしました。
また、分からないことがありましたら書込みさせて頂きます。

10225 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free