Excel VBA質問箱 IV

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

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


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

【58881】別のファイルへペーストの方法 ppp 08/11/15(土) 23:54 質問[未読]
【58882】Re:別のファイルへペーストの方法 Hirofumi 08/11/16(日) 6:09 回答[未読]
【58883】Re:別のファイルへペーストの方法 Hirofumi 08/11/16(日) 7:44 発言[未読]
【58911】Re:別のファイルへペーストの方法 ppp 08/11/17(月) 23:54 お礼[未読]
【58895】Re:別のファイルへペーストの方法 ppp 08/11/16(日) 22:05 お礼[未読]

【58881】別のファイルへペーストの方法
質問  ppp  - 08/11/15(土) 23:54 -

引用なし
パスワード
   アクティブになっているExcelからマクロで新規ブックを作成し、
アクティブになっているExcelのシート1のセルを全選択しコピーしたデータを
新規ブックに貼り付けたいのですが、列の幅や、セルの背景色がコピーされません。
正確には、値があるセルに関してはコピーできる(色のみ、列や行幅は無理)
コピー元のファイルから開いているExcelに貼付けは出来るのですが(マクロでない)なぜこのようなことになるのでしょうか?

解決方法がありましたらよろしくお願いします。

以下に簡単にソースを書きました。

  Dim objApp     As Object
  Dim objBook     As Object
  Dim objSheet    As Object

    objApp.Workbooks.Add
    '非表示にする
    objApp.Application.Visible = False
    '確認ダイアログを表示させない
    objApp.DisplayAlerts = False
  
    Set objBook = objApp.ActiveWorkbook

    '元となるExcelのデータをコピー
    Cells.Select
    Selection.Copy

    'シート1の書き込み
    Set objSheet = objBook.Sheets(1)
    'セル全体の設定
    With objSheet

    .Paste

    End With

【58882】Re:別のファイルへペーストの方法
回答  Hirofumi  - 08/11/16(日) 6:09 -

引用なし
パスワード
   SheetのCopyでは不味いのですか?


Sub Sample()
  
  ActiveSheet.Copy
  
End Sub

【58883】Re:別のファイルへペーストの方法
発言  Hirofumi  - 08/11/16(日) 7:44 -

引用なし
パスワード
   手動でCopyしても列幅と行高さはCopyされないと思いますが?
如何しても、Copyでしたいなら、こんな風に成るのかな?

Public Sub Sample2()

  Dim objSheet    As Worksheet
  Dim i As Long
  Dim strTop As String
  Dim wksPaste As Worksheet
  
  '画面更新を停止
  Application.ScreenUpdating = False
    
  'ActiveSheetの参照を保存
  Set objSheet = ActiveSheet
  '追加したBookの参照を保存
  Set wksPaste = Workbooks.Add.Worksheets(1)
  
  With objSheet.UsedRange
    '使用範囲の先頭位置を保存
    strTop = .Cells(1).Address
    '元となるExcelのデータをコピー
    .Copy Destination:=wksPaste.Range(strTop)
    'データの有る列の列幅を設定
    For i = 1 To .Columns.Count
      wksPaste.Range(strTop).Offset(, i - 1).ColumnWidth _
          = .Cells(1, i).ColumnWidth
    Next i
    'データの有る行の行高さを設定
    For i = 1 To .Rows.Count
      wksPaste.Range(strTop).Offset(i - 1).RowHeight _
          = .Cells(i, 1).RowHeight
    Next i
  End With
    
  '画面更新を再開
  Application.ScreenUpdating = False
    
  Set wksPaste = Nothing
  Set objSheet = Nothing
    
End Sub

【58895】Re:別のファイルへペーストの方法
お礼  ppp  - 08/11/16(日) 22:05 -

引用なし
パスワード
   ▼Hirofumi さん:
>SheetのCopyでは不味いのですか?
>
>
>Sub Sample()
>  
>  ActiveSheet.Copy
>  
>End Sub

ご回答ありがとうございます。

Sheetをコピーするとそのシートのマクロまでコピーされてしまうので、
出来ることなら、そのSheet全部のセルをコピーしたいと考えています。

【58911】Re:別のファイルへペーストの方法
お礼  ppp  - 08/11/17(月) 23:54 -

引用なし
パスワード
   ▼Hirofumi さん:
>手動でCopyしても列幅と行高さはCopyされないと思いますが?
>如何しても、Copyでしたいなら、こんな風に成るのかな?
>
>Public Sub Sample2()
>
>  Dim objSheet    As Worksheet
>  Dim i As Long
>  Dim strTop As String
>  Dim wksPaste As Worksheet
>  
>  '画面更新を停止
>  Application.ScreenUpdating = False
>    
>  'ActiveSheetの参照を保存
>  Set objSheet = ActiveSheet
>  '追加したBookの参照を保存
>  Set wksPaste = Workbooks.Add.Worksheets(1)
>  
>  With objSheet.UsedRange
>    '使用範囲の先頭位置を保存
>    strTop = .Cells(1).Address
>    '元となるExcelのデータをコピー
>    .Copy Destination:=wksPaste.Range(strTop)
>    'データの有る列の列幅を設定
>    For i = 1 To .Columns.Count
>      wksPaste.Range(strTop).Offset(, i - 1).ColumnWidth _
>          = .Cells(1, i).ColumnWidth
>    Next i
>    'データの有る行の行高さを設定
>    For i = 1 To .Rows.Count
>      wksPaste.Range(strTop).Offset(i - 1).RowHeight _
>          = .Cells(i, 1).RowHeight
>    Next i
>  End With
>    
>  '画面更新を再開
>  Application.ScreenUpdating = False
>    
>  Set wksPaste = Nothing
>  Set objSheet = Nothing
>    
>End Sub

ご回答ありがとうございます。
シートの表示なんですが、列幅はすべて2、で背景色は値があるところ以外は
全て白にしています。
手動でコピーすると出来ますが、マクロはできないみたいです。
ですので一度シートを作成し、そこにコピーしてそのシートを新規ブックに
コピーという方法で対処してみたいと思います。

親切にご教示にありがとうございました。

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