[[20060613164708]] 『ペイストスペシャルでエラー』(かず) ページの最後に飛ぶ

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

 

『ペイストスペシャルでエラー』(かず)
 いつもお世話になってます。
 今日はマクロの自動記録を参考にマクロを組み立てていたのですが
 どうもうまくいきません。
 現在引っかかっているのは
 PASTESPECIALで列幅をコピーしたいのですが
 うまくいかないのです。
     Rows("1:3").Select
    Selection.Copy
    Sheets(ns12_name).Select
    Sheets.Add
    ns13_name = ActiveSheet.Name
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

 これはなぜうまくできないのでしょうか?
 一度3列を張付けた後,1列だけを選択したり
 A1からA30までを選択しA1にPASTESPECIAL等もやったのですが
 必ず引っかかります。
 ご教示ください。
 ついでで申し訳ないのですが
 表の最終行を求めるのはネット等で調べると
 max_r = Range("A1").CurrentRegion.Rows.Count
 とかいてあったりしますが,これだと間に空白行があると
 そこの値が返されてしまうのですか?
 max_r = Range("A65536").End(xlUp).Row
 ですればうまいこといくのですが,うまいこと探せ出せなくて
 宜しくお願いします。


 組み込み定数名が違うのでは。こちらの記録では下記。
Paste:=xlPasteColumnWidths,
 
CurrentRegionは「現時点の領域」と訳せます。
アクティブセルから見た、空白行と空白列範囲に囲まれた矩形(長方形)領域を指します。
空白行、空白列が発生する場合は気をつけたほうが良いでしょう。
したがって、
 max_r = Range("A1").CurrentRegion.Rows.Count
で最終行を求めるのは間違いではありませんが、シートに入力されたデータによります。
断続するデータには向いていません。
max_r = Range("A65536").End(xlUp).Row
こちらもA列の最終行が必ず全データの最終行であるという根拠がなければ、
でたらめな動作になります。
(みやほりん)(-_∂)b


 衝突しました。 
 列幅なのだから、Rows("1:3") → Columns("A:C") 
 こちらの検証では、ActiveSheet.Paste だけで列幅もコピーされましたけど。
(純丸)(o^-')b

  Columns("A:C").Copy
  Sheets.Add Before:=Sheets(ns12_name)
  ns13_name = ActiveSheet.Name
  ActiveSheet.Paste


 みやほりんさん 順丸さん ありがとうございます。
 しかしまだ全然解決してません。みやほりんさんの
 に変更してもエラーになります。
 アプリケーション,オブジェクトの定義エラーっと・・・
 順丸さんのではちょっと意味がわからないのですが
 順丸さんので実行すると
 AからC列をコピーして貼り付けています。

 私がしたいことをいうのを忘れてました・・・
 @1〜3行目(表題部分)を新シートにはる
 A4〜max_r行目までの合計列が 0 と 計 以外の 行を抜き出し新シートに貼り付けようと
   したのです・・・

 またもう1つ困ったことがありました。 
 4行目からmax_r行目までを選択できないのですがどうしてでしょうか?
 rows(1:3)   
 rows(4:max_r)
 なんだかよくわからなくなってきました。 


 なにか以前同じような事を経験した事があるような気がするのですが、
 2段階に分けてPasteしたような....

 はじめに、PasteSpecial xlPasteFormats, 次に PasteSpecial としたような...

 ちなみに
 rows("4:" & max_r) では?

 (seiya)

うーん
 できないです
 worksheet クラスのPasteSpecial メソッドが失敗しましたってなります。
 そして Rows("4:" & max_r)もできません。
 Dim max_r As Integerを宣言してるからだめなんですか?


 それはもしかして、Clipboardがクリアされているのでは?
 Sheets.Add を先にして、それからCopyでもだめですか?

 max_r の値は取得できていますか?

 (seiya)

 >みやほりんさんの に変更してもエラーになります。
確認しました。バージョンはExcel200ではないですか?
Paste:=xlColumnWidths, は記録はされますが、組み込み定数として登録されていない
のが確認できました。(Excel2000 SR1)
そのため、引数としては無効な扱いになるようです。
VBAのバグ、というか、定義漏れではないでしょうか。
私も長い間、2000ユーザでしたが、列幅のコピーは使いませんので、
気が付きませんでしたね。
 
Sheets(ns13_name).Columns("B:B").ColumnWidth = 10
のように、個別に列幅を指定してみてはいかがでしょう。
 
もっとも、私はシートをどんどん増やすような運用は反対の立場ですが・・・。
(みやほりん)(-_∂)b


 エクセル2000です
 そうですか。だめなんですね。 ありがとうございます。
 列幅を変更する方法でがんばってみます。
 シートを増やさない方法??

 ところで ROWS("1:3")はできてROWS("1:max_r")ができないのはどうしてですか?


 seiyaさんのレスは見ていますか?
 > ちなみに
 > rows("4:" & max_r) では?
(ROUGE)


すいません できました。 ありがとうございます。

 なぜこうなるかは もう少し調べてみます。
 いろいろありがとうございます。

 xlColumnWidthsについては以前この学校でも見かけた気がしたので、調べてみました。
[[20050302171917]] 『マクロ 値の貼り付けで』(ぶー)
xlColumnWidthsの代わりに定数「8」を与えることは出来るようです。
(みやほりん)(-_∂)b

コメント返信:

[ 一覧(最新更新順) ]


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