2016-07-16 12 views
2

ExcelチャートをWordにコピーしようとしています。私はExcelで次のスクリプトを持っており、Office 2003 for PCとOffice Mac 2011で動作します。Office(2016)のそれ以降のバージョンでは、貼り付け時にグラフのサイズが変更されず、検索対象のトークンが以前のバージョンではそうです。ここで動作するが、それ以降のバージョンのOfficeでは動作しないスクリプトです。どんな助けでも大歓迎です。ExcelチャートをWordにコピーして、それ以降のバージョンのWordで機能しないVBAスクリプト

ActiveChart.ChartArea.Select 
ActiveChart.ChartArea.Copy 
Set wrd = CreateObject("Word.Application") 
wrd.Documents(DocumentName).Activate 
     wrd.Selection.Find.ClearFormatting 
     With wrd.Selection.Find 
      .Text = "insert" & ChartName 'This is the token it is looking for in the Word document and is where the chart should be inserted. 
      .Replacement.Text = "" 
      .Forward = True 
      .Wrap = 1 'wdFindContinue 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchWildcards = False 
      .MatchSoundsLike = False 
      .MatchAllWordForms = False 
      .Execute 
      If .Found = True Then 
       wrd.Selection.PasteAndFormat Type:=13 'wdChartPicture 
      End If 

以前のバージョンのOfficeでは、このスクリプトはアクティブなグラフをコピーし、トークンを探して貼り付けてWordに貼り付けます。トークンがチャートに置き換えられ、チャートのサイズが変更されます。新しいバージョンでは、トークンはチャートの最下部に残り、チャートのサイズは変更されません。

なぜ動作しないのかわからない場合は、すべてのバージョンのOfficeで強制的に動作させるようにコードを記述することは可能ですか?私は、すべての環境設定が同じであることを確認しようとしましたが、問題を引き起こしている可能性があるいくつかの設定を失ってしまった可能性があります。これは私にとって大きな問題なので、どんな考えも大変高く評価されます。

+0

このコードをステップ実行すると、 '.Found = True'条件が満たされますか? –

+0

もしそうなら、私は 'ExecuteMSO'方法を見てみます([ここ](http://stackoverflow.com/questions/35605460/copy-text-formatting-in-a-excel-to-word-script/35606101# 35606101)WordにExcelからの細胞の同様の質問コピー範囲である)、ここでである)http://stackoverflow.com/search?q=user%3A1467082+ExecuteMso([より少ない]ほとんどExcelからパワーポイントに、しかし一般的な考え方は同じですが、あなたはどの動詞を呼び出すべきかを特定する必要があり、それは最も信頼できるものでなければなりません。 –

+0

実際には.found条件が真です。私はラインwrd.selection.pasteandformatタイプを交換しようとした:wrd.CommandBars.ExecuteMso「PasteasPicture」と= 13と – Steve

答えて

0

あなたは基本的に2つの質問している:

  1. はなぜエクセル2016
  2. で、この作品はどのように私はこのコードのバージョンに依存しないとOSに依存しないを作ることができないのですか?

私は2016 ExcelもMac OSも持っていないので、#1には答えることができないかもしれませんが、Excel 2010と2013で私の知見の一部を共有します。解決策は2016年です。私は以下の#2に答えることができます。

エクセル2013分の2010の所見:2010年

エクセル、私は.Executeが実際にテキストを置き換えていなかった、いくつかの同様の問題を見ることができました。私が見ていることは.Executeの選択を変更していたことです - 本質的には.Executeを見つけました。 IOW、それはの代わりにを置き換えます。を選択します。 するためにを置き換える、私が行うために必要な:

.Execute Replace:=wdReplaceAll 

しかし、PasteAndFormatまたはExecuteMsoが正常に新しい「選択」を交換したかどうかをペースト(両方を

私はエクセル2013で同じことを観察します。 、2016

としてwhich is the latest version documented on MSDNとおそらく同じオブジェクトモデルNB Iは.CopyPicture方法の代わりにを使用しました方法。あなたはその方法でより良い運を持つかもしれません。それはショットの価値がある。

のバージョンに依存しない(とOSに依存しないコード)のための探求

それはすべてのバージョンのOfficeで動作するように強制的な方法でコードを書くことは可能でしょうか?

はい、これは、各バージョンで動作するものを特定し、Conditional Compilationという技術を使用する必要があります。通常、この手法は、コンパイルエラーを引き起こすオブジェクトモデルの変更に対応するために使用されます。

 .Execute 
     If .Found = True Then 
      wrd.Selection.PasteAndFormat Type:=13 'wdChartPicture 
     End If 

そして、このコードブロックは、2010年と2013年に動作します:

 .Execute Replace:=wdReplaceAll 
     If .Found = True Then 
      wrd.CommandBars.ExecuteMSO "PasteAsPicture" 
     End If 

そして、いくつかの他のコードがで働くたとえば

、のは、コードのこのブロックは2003年に働くとしましょう2016+(これは実際のコードではありませんが、私に付いてください):

​​

次に、あなたはそうするでしょう:

#If Mac Then 
    Debug.Print "Mac" 
    .Execute 
    If .Found = True Then 
     wrd.SOMETHINGFORMAC 'pseudo-code 
    End If 
#Else 
    Debug.Print "Windows" 
    Select Case CLng(Application.Version) 
     Case 11 'Excel 2003 
      Debug.Print 2003 
      .Execute 
      If .Found = True Then 
       wrd.Selection.PasteAndFormat Type:=13 'wdChartPicture 
      End If 
     Case 14 'Excel 2010 
      Debug.Print 2010 
      .Execute Replace:=wdReplaceAll 
      If .Found = True Then 
       wrd.CommandBars.ExecuteMSO "PasteAsPicture" 
      End If 
     Case 15 'Excel 2013 
      Debug.Print 2013 
      .Execute Replace:=wdReplaceAll 
      If .Found = True Then 
       wrd.CommandBars.ExecuteMSO "PasteAsPicture" 
      End If 
     Case Is > 15 'Excel 2016+ 
      Debug.Print "2016+" 
      .Execute Replace:=wdReplaceAll 
      If .Found = True Then 
       wrd.SOMETHING_FOR_2016 
      End If 
     Case Else 
      MsgBox "Other versions would require add'l logic..." 
    End Select 
#End If 
+1

ありがとうございます。私はこれを試みますが、来週の終わりまではこれを行うことができません。私はあなたに何が起こるかを知らせます。 – Steve

+0

その間、私はMacで試してみました。 = 13「wdChartPicture エンド 場合.Found = trueの場合、 .Executeが置き換えた場合は、次の で::= wdReplaceAll 終了コード 場合を.Foundが= trueの場合、 wrd.Selection.PasteAndFormatタイプなら、私はライン を置き換えます実行されたが、何も起こらなかった、すなわち、テキストがチャートに置き換えられなかった。私はプロのプログラマーではないので、指示を誤解しているかもしれません。 – Steve

+0

私もcopypictureメソッドを試しましたが、それは存在しないと言いました。スクリプトは、選択したグラフをコピーしようとしているExcelファイルにあります。コピーメソッドに問題はありません。 – Steve

関連する問題