[[20080409171741]] 『VBAを使った別ファイルからのコピー』(比良) ページの最後に飛ぶ

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

 

『VBAを使った別ファイルからのコピー』(比良)
同一フォルダの中に,A,B,Cのファイルがあります。これらのファイル名は固定です。
そして,そのフォルダの中に,「○○」というファイルをコピーします。このファイル名は変動します。
そして,VBAを使って,「○○」ファイルのシートを全選択して,コピーして,Aファイルのシートに貼り付けたいのですが,どうするのでしょうか。


 Aファイル→○○ファイル
 Bファイル→○○ファイル
 Cファイル→○○ファイル
 どれが正解でしょうか?

 Aファイル→○○ファイル ならば Aファイルにシートの貼り付けは不要ですよね?

 なさりたい事がよくわかりません...

 (1or8)


○○ファイルのシート1を全選択してコピーして,Aファイルに取り込んで,Aファイルのシート1に貼り付けたいのですが。

(比良)


 >A,B,Cのファイルがあります
 >そのフォルダの中に,「○○」というファイルをコピーします
 A,B,Cのどのブックを○○ブックとしてコピーするのですか?
 Aブック→○○ブック ならば Aブックにシートの貼り付けは不要ですよね?

 相変わらず、なさりたい事がよくわかりませんが、自動記録で目的のコードは得られませんか?

 (1or8)

 すみません,ややこしくて。
 同一フォルダ内にAファイルがあって,そこへ新しく○○ファイルを保存します。
 ○○の方だけファイル名は変動します。
 VBAを使って,その○○ファイルのシート1を全選択してコピーして,Aファイルに取り込んで,
 Aファイルのシート1に貼り付けたいのですが。

 (比良)

 @Aブックのシート1のタブを右クリック
 A移動またはコピーで新しいブックにコピー
 この手順で自動記録をしてみては?
 (1or8)

 少し分かってきました。
 Aファイル→○○ファイルにコピーじゃなくて
 ○○ファイル→Aファイルにコピーしたいんですけど。
 それで,○○は変動するんですけど,○○はどうやって特定すればいいんでしょうか。
 たぶん,「A以外」という感じで特定すると思うのですが。

 (比良)

 このVBAはどのブックに書くのですか?

 Aファイルですか? それとも全然別のブックですか?

 このプログラムを走らせるとき、A,B,C,○○ブックは閉じているのですか?

 <追記>
  > たぶん,「A以外」という感じで特定すると思うのですが。

 「A以外」だと、B.xls も C.xls も ○○.xlsと間違われますよ。
  フォルダ内は、全部で「4」ファイルまでですよね?
 そうじゃないと、○○.xlsを特定できませんが。

 (半平太)


 Aファイルに書いて,Aファイルを開いた上,実行するのですが。
 簡単に説明するため,Aと○○とで説明して,「A以外」としましたが
 正確にはご指摘のとおり,「A,B,C以外」というふうに特定したいのですが。

 (比良)

こんなのでどうですか?

 Sub CopyToFileA()

 Dim aa
 Dim fso As Object

 Set fso = CreateObject("Scripting.FileSystemObject")

 Application.ScreenUpdating = False

     For Each aa In fso.GetFolder(ThisWorkbook.Path & "\").Files

         If aa.Name <> ThisWorkbook.Name And aa.Name <> "B.xls" And aa.Name <> "C.xls" Then
              Workbooks.Open Filename:=ThisWorkbook.Path & "\" & aa.Name
              Workbooks(aa.Name).Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).Cells
              Workbooks(aa.Name).Close
              Exit For
         End If
     Next

 Application.ScreenUpdating = True

 Set fso = Nothing

 End Sub

 (半平太)

 みなさん,ありがとうございます。
 私の思っていたとおり,ぴったりです。
 それで,もう1つ問題がありまして。
 ○○ファイルの方にリンクがかかっていて,貼り付けるときに,「リンクの編集〜」
 という表示が出てしまうんですけど。

 それで,○○ファイルのシート1を全選択してコピーしたときに,リンクを解除して
 それから貼り付けるというふうにしたいのですけど。
 どうなるのでしょうか。

 (比良)

 > ○○ファイルの方にリンクがかかっていて,貼り付けるときに,「リンクの編集〜」
 > という表示が出てしまうんですけど。

 ちょっとよく分からないですが、下の2箇所の変更でワークしないでしょうか?

 Workbooks.Open Filename:=ThisWorkbook.Path & "\" & aa.Name, UpdateLinks:=2 '← 引数追加

 Workbooks(aa.Name).Close False '← 引数追加

 (半平太)

 うまくいきませんでした。
 ○○ファイルのリンクを下記のような感じで,まずリンク解除して
 それから上記のようなコードでコピーして貼り付けすればうまくいくと思うのですが。
 それをどうやってつなげるのか分からないので教えてください。

 Sub ()

    ○○ファイルを検索

  ActiveWorkbook.BreakLink Name:="○○.xls", Type:= _

        xlExcelLinks

 End Sub

 あともう少しなので,よろしくお願いします。

 こんなことですかね?
 注:UpdateLinks:=0 としています。
 「0」を入れるとどうなるかはヘルプに書いてありませんが、結果オーライの様なので使用しています。

 Sub CopyToFileA()
 Dim aa, bb, astrLinks
 Dim fso As Object

 Set fso = CreateObject("Scripting.FileSystemObject")

 Application.ScreenUpdating = False
     For Each aa In fso.GetFolder(ThisWorkbook.Path & "\").Files
         If aa.Name <> ThisWorkbook.Name And aa.Name <> "B.xls" And aa.Name <> "C.xls" Then
              Workbooks.Open Filename:=ThisWorkbook.Path & "\" & aa.Name, UpdateLinks:=0

              astrLinks = Workbooks(aa.Name).LinkSources(Type:=xlLinkTypeExcelLinks)

              If Not IsEmpty(astrLinks) Then
                 For Each bb In astrLinks
                     Workbooks(aa.Name).BreakLink Name:=bb, Type:=xlLinkTypeExcelLinks
                 Next
              End If

              Workbooks(aa.Name).Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).Cells
              Workbooks(aa.Name).Close False
              Exit For
         End If
     Next
 Application.ScreenUpdating = True

 Set fso = Nothing
 End Sub

 (半平太)

 すごい,思ったとおりのができました。
 どうもありがとうございました。

 (比良)

 すみません,また教えてください。
 上のコードで
 If aa.Name <> ThisWorkbook.Name And aa.Name <> "B.xls" And aa.Name <> "C.xls" Then
 の部分。
 And aa.Name <> "B.xls" And aa.Name <> "C.xls" And aa.Name <> "D.xls" と30個ほど並べたいので

 下に改行して

 And aa.Name <> "B.xls" 
 And aa.Name <> "C.xls"
 And aa.Name <> "D.xls"

 というふうに見やすいように並べてみたら,コンパイルエラーと出るのですが,
 これを直すことはできるのでしょうか。
 素人の質問でどうもすみません。

 (比良)


 こういうことでしょうか?
 
    If aa.Name <> ThisWorkbook.Name _
        And aa.Name <> "B.xls" _
        And aa.Name <> "C.xls" _
        And aa.Name <> "D.xls" Then
 
 (キリキ)(〃⌒o⌒)b

 分かりました。ありがとうございました。

 (比良)

コメント返信:

[ 一覧(最新更新順) ]


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