Excel VBA質問箱 IV

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

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


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

【46232】別ブックの指定されたシートに選択範囲のセル内容をコピーする よし 07/1/27(土) 15:22 質問[未読]
【46237】Re:別ブックの指定されたシートに選択範囲... かみちゃん 07/1/27(土) 16:08 発言[未読]
【46241】Re:別ブックの指定されたシートに選択範囲... よし 07/1/27(土) 17:37 お礼[未読]
【46248】Re:別ブックの指定されたシートに選択範囲... よし 07/1/27(土) 23:15 質問[未読]
【46251】Re:別ブックの指定されたシートに選択範囲... かみちゃん 07/1/28(日) 10:49 発言[未読]
【46256】Re:別ブックの指定されたシートに選択範囲... よし 07/1/28(日) 16:14 お礼[未読]

【46232】別ブックの指定されたシートに選択範囲の...
質問  よし  - 07/1/27(土) 15:22 -

引用なし
パスワード
   みなさん、こんにちは。いつもお世話になってます、よしです。

今日は題名にもありますように、あるブックに貼り付けられているDBのテーブルを
新規にブックを作成して、指定のシートにコピーしようとしているのですが、
エラーが解決できず困っております。解決のヒントでも頂ければと思っております。

Sub DMPブック作成()
  
  Dim originalBook As String
  Dim newWorkbook As Workbook
  Dim nName, copying As String
  
  ' コピー元ブック名の取得
  originalBook = ActiveWorkbook.Name
  
  ' 新規ブック名の入力
  nName = Application.InputBox(prompt:="ブック名を入力して下さい。", Type:=2)
  If nName = "False" Then
    Exit Sub
  End If
  
  ' 貼り付け先の指定
  copying = Application.InputBox(prompt:="何番目のシートにコピーしますか?", Type:=2)
  If copying = "False" Then
    Exit Sub
  Else
    If (CInt(copying) < 1 And CInt(copying) > 4) Then
      MsgBox ("1 から 4の間で指定してください。")
      Exit Sub
    End If
  End If
  
  Selection.Copy
  
  ' 新規ワークブックを作成し貼り付ける。その際、シートの書式を文字列にし、列幅を最適化する。
  Set newWorkbook = Workbooks.Add
  ActiveWorkbook.Worksheets(CInt(copying)).Activate
  Selection.NumberFormatLocal = "@"
  Worksheets(CInt(copying)).Cells(2, 1).Select
  ActiveSheet.Paste・・・・・(※)
  Selection.Columns.AutoFit
  
  ' ブック名を変更する
  newWorkbook.SaveAs Filename:=nName
  
End Sub

上記のように記述し、実行してみると(※)の部分で、
WorkSheetクラスのPasteメソッドが失敗しました。と出てしまいます。

【46237】Re:別ブックの指定されたシートに選択範...
発言  かみちゃん  - 07/1/27(土) 16:08 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>上記のように記述し、実行してみると(※)の部分で、
>WorkSheetクラスのPasteメソッドが失敗しました。と出てしまいます。

コピーしたあと、貼り付けの前に書式設定すると、コピーが取り消されると思います。
(一般操作で確認してみてください。)
したがって、
Selection.Copy
以下を
  Selection.Copy
  Set newWorkbook = Workbooks.Add
  Worksheets(CInt(copying)).Select
  Cells(2, 1).Select
  ActiveSheet.Paste
  Application.CutCopyMode = False
  Selection.NumberFormatLocal = "@"
  Selection.Columns.AutoFit
  ' ブック名を変更する
  newWorkbook.SaveAs Filename:=nName
としてみてください。

【46241】Re:別ブックの指定されたシートに選択範...
お礼  よし  - 07/1/27(土) 17:37 -

引用なし
パスワード
       かみちゃんさん、こんにちは。

>コピーしたあと、貼り付けの前に書式設定すると、コピーが取り消されると思います。

