あなたの映画力を試せる!POPLETA映画検定(無料) >>

ワードVBAを書いています。
お客さんのワード文書にShapeが貼り付いていて、その位置情報を、ページの境界線からの距離(ポイント)で取得したいと思っています。
shape.RelativeHorizontalPositionは、wdRelativeHorizontalPositionColumn となっていました。
これはどういう意味なんでしょうか?
色々調べたのですが、なかなかいい情報が見つかりません。
shape.Left/Topを、何の座標と足せば、見た目の座標になるのでしょうか?
詳しい方がおられたら教えてください。

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

A 回答 (2件)

#1 です。


失礼しました。
Top および Left はアンカーからの位置っぽいですね。
なのでアンカーがページ端からどのぐらいの位置にあるのかを加えなければなりません。
Dim leftPos As Single
Dim topPos As Single
leftPos = myShape.Anchor.Information(wdHorizontalPositionRelativeToPage) + myShape.Left
topPos = myShape.Anchor.Information(wdVerticalPositionRelativeToPage) + myShape.Top

これで出せると思います。
Google 様に word shape absolute position vba で聞いてみました。
    • good
    • 0
この回答へのお礼

ありがとうございます!
教えていただいたキーワードで見つかったMSのサポートページに詳しく(?)でていました。
そのコードをそのまま実行すると、ものによっては元の位置から少しずれてしまうのですが…
ほかに方法は無さそうですね。
これで行こうと思います。
ありがとうございました。

お礼日時:2009/04/10 22:18

Top と Left じゃないですか?


Dim myShape As Shape
Set myShape = ActiveDocument.Shapes.AddShape(msoShapeRectangle, 0, 0, 30, 30)
myShape.Top = 100
myShape.Left = 100

Top、Left、AddShape をヘルプで見てみてください。

この回答への補足

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

画面上で見るとページの真ん中へんにあるのに、Topが1pt未満だったりLeftがマイナス値だったりするので悩んでいます。
ヘルプを見ると、
> 図形の位置は、図形の境界ボックスの左上隅から図形のアンカーまでを測定します。
とあるので、アンカー位置を
shp.Anchor.Information(wdHorizontalPositionRelativeToPage)
で取って、Leftを足したら良いかと思いましたが、やはり見た目の位置とは明らかに違うようです。
shape.RelativeHorizontalPosition を変更すると、取得できるTopやLeftの値が変わるので、関係あるかと思ったのですが…

補足日時:2009/04/10 14:48
    • good
    • 0

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

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

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

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

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

Qワードマクロで画像を選択する方法

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

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

よろしくお願いします。

Aベストアンサー

#1のご回答がありますが
私も判らずながらやってみました。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbawd11/html/woobjInlineShapes1.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/01120012.txt
に書いておられますが
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
を見つけました。

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

End Sub
を実行するとShape オブジェクトに変換で...続きを読む

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...続きを読む

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...続きを読む

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で試しました。

QMS Office Word のマクロで行列の現在位置を取得したいのですが?

Wordで、マクロを組んで、文書から必要箇所を抽出したいと思います。
SelectionオブジェクトのFindプロパティーで文字を検索し、その検索した文字の行、列位置を数値として取得したいのですが、方法が分かりません。
教えて頂ければ幸いです。
【技術者向け】コンピューターで質問しましたが、カテゴリーがずれていたのか回答頂けませんでした。よろしくお願いします。

Aベストアンサー

こんばんは。

いまいち、質問の意味が理解できていないのです。

>SelectionオブジェクトのFindプロパティーで文字を検索し、その検索した文字の行、列位置を数値として取得したいのですが、方法が分かりません。

行と列は、Cells プロパティで、Table がないと、存在しません。
もし、Table があれば、文字検索で「行と列」が、出てくるのでしょうけれども、そうではないような気がします。

それと、本来は、検索して現在位置(行と桁)を取得するマクロは見当たらないのは、この種のFind を使ったマクロは、それ自体が作業本位で、情報取得の目的には、Wordの場合は、あまりしないのだと思います。ステータスバー(画面下)に出てくるからですが。

もし、以下のマクロの解釈が違うようなら、また、レスを付けてください。


'-------------------------------------------------------

Sub TestMacro1()
  Dim myRange As Range
  Dim mySearch As String
  Dim a As Long, b As Long
  mySearch = InputBox("探す文字を入力してください", "検索")
  If mySearch = "" Then Exit Sub
  
  Selection.Find.ClearFormatting
  
  With Selection.Find
   '以下を省略すると誤動作が出る可能性があります。
   '必要ならオプションを入れてください。
    .Text = mySearch
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False
  End With
  Selection.Find.Execute
  Set myRange = Selection.Range
  With myRange
    '行
    a = .Information(wdFirstCharacterLineNumber)
    '桁
    b = .Information(wdFirstCharacterColumnNumber)
  End With
  MsgBox a & " 行 " & b & " 桁"
End Sub

こんばんは。

いまいち、質問の意味が理解できていないのです。

>SelectionオブジェクトのFindプロパティーで文字を検索し、その検索した文字の行、列位置を数値として取得したいのですが、方法が分かりません。

行と列は、Cells プロパティで、Table がないと、存在しません。
もし、Table があれば、文字検索で「行と列」が、出てくるのでしょうけれども、そうではないような気がします。

それと、本来は、検索して現在位置(行と桁)を取得するマクロは見当たらないのは、この種のFind を使ったマ...続きを読む

QエクセルVBA 図形の選択法は?

セル範囲をコピー
図としてペースト
ペーストされた図形を選択

記録マクロで書くと下記のようになります。
Sub Macro1()
Range("G2:K15").Select
Selection.Copy
Range("A1").Select
ActiveSheet.Pictures.Paste.Select
ActiveSheet.Shapes.Range(Array("Picture 1")).Select
End Sub

・場所を指定してペーストするのは、事前にselectする必要あるのでしょうか?
・挿入された図の名前がPicture1と分ってないと選択出来ません。他に方法あるのでしょうか?
図は複数あり、たった今ペーストした図形を選択したいのです。

参考になるURLあるいは書籍はないでしょうか?

Aベストアンサー

>挿入された図の名前がPicture1と分ってないと選択出来ません。他に方法あるのでしょうか?

Pasteする際に、Excelが勝手につけた名前を変数に保存して、その名前でSelectすることができます。

名前の保存は、こんな感じで。
MyPicName = ActiveSheet.Pictures.Paste.Name  ’Pasteと同時に、その名前を変数に代入します。

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

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
で削除できます。

QエクセルVBAで画像を貼り付ける座標設定方法は?

Sheets("Sheet1")に貼り付けたJ-pegの画像(=シンボルマーク)を別なシートに貼り付けるのは下記のVBAで出来ました。ただ、これでは貼り付け先のシートのセルK12が、貼り付け元のK12と同じ位置でないと思った場所に張り付きません。
そこでセルで場所を指定するのではなく、座標のようなもので指定する方法はないものかと考えた次第です。
オートシェイプなどは座標指定で作成できるのですが、J-pegのような画像はどうすればいいのでしょうか?

Sub TEST()
Sheets("FACE").Shapes("シンボルマーク").Copy
ActiveSheet.Range("K12").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

#1です。
>この場合、ファイルをエクセルにくっつけて渡すなんてこと
>はできないものでしょうか?(別々にではなくあくまでエク
>セルのブックに付属した形で)
Excelのブックに付属した形にするなら、コピーペーストする方がいいと思います。一旦挿入した画像を別途保存するのは、簡単には出来ないと思います。

複数のシートで同じような作業をするなら、次のような方法も考えられます。
Function CpyMrk(MrkNM As String, myTop As Single, myLeft As Single)
Sheets("FACE").Shapes(MrkNM).Copy
ActiveSheet.Paste
ActiveSheet.Shapes(MrkNM).Top = myTop
ActiveSheet.Shapes(MrkNM).Left = myLeft
End Function

Sub test()
CpyMrk "シンボルマーク", 10, 10
End Sub


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

人気Q&Aランキング