Excel VBA質問箱 IV

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

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


1566 / 13645 ツリー ←次へ | 前へ→

【73466】別ブックからのコピペについて(VBA) さわ 13/1/14(月) 5:40 質問[未読]
【73468】Re:別ブックからのコピペについて(VBA) 13/1/14(月) 7:31 発言[未読]
【73484】Re:別ブックからのコピペについて(VBA) さわ 13/1/15(火) 1:20 質問[未読]
【73495】Re:別ブックからのコピペについて(VBA) さわ 13/1/16(水) 9:26 お礼[未読]

【73466】別ブックからのコピペについて(VBA)
質問  さわ  - 13/1/14(月) 5:40 -

引用なし
パスワード
   すいません。
VBAに触った事がない者なのですが、
どうしてもやりたい事があり、現在調べています。

環境はExcel2003です。

やりたいことは、
「Aのブックのシート1枚からBのブックへシートの中身を全てコピーすること」です。

AのブックとBのブックは同じパスに存在します。

Aのブックの名前はランダムなので、
こちらでGetOpenFilenameで取得したものを使います。
 →今はその方法しか知りません。
Aの一番左側にあるシートを取得(コピー)します。
最終的にAのブックを閉じます。

Bのブックの名前は固定です。
Bのコピー先シート名は固定です。

現在、訳も分からず以下ようなプログラムでとまっています。


Private Sub CommandButton1_Click()
  Dim OpenFileName As String

  OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls*")
  Workbooks.Open OpenFileName

  Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells.Copy _
  Application.Workbooks("b.xls").Worksheets("Sheets(1).Name").Cells(1, 1)
  
  Workbooks("OpenFileName").Close
End Sub


ステップインで調べていると、
「インデックスが有効範囲内ではありません。」
とでて、とまっています。

Aのブックを開いた後、コピー
Bのブックへペーストが出来ていないようです。

今、構文などが全く理解していないので、
  Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells.Copy _
  Application.Workbooks("bb.xls").Worksheets("Sheets(1).Name").Cells(1, 1)
について調べています。

よろしくお願いします。

【73468】Re:別ブックからのコピペについて(VBA)
発言    - 13/1/14(月) 7:31 -

引用なし
パスワード
   こんにちは。
調べるならそのエラーメッセージでネット検索するのが、道が開けると思います。
要は「そんな名前のブックはありませんよ」「そんな名前のシートはありませんよ」
ってことです。「そんなはずはない」と思われるでしょうが(わたしもむかし
さんざん思いました)、でもエラーに関してはいつだってエクセル君が正しいのです。
エクセル君が「ない」といえば「ない」のです。


エラーの出るコードをこんなふうに書き換えてみました。
Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells(1,1)
Application.Workbooks("b.xls"   ).Worksheets("Sheets(1).Name").Cells(1, 1)

すると違っているのはブック名の指定の部分だけとなりました。
1行目のコードだけでエラーが出たら、OpenFileNameに問題あり、1行目2行目
ともにエラーが出たら"Sheets(1).Name"にも問題ありです。

っと。上のコードをそのまま実行しちゃダメですね(笑)
Cells(1,1)がどうしたの?ってコードですから。セルの値をメッセージボックスに
返すようにして、さらに実行順も変更してみました。
Msgbox Application.Workbooks("b.xls").Worksheets("Sheets(1).Name").Cells(1, 1).Value
Msgbox Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells(1,1).Value

試してみて下さい。
上の行でエラーが出たら"Sheets(1).Name"に問題ありです。


▼さわ さん:
>すいません。
>VBAに触った事がない者なのですが、
>どうしてもやりたい事があり、現在調べています。
>
>環境はExcel2003です。
>
>やりたいことは、
>「Aのブックのシート1枚からBのブックへシートの中身を全てコピーすること」です。
>
>AのブックとBのブックは同じパスに存在します。
>
>Aのブックの名前はランダムなので、
>こちらでGetOpenFilenameで取得したものを使います。
> →今はその方法しか知りません。
>Aの一番左側にあるシートを取得(コピー)します。
>最終的にAのブックを閉じます。
>
>Bのブックの名前は固定です。
>Bのコピー先シート名は固定です。
>
>現在、訳も分からず以下ようなプログラムでとまっています。
>
>
>Private Sub CommandButton1_Click()
>  Dim OpenFileName As String
>
>  OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls*")
>  Workbooks.Open OpenFileName
>
>  Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells.Copy _
>  Application.Workbooks("b.xls").Worksheets("Sheets(1).Name").Cells(1, 1)
>  
>  Workbooks("OpenFileName").Close
>End Sub
>
>
>ステップインで調べていると、
>「インデックスが有効範囲内ではありません。」
>とでて、とまっています。
>
>Aのブックを開いた後、コピー
>Bのブックへペーストが出来ていないようです。
>
>今、構文などが全く理解していないので、
>  Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells.Copy _
>  Application.Workbooks("bb.xls").Worksheets("Sheets(1).Name").Cells(1, 1)
>について調べています。
>
>よろしくお願いします。

【73484】Re:別ブックからのコピペについて(VBA)
質問  さわ  - 13/1/15(火) 1:20 -

引用なし
パスワード
   返信ありがとうございます!

「エラーはそんなデータ存在しない」って感じのエラーだったんですね!

一個一個、調べて見ました!
佳さんが言っている
Msgbox Application.Workbooks("b.xls").Worksheets("Sheets(1).Name").Cells(1, 1).Value
Msgbox Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells(1,1).Value

をたたいて見たら、やはり同様のデータが存在しないメッセージが。

Msgboxにどう表示されるのか一個一個確認してみたら、


Msgbox OpenFileName
 →フルパス\ファイル名
  ファイル名だけ取得するはずだったので、Dir(OpenFileName)で解決

Msgbox Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells(1,1).Value
 →実は、表記が間違っていることに気づいたこの部分
  Worksheets("Sheets(1).Name") 誤
  Worksheets(Sheets(1).Name)  正

っていうことで、出来たものがこう変わりました!

  Application.Workbooks(Dir(OpenFileName)).Worksheets(Sheets(1).Name).Cells.Copy _
  Application.Workbooks("b.xls").Worksheets(Sheets(1).Name).Cells(1, 1)

だけど、
まだデータが受け取れていません。。

【73495】Re:別ブックからのコピペについて(VBA)
お礼  さわ  - 13/1/16(水) 9:26 -

引用なし
パスワード
   試行錯誤した結果、解決しました!

最終的に以下のような形でできるようになりました!
マクロを叩いているブックの指定方法が違ったんですね。

ありがとうございました。
これからエラー処理を付け足して、使わせていただきます!

Private Sub sample()
  Dim OpenFileName As String
  OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls*")
  Workbooks.Open OpenFileName
  Application.Workbooks(Dir(OpenFileName)).Worksheets(Sheets(1).Name).Cells.Copy _
  Application.ThisWorkbook.Worksheets("指定シート").Cells(1, 1)
  Workbooks(Dir(OpenFileName)).Close
End Sub


>すいません。
>VBAに触った事がない者なのですが、
>どうしてもやりたい事があり、現在調べています。
>
>環境はExcel2003です。
>
>やりたいことは、
>「Aのブックのシート1枚からBのブックへシートの中身を全てコピーすること」です。
>
>AのブックとBのブックは同じパスに存在します。
>
>Aのブックの名前はランダムなので、
>こちらでGetOpenFilenameで取得したものを使います。
> →今はその方法しか知りません。
>Aの一番左側にあるシートを取得(コピー)します。
>最終的にAのブックを閉じます。
>
>Bのブックの名前は固定です。
>Bのコピー先シート名は固定です。
>
>現在、訳も分からず以下ようなプログラムでとまっています。
>
>
>Private Sub CommandButton1_Click()
>  Dim OpenFileName As String
>
>  OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls*")
>  Workbooks.Open OpenFileName
>
>  Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells.Copy _
>  Application.Workbooks("b.xls").Worksheets("Sheets(1).Name").Cells(1, 1)
>  
>  Workbooks("OpenFileName").Close
>End Sub
>
>
>ステップインで調べていると、
>「インデックスが有効範囲内ではありません。」
>とでて、とまっています。
>
>Aのブックを開いた後、コピー
>Bのブックへペーストが出来ていないようです。
>
>今、構文などが全く理解していないので、
>  Application.Workbooks(OpenFileName).Worksheets("Sheets(1).Name").Cells.Copy _
>  Application.Workbooks("bb.xls").Worksheets("Sheets(1).Name").Cells(1, 1)
>について調べています。
>
>よろしくお願いします。

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