tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15600
投稿日: 2012/09/27(Thu) 10:02
投稿者momo
VB6.0SP6
WindowsXPSP3
VB6.0歴:3年

VB6.0で作成したEXEから、パワーポイント(Office2000)を起動します。
起動したパワーポイント上には、レ点が入れられるようになっています。
レ点は、パワーポイントのツール-マクロ-VisualBasicEditorで
作成しました。

実現したい機能は、レ点が全て入力されたら、次のページに進むように
EXE側で監視したいと考えています。

実現方法がわからないので、ご存知の方教えてください。
よろしくお願い致します。

[ツリー表示へ]
タイトルRe: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15601
投稿日: 2012/09/28(Fri) 09:28
投稿者オショウ
> 実現方法がわからないので、ご存知の方教えてください。

  やり方(方法の選択)が間違っていると思いますが・・・

  SPY++ で、PowerPointのコンテンツの画面のリソースの名前と
  ハンドルが取れるのを確認できれば、可能かと思います。

  ただ、次のページに進むように・・・と言う部分は、どういう
  インターフェースで進む設定になっているのでしょうか?
  それによっては、無理かもしれません。

  要は、FindWindowやFindWindowExで、チェックボックスや
  ボタン等のハンドルを取得し、SendMessageやPostMessage
  を送り、遠隔操作することになります。

※ ハンドルが取れても動作するのかどうかは、PowerPointで
  やったことないので、解りません。

以上。参考まで

[ツリー表示へ]
タイトルRe: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15602
投稿日: 2012/09/28(Fri) 10:27
投稿者魔界の仮面弁士
> 実現したい機能は、レ点が全て入力されたら、次のページに進むように
> EXE側で監視したいと考えています。

そのチェックボックスを配置したスライドに対して、
下記のような VBA を仕込んでみては如何でしょう。



Option Explicit

Private Sub GoForward()
    If CBool(CheckBox1.Value) And CBool(CheckBox2.Value) Then
        ActivePresentation.SlideShowWindow.View.Next
    End If
End Sub

Private Sub CheckBox1_Click()
    GoForward
End Sub

Private Sub CheckBox2_Click()
    GoForward
End Sub

[ツリー表示へ]
タイトルRe^2: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15603
投稿日: 2012/10/02(Tue) 10:46
投稿者momo
オショウ様、魔界の仮面弁士様
回答ありがとうございます。

魔界の仮面弁士様から教えていただいた方法で出来ればと思うのですが、
VB6.0でオブジェクトを連想配列のように扱えますが、(プロパティのIndex)
VBAではどうすれば、Indexの設定ができるのかわかりませんでした。

ご存知でしたら教えてください。
よろしくお願い致します。

[ツリー表示へ]
タイトルRe^3: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15604
投稿日: 2012/10/02(Tue) 13:28
投稿者魔界の仮面弁士
> VBAではどうすれば、Indexの設定ができるのかわかりませんでした。

コントロール配列は使えないので、自前で配列等に入れておくか、
もしくはコントロールの名前を使って検索するようにします。

Private Sub GoForward()
    Dim n As Integer
    Dim chk As MSForms.CheckBox
    Dim controlName As String
    
    Dim checkedCount As Integer
    checkedCount = 0
    
    For I = 1 To 3
        'コントロールの名前で検索(見つからないとエラー)
        controlName = "CheckBox" & CStr(I)
        Set chk = CallByName(Me, controlName, VbGet)
        If CBool(chk.Value) Then
            checkedCount = checkedCount + 1
        End If
    Next
    
    If checkedCount = 3 Then
        ActivePresentation.SlideShowWindow.View.Next
    End If
End Sub

[ツリー表示へ]
タイトルRe^4: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15605
投稿日: 2012/10/11(Thu) 13:04
投稿者momo
出張に出ていたため返信が遅くなって申し訳ありません。

コントロール配列が使えない旨、了解しました。
最後に、表示しているパワーポイントの画面上にある
コントロールを検索する方法はないでしょうか。

VB6.0の場合、Form(?)を使って、Foreachで調べることが
出来たと思います。
同じようなことが、VBAで実現可能でしょうか。

[ツリー表示へ]
タイトルRe^5: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15606
投稿日: 2012/10/12(Fri) 04:10
投稿者魔界の仮面弁士
> VB6.0の場合、Form(?)を使って、
Form オブジェクトではなく、Controls コレクションでは?

> Foreachで調べることが
For Each ステートメントのことだとすれば:

Dim sh As PowerPoint.Shape
For Each sh In ActivePresentation.SlideShowWindow.View.Slide.Shapes
    If sh.Type = msoOLEControlObject Then
        If TypeOf sh.OLEFormat.Object Is MSForms.CheckBox Then
            Dim chk As MSForms.CheckBox
            Set chk = sh.OLEFormat.Object
            MsgBox sh.Name & "の Value は " & chk.Value & " です。", vbInformation, sh.OLEFormat.ProgID
        End If
    End If
Next

[ツリー表示へ]
タイトル(お礼)Re^6: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15607
投稿日: 2012/10/15(Mon) 15:57
投稿者momo
魔界の仮面弁士様、私の想いを汲んでくださりありがとうございます。

> > VB6.0の場合、Form(?)を使って、
> Form オブジェクトではなく、Controls コレクションでは?
>
> > Foreachで調べることが
> For Each ステートメントのことだとすれば:

上記、おっしゃる通りです。
おかげさまで、思った通りの動きをさせることができそうです
ありがとうございました。

[ツリー表示へ]
タイトルRe: (お礼)Re^6: VB6.0で作成したEXEから起動したパワーポイント上のレ点を監視したい
記事No15608
投稿日: 2012/10/15(Mon) 19:20
投稿者魔界の仮面弁士
If TypeOf sh.OLEFormat.Object Is MSForms.CheckBox Then

ではなく、

If Not TypeOf sh.OLEFormat.Object Is MSForms.OptionButton _
   And TypeOf sh.OLEFormat.Object Is MSForms.CheckBox Then

にする必要があるかも知れません。


「TypeOf o Is MSForms.CheckBox」の条件式が、当方では何故か
        o が OptionButton の時 → False ではなく True
        o が CheckBox     の時 → True
となってしまったためです(他の環境はどうだろう?)。ただし、
「TypeOf o Is MSForms.OptionButton」の条件式の場合は
        o が OptionButton の時 → True
        o が CheckBox     の時 → False
となりました。

[ツリー表示へ]