dポイントプレゼントキャンペーン実施中!

手動で行なった[マクロの記録]どうりに、マクロを実行してもうまくいきません。
マクロで、グラフの切り取り、貼り付け、形式を選択して貼り付け<図 (拡張メタファイル)>を実行すると、クリップボードに入らず、エラーとなる。
手動で行なうとOKなのですが、
[ツール]の[新しいマクロの記録]では、下記のとうり記録されていて、実行結果も正しいのですが、マクロで実行すると、クリップボードに入らず、エラーとなります。

-------------------------------
Range("E2:H4").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4")
ActiveChart.Location
Where:=xlLocationAsObject, Name:="Sheet1"
ActiveWindow.Visible = False
ActiveWindow.WindowState = xlNormal
ActiveWindow.WindowState = xlMaximized
Range("C12").Select
ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)", Link:=False, _
DisplayAsIcon:=False
Range("J7").Select
-------------------------
Office XP 2002
マクロ、素人です。
どうしてでしょうか?

A 回答 (7件)

s_huskyさん、質問者さんは普通にグラフを作りたいのではなくて、グラフを図に変換したいのでしょう。



下記でどうでしょうか?
Excel2000では動きますが、、、

Sub ChartAddTest()
Dim co As ChartObject
 With Worksheets("Sheet1")
  Set co = .ChartObjects.Add(.Range("C12").Left, .Range("C12").Top, 372, 208)
    co.Chart.ChartWizard Source:=.Range("E2:H4"), _
         Gallery:=xlColumn, Format:=1, PlotBy:=xlRows, _
         CategoryLabels:=1, SeriesLabels:=1, HasLegend:=1
    co.Chart.ChartArea.Border.LineStyle = xlContinuous
    co.Chart.Axes(xlValue).HasMajorGridlines = True
    co.Copy
    .Range("C12").Activate
    .PasteSpecial Format:="図 (拡張メタファイル)"
    co.Delete
 End With
End Sub
    • good
    • 0
この回答へのお礼

有難うございました。
マクロには素人なので、[ツールメニュー]から[新しいマクロの記録]でマクロの内容を推測してマクロを組み立てる方法で行なっているものですから・・・・
実際にやりたかったのは、グラフを、図に変換したかったのです。別シートのデータよりパラメーターを与えてデータをゲットしてグラフを作る、ただしこの時
作業シートにデーターを持ってくると、次々にグラフを作ると、前に作ったデータにより次のグラフが影響を受けるため、その影響を避けるために図に変換すれば、影響受けないと考えたのですが・・・・
他に、いい方法があると思いますが・・・・・

お礼日時:2006/03/18 20:28

s_husky です。



ActiveChart.CopyPicture , xlPicture, xlScreen

画像の種類とサイズを指定して CopyPicture できるようです。
    • good
    • 0
この回答へのお礼

返事が遅くなってすみませんでした。
何とか目的が達せられました。
有難うございました。

お礼日時:2006/03/20 20:28

#4です。


記録マクロには限界があり全ての動作が記録される訳ではないようです。

> 実際にやりたかったのは、グラフを、図に変換したかったのです。

#4の回答はやりたい事と違うって事でしょうか?
co.copy を co.Cut にすれば、co.Delete は不要ですが、、、

    co.Cut
    .Range("C12").Activate
    .PasteSpecial Format:="図 (拡張メタファイル)"
 End With

> 次々にグラフを作ると、前に作ったデータにより次のグラフが影響を受けるため

データ元がいつも同じ Range("E2:H4") で、ここの値を変化させながら複数のグラフを作りたいって事?
    • good
    • 0
この回答へのお礼

返事が遅くなってすみませんでした。
今回の質問では、グラフを作って図に変換するところが知りたかったので例として質問しましたが、実際には、別シートにあるデーターを、パラメーターを与えて、必要なデータのみ作業シートに取り込み、数々のグラフを作りたかったのです。

ActiveSheet.ChartObjects("グラフ名").Cut
ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)" でできました。
有難うございました。

お礼日時:2006/03/20 20:26

s_husky です。



後学のために!

Private Sub CommandButton1_Click()
  Range("E2:H4").Select
  Charts.Add
  ActiveChart.ChartType = xlColumnClustered
  ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4")
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
  ActiveChart.CopyPicture
  ActiveWindow.Visible = False
  ActiveWindow.WindowState = xlNormal
  ActiveWindow.WindowState = xlMaximized
  Range("C12").Select
  ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)"
  Range("J7").Select
End Sub

ActiveChart.CopyPicture

この1行が欠落していたということでしょうか?
    • good
    • 0
この回答へのお礼

有難うございました。
papayukaさんにも返事しましたが、グラフを図に変換したかったのです。[マクロの記録]では、記録されないコードがあるのでしょうか?
ActiveChart.CopyPictureは元のグラフが残りますが、
いわゆる[カット]はできないのでしょうか?
変換後に別ステップでグラフを削除すればよいのですが
又、元のグラフの大きさと図の大きさが変わりますが、
同じ大きさにできないでしょうか?

お礼日時:2006/03/18 20:44

s_husky です。



(Excel2003 SP2)

質問者のコードを次のようにして確認。
青、紫、白の棒グラフが作成されます。

ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"

行は、エラーになりますので修正しています。

Private Sub CommandButton1_Click()
On Error Resume Next
  Range("E2:H4").Select
  Charts.Add
  ActiveChart.ChartType = xlColumnClustered
  ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4")
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
  ActiveWindow.Visible = False
  ActiveWindow.WindowState = xlNormal
  ActiveWindow.WindowState = xlMaximized
  Range("C12").Select
  ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)", Link:=False, DisplayAsIcon:=False
  Range("J7").Select
End Sub

ただ、次のマクロですとエラーも出ないで同じ結果を得ます。

Private Sub CommandButton1_Click()
On Error Resume Next
  Range("E2:H4").Select
  Charts.Add
  ActiveChart.ChartType = xlColumnClustered
  ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4")
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
  ActiveWindow.Visible = False
  ActiveWindow.WindowState = xlNormal
  ActiveWindow.WindowState = xlMaximized
  Range("C12").Select
  Range("J7").Select
End Sub

※バージョンの違いなんでしょうかね?
    • good
    • 0

>マクロで、グラフの切り取り、貼り付け、形式を選択して貼り付け<図 (拡張メタファイル)>を実行すると、


>クリップボードに入らず、エラーとなる。
提示されたマクロには、切り取り命令が含まれていないようです。
PasteSpecialは形式を選択して貼り付けの命令なので、クリップボードからワークシートに貼り付けます。
ActiveChart.Locationの後にActiveChart.Cutを追加してみたらどうでしょうか?

この回答への補足

ActiveChart.Cutでエラーとなります。

補足日時:2006/03/18 09:24
    • good
    • 0

回答が付かないので誘い水を...



エラー箇所は、Format:="図 (拡張メタファイル)"のようですね。

1、冒頭に On Error Resume Next の1行を挿入すると目的は達成されるようです。
2、Format:="図 (拡張メタファイル)"を、0、1、2の数字にするとエラーは出ません。
  が、クリップボードが全てコピーされます。
  クリップボードをクリアする1行を冒頭に挿入すれば良いのですが判りません。

※"図 (拡張メタファイル)"のエラーの出ない書き方があるのか不具合なのかということと思います。
※プロの回答が付くことを願っています。

この回答への補足

早速の返事、ありがとうございました。
<2、Format:="図 (拡張メタファイル)"を、0、1、2の数字にするとエラーは出ません。
  が、クリップボードが全てコピーされます。>
こちらでは、エラーになるのですが?

補足日時:2006/03/18 09:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!