実際に試したところ、確かに点滅状態が解除されてコピー内容を貼り付けることが
できませんでした。

かみちゃんさんのご指摘の通り、書式関係の設定を貼り付け後に行うと

「WorkSheetクラスのPasteメソッドが失敗しました。」

というエラーも出なくなり思ったとおりの動作になったのですが、エラー内容の
発生原因について、まだよく分からない(取り消されるのは確認できましたが、それがどうしてエラーになるのか)部分もあり、もう少し調べてみようと思います。

かみちゃんさん、お忙しい中どうもありがとうございました。
またよろしくお願い致します。

【46248】Re:別ブックの指定されたシートに選択範...
質問  よし  - 07/1/27(土) 23:15 -

引用なし
パスワード
   みなさん、こんばんわ。よしです。

最初に質問したものを改造し、下記のようにしてみたのですが、すでにオープン
している場合に2重オープンを「いいえ」と選択すると、「Openメソッドが
失敗しました」というメッセージが表示されてしまい、とりあえず、エラーを
無視する形で対処致しました。このような対処は通常しないものなのでしょうか?
他にいい方法があればご教授願えないでしょうか。よろしくお願い致します。

Sub DMPブック作成()
  
  ' コピー元ブック名
  Dim originalBook As String
  originalBook = ActiveWorkbook.Name
  
  ' コピー先ブック名
  Dim copyBook As String
  
  ' コピー先シート番号
  Dim sheetNum As String
  
  ' コピー先ブック名を取得する。
  ChDir "\Documents and Settings\よし\デスクトップ\作業"
  
  On Error Resume Next
  copyBook = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
  If (copyBook <> "False") Then
    Workbooks.Open Filename:=copyBook
  Else
    Exit Sub
  End If
  On Error GoTo 0
  
  ' コピー先シート番号を取得
  sheetNum = Application.InputBox(prompt:="何番目のシートにコピーしますか?", Type:=2)
  If sheetNum = "False" Then
    Exit Sub
  Else
    If (CInt(sheetNum) < 1 And CInt(sheetNum) > 4) Then
      MsgBox ("1 から 4の間で指定してください。")
      Exit Sub
    End If
  End If
  
  ' 選択範囲の内容をコピーする。
  Workbooks(originalBook).Activate
  Selection.Copy
  
  ' 新規ワークブックを作成し貼り付ける。その際、列幅を最適化する。
  Workbooks(Dir(copyBook)).Worksheets(CInt(sheetNum)).Activate
  Worksheets(CInt(sheetNum)).Cells(2, 1).Select
  ActiveSheet.Paste
  
  Selection.Columns.AutoFit
  
End Sub

【46251】Re:別ブックの指定されたシートに選択範...
発言  かみちゃん  - 07/1/28(日) 10:49 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> すでにオープンしている場合に2重オープンを「いいえ」と選択すると、
> 「Openメソッドが失敗しました」というメッセージが表示されてしまい、
> とりあえず、エラーを無視する形で対処致しました。
> このような対処は通常しないものなのでしょうか?
> 他にいい方法があればご教授願えないでしょうか。

私は、指定されたブックが開いているかどうかをチェックをするようにしています。
ここの過去ログ[46092]でChkWorkbookという自作関数が参考になりますでしょうか。

【46256】Re:別ブックの指定されたシートに選択範...
お礼  よし  - 07/1/28(日) 16:14 -

引用なし
パスワード
   かみちゃんさん、こんにちは。よしです。

>私は、指定されたブックが開いているかどうかをチェックをするようにしています。
>ここの過去ログ[46092]でChkWorkbookという自作関数が参考になりますでしょうか。

ブックを開くときには確かに指定しようとしているブックが開かれているかを
チェックしないといけませんよね。参考になります。

色々なサイトを見て、どのようにエラー処理を組み込んでいるのか、これから少しずつ
勉強していいものが作れるように頑張っていきたいと思います。大変参考になりました、ありがとうございました。

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