<2/12まで>人気スマホが1円~!

「図の挿入」を使って画像ファイルから読み込んで貼り付けた画像を、ワードマクロで選択したいと思っています。
どのようなコードを書けばいいか、教えてください。

ちなみに、以前どなたかがされた質問に対する回答(http://oshiete1.goo.ne.jp/qa2224793.html)で
ActiveDocument.Content.ShapeRange.Select
を使うという方法が提示されていましたが、「図の挿入」で読み込んだ画像ファイルには使えないようです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1のご回答がありますが


私も判らずながらやってみました。
http://msdn.microsoft.com/library/ja/default.asp …
にInlineShapes の説明があります。
ーー
まずエクセルの操作で、挿入ー図ーファイルからでファイル名を指定します。
するとInlineShapes のオブジェクトになるようで、
Sub test02()
For Each ishape In ActiveDocument.InlineShapes
ishape.ConvertToShape
Next ishape

End Sub
を実行するとShape オブジェクトに変換できます。
Sub test01()
Dim pc As Object
Dim ishape As Object
MsgBox ActiveDocument.Shapes.Count
MsgBox ActiveDocument.InlineShapes.Count
For Each pc In ActiveDocument.Shapes
MsgBox pc.Name
Next
End Sub
を実行しますと
メッセージボックスで2と0がでて
Picture 6
などと表示できます。
Sub test03()
ActiveDocument.Shapes("Picture 6").Select
Selection.Delete
End Sub
で削除できました。
ーーー
InlineShapeを捉える件ですが
http://www.keep-on.com/excelyou/2001lng4/200112/ …
に書いておられますが
Indexでしか捕らえられないのかもしれません。
Sub test04()
MsgBox ActiveDocument.InlineShapes.Count
n = ActiveDocument.InlineShapes.Count
For i = 1 To n
MsgBox ActiveDocument.InlineShapes(i).Height
Next i
End Sub
私もNameでやってみましたができませんでした。
他に方法があるのかどうかわかりません。
Shapes->InlineShapeは選択したものにつき
Sub ConvertToInlineShape()
With Selection
' \\ If we selected a Shape then convert to InlineShape
If .Type = wdSelectionShape Then
.ShapeRange(1).ConvertToInlineShape
End If
End With
End Sub
というコードを見つけました。
Pictureの判別は
Sub test05()
Dim inlineShape
For Each inlineShape In ActiveDocument.InlineShapes
If inlineShape.Type = wdInlineShapePicture Then
MsgBox inlineShape.Height
End If
Next
End Sub
を見つけました。
    • good
    • 2
この回答へのお礼

色々と私の考えが足りなかったところまで含めての詳細なご回答、まことにありがとうございました。
私の使い方では、選択自体はIndexによる補足で十分でした。その他のサンプルも大変役立ちました。
ありがとうございました。

お礼日時:2007/11/07 16:57

マクロについては勉強中なので、的確な回答はできませんが。


以前の回答にある"Shape"は浮動配置された画像などに対してのもので、
[行内]にある場合は、使用できません。
以下のマクロで、位置を固定された[行内配置 ( InlineShape )]が幾つ
あるのか、位置を固定されない[浮動配置 ( Shape )]が幾つあるのか判断
できるもので確認されてはいかが。

Sub gazoucount()
 Dim doc As Document
 Set doc = ActiveDocument
 MsgBox "位置を固定した図形 : " & doc.InlineShapes.Count & _
vbCr & "位置を固定しない図形 : " & doc.Shapes.Count
End Sub

Shapeであれば以前のマクロは有効だと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
大変参考になりました。

お礼日時:2007/11/07 16:51

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【ワード】マクロで画像を選択する

ワードでマクロを記録している途中は、画像を選択できないのですが、
画像を選択という処理はマクロに出来ないのでしょうか?

Aベストアンサー

こんな感じ。

  ActiveDocument.Content.ShapeRange("Picture 1").Select

ShapeRange はシェープ等も含んでしまいますが、一括選択するなら、

  ActiveDocument.Content.ShapeRange.Select

です。ShapeRange を ヘルプで調べてみて下さい。名前を列挙するなら、

  For Each Pic In ActiveDocument.Content.ShapeRange
    If Pic.Name Like "Picture*" Then '<--画像だけ
      MsgBox Pic.Name
    End If
  Next Pic

のように ActiveDocument.Content (アクティブな文書の本文内)にある
ShapeRange コレクション(シェープや画像の集まり)を For Each ループ
で回します。

Qワードで画像を自動で挿入する方法

ワード2000を使用しています。フォルダにgif画像が200個程入っており(ファイル名は毎回変わります)、これをワードに1つずつ画像を挿入する作業をしているのですが、自動で処理するようなフリーソフトや方法があれば教えて下さい。出来れば挿入したファイル名も表示されるとうれしいのですが・・
宜しくお願い致します。

Aベストアンサー

ちょうど、マクロを作っていましたので紹介します。

Sub 画像取込()
myFolda = "C:\My Documents\My Pictures" '-gifファイルのフォルダ
Set fs = Application.FileSearch
DoEvents
With fs
 .NewSearch
 .LookIn = myFolda
 .SearchSubFolders = False
 .FileName = "*.gif"
 If .Execute() > 0 Then
  For I = 1 To .FoundFiles.Count
   myfname = .FoundFiles(I)
   Selection.TypeParagraph
   Selection.InlineShapes.AddPicture FileName:= _
   myfname, LinkToFile _
    :=False, SaveWithDocument:=True
   Selection.TypeParagraph
   Selection.TypeText Text:= _
   Right(.FoundFiles(I), _
    Len(.FoundFiles(I)) - Len(myFolda) - 1)
   Selection.TypeParagraph
  Next I
 End If
End With
MsgBox "貼り付け完了"
End Sub

上記"Sub 画像取込()"から"End Sub"までがマクロになります。この例ではC:\My Documents\My Picturesのフォルダにあるgifファイルすべてが対象です。適宜フォルダへのパスを変更してください。
マクロの実行方法ですが、
1, 画像ファイルを貼り付けるword文書を開いて、Alt+F11キーを押します。
2, VisualBasicEditorが立ち上がりますので、左の方のプロジェクトエクスプローラのTisDocumentが選択されているのを確認して、コードウインドウに上記マクロをコピー&ペーストしてください。
3, VisualBasicEditorを閉じて、Alt+F8キーを押すとマクロリストのダイアログが立ち上がりますので、"画像取込"を選択して"実行"をクリックします。

マクロはコマンドボタンに登録することもできます。

windows2000 word2000 で動作確認

ちょうど、マクロを作っていましたので紹介します。

Sub 画像取込()
myFolda = "C:\My Documents\My Pictures" '-gifファイルのフォルダ
Set fs = Application.FileSearch
DoEvents
With fs
 .NewSearch
 .LookIn = myFolda
 .SearchSubFolders = False
 .FileName = "*.gif"
 If .Execute() > 0 Then
  For I = 1 To .FoundFiles.Count
   myfname = .FoundFiles(I)
   Selection.TypeParagraph
   Selection.InlineShapes.AddPicture FileName:= _
   myfname, LinkToFile ...続きを読む

QWord VBA 写真 挿入

Excel で写真の挿入VBAは 皆さんのご回答を元になんとか出来ました。
回答者さま 有難う御座いました。
挿入したファイル(写真)のサイズ変更(見た目のサイズ)も出来ます。


ところが、
Wordへの写真挿入 
サイズの変更 になりますと、(VBAで記述したいのに)

「図の書式設定」自体効きません。

↑ 「マクロの記録」をしても、出来ません。
(ボタンは False 状態)


「マクロの記録」で出来ないという事は
つまり、Wordでは無理って考えれば良いのでしょうか。

Aベストアンサー

こんにちは。KenKen_SP です。

> つまり、Wordでは無理って考えれば良いのでしょうか。

何をやりたいのか具体的に書かれてないので、コメントし難いのですが、
とりあえず、画像を挿入したいなら、

  Application.Dialogs(wdDialogInsertPicture).Show

で画像挿入のダイアログを表示できます。また、ファイル名を指定して画像を
挿入し、各種操作するには、

Sub Sample()

  Dim PIC As Shape
  Dim strFilename As String

  strFilename = "C:\Sample.jpg"

  Set PIC = ActiveDocument.Shapes.AddPicture(strFilename)
  With PIC
    .LockAspectRatio = msoTrue ' 縦横比を保つ
    ' ミリメートル指定でサイズを変更する場合(例:50mm)
    .Width = MillimetersToPoints(50)
    ' 水平方向の位置を決めるときの基準点を余白に設定
    .RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin
    ' 垂直方向の位置を決めるときの基準点を余白に設定
    .RelativeVerticalPosition = wdRelativeVerticalPositionMargin
    ' ミリメートル指定で余白位置からの場所を指定(例:上10mm、左10mm)
    .Top = MillimetersToPoints(10)
    .Left = MillimetersToPoints(10)
    ' さらに動かしてみる(例:20ポイントずらす)
    ' ミリメートル指定なら .IncrementTop MillimetersToPoints(10) で 10mm
    .IncrementTop 20
    .IncrementLeft 20
    ' さらに回転(例:90度)
    .IncrementRotation 90#
  End With
  Set PIC = Nothing

End Sub

こんな感じで。微妙に Excel とは違いますが、基本は一緒です。

こんにちは。KenKen_SP です。

> つまり、Wordでは無理って考えれば良いのでしょうか。

何をやりたいのか具体的に書かれてないので、コメントし難いのですが、
とりあえず、画像を挿入したいなら、

  Application.Dialogs(wdDialogInsertPicture).Show

で画像挿入のダイアログを表示できます。また、ファイル名を指定して画像を
挿入し、各種操作するには、

Sub Sample()

  Dim PIC As Shape
  Dim strFilename As String

  strFilename = "C:\Sample.jpg"

  Set PIC = Acti...続きを読む

QVBSでワードに画像を貼り付ける

VBSを使用して、
2ページあるワードテンプレートの2ページ目に、
画像を貼り付けたいのですが、方法がわかりません。
方法がありましたら、教えていただけますと助かります。

ちなみに、下記のようなhoge.vbsを書いて試行錯誤していますが、
この場合、1ページ目に画像が張り付いてしまいます…

---
Dim word
Dim doc
Set word = CreateObject("Word.Application")
word.visible=true
word.Activate
word.WindowState=wdWindowStateNormal
word.Documents.Open "C:\***\***.dot"
word.Selection.MoveDown 5, 17    
//⇒17行後に2ページ目へ移行するデータです。
word.ActiveDocument.Shapes.AddPicture "C:\***\***.bmp"
word.Selection.EndKey
word.ActiveWindow.SetFocus
---

VBSを使用して、
2ページあるワードテンプレートの2ページ目に、
画像を貼り付けたいのですが、方法がわかりません。
方法がありましたら、教えていただけますと助かります。

ちなみに、下記のようなhoge.vbsを書いて試行錯誤していますが、
この場合、1ページ目に画像が張り付いてしまいます…

---
Dim word
Dim doc
Set word = CreateObject("Word.Application")
word.visible=true
word.Activate
word.WindowState=wdWindowStateNormal
word.Documents.Open "C:\***\***.dot"
word.Select...続きを読む

Aベストアンサー

マクロを記録して調べたところ、下記でいけるのではないでしょうか。

【変更前】word.ActiveDocument.Shapes.AddPicture "C:\***\***.bmp"
【変更後】word.Selection.InlineShapes.AddPicture "C:\***\***.bmp"

Windows XP SP2 + Word 2002で試しました。

Q【Word2007】Shapeの中のInlineShapeの情報を取得したい

いつもお世話になっております。
(図がなくて説明が悪かったと思いますので、訂正しました。)

Word2007を使用しています。

[挿入]⇒[図形]から「テキストボックス」を入力できると思います。
その中に、[開発]⇒[コントロール]などから
InlineShapeを配置できると思います。

そこで質問なのですが、
テキストボックス内のInlineShapeの情報を取得するには
どのようにしたら良いでしょうか?

Shapeの情報であれば以下のように取得できると思います。

Dim shape As Word.shape

For Each shape In ActiveDocument.Shapes
'必要に応じてプロパティの値を変えます。
MsgBox (shape.Width)
Next

同じようにInlineShapeの情報であれば、
以下のように取得できると思います。

Dim ishape As Word.InlineShape

For Each ishape In ActiveDocument.InlineShapes
'必要に応じてプロパティの値を変えます。
MsgBox (shape.Width)
Next

ここまでは分かったのですが、
Shape内に配置されているInlineShapeの情報を取得する方法が
どうしても分かりませんでした。

もしご存知でしたら、教えて頂けませんか?
ぜひよろしくお願い致します。

※図を付けます。
 図に載せたコマンドボタンの情報を取得したいと思っております。
 よろしくお願い致します。

いつもお世話になっております。
(図がなくて説明が悪かったと思いますので、訂正しました。)

Word2007を使用しています。

[挿入]⇒[図形]から「テキストボックス」を入力できると思います。
その中に、[開発]⇒[コントロール]などから
InlineShapeを配置できると思います。

そこで質問なのですが、
テキストボックス内のInlineShapeの情報を取得するには
どのようにしたら良いでしょうか?

Shapeの情報であれば以下のように取得できると思います。

Dim shape As Word.shape

For Each shap...続きを読む

Aベストアンサー

下記のようなことでどうでしょうか。

Dim ishp As Word.InlineShape

ActiveDocument.Shapes("Text Box 1").Select
For Each ishp In Selection.Range.InlineShapes
  MsgBox (ishp.Width)
Next

Qワードの図形をコピー&ペイストのマクロ

こんにちは。
WinXP-Pro、Word2002を使用しています。
一ページ目に配置してある図形をコピーし、
ページを追加しそこにその図形を貼り付け
るマクロを登録しました。記録した操作は
以下のとおりです。
*****************************************
Ctrl+Home→図の選択→Ctrl+End→Ctrl+Enter
→Paste
******************************************
手動でこの操作をやった場合はうまくいくの
ですがマクロで実行すると、図を追加したページ
でなく追加前の最終ページにペーストしてしまい
ます(Ctrl+Enterが効いていない??)。
これを改善する方策のご教授をお願いいたします。

Aベストアンサー

> 図形を新しいページにコピーした場合、コピー元のページと配置が異なってしまうので
> 同じ位置に配置するためペースト後の図形を選択したい。
ペーストした時点でその図形が選択された状態になっていますので、元の図形を選択して
コピーする時点で予めその位置を取得しておき、貼り付け後の図形にその情報を与えれば
自動的に位置揃えできます。
<コピー時>
 T = Selection.ShapeRange.Top
 L = Selection.ShapeRange.Left
 Selection.Copy
<貼り付け後>
 Selection.Paste
 Selection.ShapeRange.Top = T
 Selection.ShapeRange.Left = L

ついでですが、文書内の名前のわからない図形は、次のようにすれば選択できます。
 ActiveDocument.Shapes(N).Select
N は任意の数字ですが、基本的には図形の「順序」でより背面にあるものから順に 1、2、
3、‥‥、となります。
複数の図形を同じ位置に貼り付けると順に前面に貼り付けられますね。ですので、順序を
変更しない限り、文書上に残っている図形の中では最初に貼り付けられたものが 1、とい
うことになります。
反対に、最後に挿入された(描かれた)図形を選択する場合は、
N = ActiveDocument.Shapes.Count
ActiveDocument.Shapes(N).Select
となります。

Selection.ShapeRange.Name = "Tekitou"
のようにして、選択した図形に任意の名前をつけてしまうこともできます。

> 図形を新しいページにコピーした場合、コピー元のページと配置が異なってしまうので
> 同じ位置に配置するためペースト後の図形を選択したい。
ペーストした時点でその図形が選択された状態になっていますので、元の図形を選択して
コピーする時点で予めその位置を取得しておき、貼り付け後の図形にその情報を与えれば
自動的に位置揃えできます。
<コピー時>
 T = Selection.ShapeRange.Top
 L = Selection.ShapeRange.Left
 Selection.Copy
<貼り付け後>
 Selection.Paste
 Selection.Sha...続きを読む

QVBAマクロで、図形等のオブジェクトを選択(特定)する方法ってありますか

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時にシートごと削除する方法をとりました。(当然、確認用のダイアログボックスが表示されます。)
前置きが長くなりましたが、問題は、用済みの画像を選択するプロシージャがあれば、あえて削除用のシートを用意する必要はありません。セルの場合は、Rangeプロパティやcellsプロパティで特定できますが、画像などのオブジェクトをセル番地などを使って特定する方法ってあるのでしょうか。
因みに、画像の選択処理を、マクロ記録でプロシージャを作成したら、
ActiveSheet.Shapes("Picture 1").Select などとなります。
よろしくお願いします。

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時...続きを読む

Aベストアンサー

検索シートにシェイプが1つしかなければ
ActiveSheet.Shapes(1).Select
で選択
ActiveSheet.Shapes(1).Delete
で削除できます。

QMS-WordのVBAで図形サイズの指定(100%)方法

MS-WordのVBAで図形サイズの指定(100%)方法

Word2000です。VBAは知らない(嫌い)ですが、時々必要になり、通常はマクロ記録したものを多少手直ししたりして使用しています。今回の問題ではマクロ記録すると100%ではなく、ある特定のサイズを指定したように記録されます。100%で指定するには、どのようなコードになるのでしょうか?

Aベストアンサー

記録されたコードを提示できないでしょうか。

QWord VBA 表内の図を一括中央揃えにするマク

Wordの表に3,000個ほどの図を入れ、それぞれコメントを入れておりますが、図の位置が左揃えになったり、中央揃えになったり、右揃えになったりしています。これら図だけを一括して中央揃えにするマクロを作ろうとしています。 図のサイズを一括して変更するマクロは資料を参考にして出来ましたが、中央揃えにするマクロがどうしても出来ません。 参考にして作ったプログラムは以下の通りですが、コンパイルエラーになってしまいます。 四苦八苦しています。どなたかご指導お願いします。

Sub 図の一括中央揃え()
'
' 図の一括中央揃え
'
'

Dim shp As InlineShape

For Each shp In ActiveDocument.InlineShapes
shp.ParagraphFormat.Alignment = wdAlignParagraphCenter
Next

End Sub

Aベストアンサー

InlineShapeのメンバーにParagraphFormatがないためです。
http://msdn.microsoft.com/ja-jp/library/office/ff840794(v=office.15).aspx

この場合、Rangeを追加してParagraphFormatを使えるようにします。

Sub 図の一括中央揃え()
'
' 図の一括中央揃え修正版
'
Dim shp As InlineShape

 For Each shp In ActiveDocument.InlineShapes
 shp.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
 Next

End Sub

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング