いつもお世話になってます。早速ですがWordマクロで質問させてください。

【経緯】Wordで「写真加工機能付き文書」を作成しました。次に「写真のサイズを変更するボタン」を実装したいと思い、以下まではなんとか実現しました。

・ツールバーを自作し「大」「中」「小」ボタンと機能を設ける。

・文書に写真ファイル添付→写真ファイル選択→サイズ変更ボタンで一発サイズ変更。

 ・・・この機能(ボタン)の弱点は、複数写真に対して変更を行う場合、各ボタンの間を何度も往復しなければならない事(^^;)。

 サイズ変更は性質上写真を見ながら行う必要があり、添付時点でのサイズ自動変更は仕様として考慮外です。

 そこで「サイズ変更ボタン」を一度押し「変更モード」とする事が出来れば、以降は写真をクリックだけでサイズ変更が出来ると思いました。

 機能実現に向け、自作ツールバーに「押し放し」になるボタンをつけました。「写真サイズ変更モード」とする事が目的です。

【問題点】以降がうまく行きません。ボタンに処理を書くと、その処理が終わるまでユーザに主導権が返ってこず、これでは次のステップ「サイズ変更したい写真の選択」が出来ません(T_T)。

 ・・・「文書に添付した写真ファイルを選択」時に何らかのイベントが発生していれば、捕まえて処理をすることが可能なのかなとは思います。

 また、Excelの様にワークシートクリックでイベントが発生するならこれを利用できるとは思ったのですが、残念ながらWordでは文書クリックでイベント発生しない様です。
 例えばイベント発生の仕組みを自作する事なんて、出来ないですよねぇ(^^;)?

 是非実装したい機能なので、何か解決する方法があれば教えて頂きたいのです。長文質問で質問意図が判り難いかもしれませんが、なんとかよろしくお願いしますm(_ _)m。

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

A 回答 (2件)

webdiverさんこんにちは


> これ(Imageコントロール)を使うと、文書ファイルのサイズが異常に大きくなってしまう

うっ(汗)確かに。そのまま保存すると格段にファイルサイズが大きいですね、私もやってみて気づきました。しかし、ドキュメントのCloseイベントで、Picturプロパティのビットマップをすべて開放すればファイルサイズはそんなに大きくなりません。あるいは、ドキュメントのOpen時やClose時にImageコントロールごと作成したり削除したりしちゃえば、もっとファイルサイズを小さくすることができますよ。
> なんとか、現行維持のままで機能実現は出来ないものでしょうか・・・。
では、苦し紛れ&少しややこしいのですが(笑)右クリックでの方法を提案してみます。右クリックで発生するイベントを作って、オブジェクトが選択されていれば、サイズ変更、そうでないときはエラートラップを流すものです。(wordヘルプから抜粋改造)
まずクラスモジュール(Class1)を作成して以下のコードを記入します。

Public WithEvents App As Word.Application
Private Sub App_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
On Error GoTo IvEND
MsgBox ActiveWindow.Selection.ShapeRange.Name & "を編集します"
'---ここにオブジェクトの編集マクロ(ルーチン)名を記入---
IvEND:
End Sub

次に標準モジュールに以下のコードを記入します

Dim X As New Class1
Sub Register_Event_Handler()
Set X.App = Word.Application
End Sub

これで、右クリック時にオブジェクト(図形)が選択された状態であれば、編集マクロに処理が飛ぶでしょう。なお、Register_Event_Handlerは、ヘルプにもあるように、クラスモジュールに宣言したオブジェクトの初期化を行うマクロですから、ドキュメントオープン時か、ツールボタンを押した直後に1回だけ実行するようにしておくとよいでしょう。
-Word2000にて動作確認-
    • good
    • 0
この回答へのお礼

TTakさん、こんにちは。お世話になっておりますm(_ _)m。

 今回のお答えを早速自分の環境で試してみました。結果、仰るように右クリックイベント表示が実現しました(^^)!
大袈裟でなく感動しましたよ、ホント(^^)。ありがとうございます。このヒントを応用すれば、目的が実現出来そうです。

 でも、「クラス」を扱った経験が無かった自分にとっては、これからが勉強です(^^;)、これらのソースを自分のモノ
にする為、持ち帰って連休に格闘したいと思います。・・・しかし奥が深いですねぇプログラムって。

 ホントに助かりました。どうもありがとうございましたm(_ _)m。

お礼日時:2001/05/02 20:37

webdiverさんこんにちは


コーディングではなく、オブジェクトの変更を提案します。
写真を表示するオブジェクトを、Wordのオブジェクトから、VBAコントロールである"Image"(コントロールツールボックスのメニューボタンから選択)に変更すればクリックイベントを捕まえられます。
    • good
    • 0
この回答へのお礼

 TTakさん、早速のご回答ありがとうございました。
早速自分の知識の範囲でImageObjectを試してみました。

 ・・・・・なるほどImageだと、クリックイベントが書けるんですねぇ、発想の転換といいますか、自分では気づかなかった考え方です(^^)。ありがとうございます。

 でも、ちょっと問題が。これを使うと、文書ファイルのサイズが異常に大きくなってしまうんですね(^^;)。普段は一枚数十キロのjpegファイルを使っているのですが、Imageだとビットマップで扱われるのでしょうか、一気に数百キロからメガ単位にまでなってしまいます(T_T)。

 質問事項に書いていない自分が悪いのですが、非力な環境で頑張っておりますので(笑)、一文書あたりの容量削減はもう一つの課題であったりしますm(_ _)m。

 なんとか、現行維持のままで機能実現は出来ないものでしょうか・・・。

お礼日時:2001/05/01 15:56

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

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

QVBAで写真参照→写真サイズ変更したい

VBAでアルバムを作ろうと思っています。
まず、
エクセル内に「写真読込み」というボタンを設置し、
そのボタンを押すと、エクセルで見られる
ツールバー 挿入→図→ファイルからと同じ様にファイルの参照画面が表示され、任意の写真のファイル(jpg・gif限定)をクリックし、
開くボタンを押すと、エクセル上の任意のセルに230×173の指定の大きさで写真が表示されるという様に制作したいと思います。
VBAについては、まだまだ初心者ですので、
コードと説明を教えて下さい。
宜しくお願いします。

Aベストアンサー

こんにちは。

マクロの記録だけでは厳しいでしょうから、簡単なサンプルです。
アクティブシートのアクティブセルに画像を挿入します。

ボタンに登録するコード

Sub sample()
Dim pic
With Application.FileDialog(msoFileDialogOpen)
.Title = "画像取り込み"
.Filters.Clear
.Filters.Add "画像ファイル", "*.jpg;*.gif"
.AllowMultiSelect = False
'.InitialFileName = "D:\MyDocuments"
.InitialView = msoFileDialogViewPreview
If .Show <> 0 Then
Set pic = ActiveSheet.Pictures.Insert(.SelectedItems(1))
With pic
.Width = 230
.Height = 173
End With
Set pic = Nothing
Else
MsgBox "画像が選択されていません。"
End If
End With
End Sub

サムネイル表示の方が良ければ、
.InitialView = msoFileDialogViewPreview
の定数をmsoFileDialogViewThumbnail
に変更してください。

InitialFileNameは必要ならコメントを外して
適当に設定して下さい。

こんにちは。

マクロの記録だけでは厳しいでしょうから、簡単なサンプルです。
アクティブシートのアクティブセルに画像を挿入します。

ボタンに登録するコード

Sub sample()
Dim pic
With Application.FileDialog(msoFileDialogOpen)
.Title = "画像取り込み"
.Filters.Clear
.Filters.Add "画像ファイル", "*.jpg;*.gif"
.AllowMultiSelect = False
'.InitialFileName = "D:\MyDocuments"
.InitialView = msoFileDialogViewPreview
If .Show <> 0 Then
...続きを読む

QWORDでの文書サイズ変更

WORDでA4縦のサイズで4ページの文章を作成しました。これを
A3横のサイズで4ページの資料のような形で印刷したいと思います。
印刷後、半分に折ってA4縦サイズのパンフレットのような形に
させたいということになります。そこで
(1)A4縦のレイアウトをA3横のレイアウトに現在の書式を変えることなく移行?可能か
(2)可能な場合、現在のページで言うと表面が4P→1P、裏面が2P→3Pという順序で印刷できるか
の2点について返答いただきたいです。

では、よろしくお願い致します。

Aベストアンサー

# 実際に試していませんが...

[ファイル]-[ページ設定]において、
[余白]-[印刷の形式]で「本(縦方向に谷折り)」を選択して、
[用紙]-[用紙サイズ]で「A3」を選択して、[OK]。

QWord 2003 文書のサイズ変更

Wordで作った文書を印刷して人に配ります。
A4サイズの紙、一人一枚ではもったいないので
作った文書を1/4サイズに縮めてWordの新規作成に
4つ貼り付けてA4サイズで印刷しカッターで切って
同じ文書を4枚作りたいのですが方法がわかりません。

どうやったらいいのでしょうか?

Aベストアンサー

No.3です。

> 端の文字が重なった状態になります。

横長用紙の場合は、Wordの機能ではダメみたいですね。
プリンタの機能(ドライバー)での印刷をお試し下さい。

1) 「Ctrl」キーを押しながら「P」キーを押すと「印刷」ダイアログボックスが表示されます。
2) プリンタ名の右にある「プロパティ」をクリックすると、「プリンタ名のプロパティ」のダイアログボックスが表示されます。

3) 「ページ設定」タブを開いて、「印刷の向き」を「横」に指定し、「ページレイアウト」で「割付印刷」を選択し、「詳細設定」ボタンを押して、「ページ数」を「4ページ印刷」に設定し、「OK」→「OK」でダイアログを綴じます。
(注)こ以上はCANONのプリンタでの設定です。お使いのプリンタによって多少文言が違いますが、同じような設定項目があると思います。

4) 「印刷範囲」欄のラジオボタンをオンにして、「1,1,1,1」のように半角英数字で印刷ページを指定します。

5) 「印刷部数」欄で、必要部数を指定して「OK」を押します。
(注)「拡大/縮小」欄では、何も設定しません。

No.3です。

> 端の文字が重なった状態になります。

横長用紙の場合は、Wordの機能ではダメみたいですね。
プリンタの機能(ドライバー)での印刷をお試し下さい。

1) 「Ctrl」キーを押しながら「P」キーを押すと「印刷」ダイアログボックスが表示されます。
2) プリンタ名の右にある「プロパティ」をクリックすると、「プリンタ名のプロパティ」のダイアログボックスが表示されます。

3) 「ページ設定」タブを開いて、「印刷の向き」を「横」に指定し、「ページレイアウト」で「割付印刷」を選択し、...続きを読む

Qワード文書へのエクセルファイル埋め込み時のサイズ変更について

ワード文書へエクセルファイルをリンクして埋め込んだ際、一枚目のシートの一部がワード文書上に表示されます。
私の例では、5列ある表が3列しか表示されず、残りの二列は隠れてしまっています。拡大や縮小をしても、3列分の表のサイズがかわるのみで、表示範囲は変更されません。
エクセルファイルの方でページ設定をしても、1ページに相当する部分を表示してもらえませんでした。
表示範囲を変更するには、どのような手順を踏めば良いのでしょうか。

Aベストアンサー

ワード上に挿入されたエクセルの表の上(どこでもOK)をダブルクリックして下さい。
そうするとエクセルの表が編集モードになってカラーになると思います。その状態で枠を右に広げれば表示される列は増えます。

QB4サイズで作った文書をレイアウトを変えずにA4に変更したい

ワード2003です。
「B4」で文書を作りましたが 
印刷をA4でするのではなく
文書そのものを「A4」に
変更しなければならなくなりました。

フォントサイズは、小さくなってもいいのですが
レイアウトを変更しないでA4にする方法を教えてください。

Aベストアンサー

文書ファイルのままではできません。
画像にして貼り付けるなら可能ですが、それでは編集ができません。
そんな都合のいい方法があるなら、私が知りたいです。

ページ設定でA4に変更して、チマチマ直していくしかないですね。


このカテゴリの人気Q&Aランキング

おすすめ情報