none
Excelアドインでフリーフォームを入力モードにしたい RRS feed

  • 質問

  • 【OS】
    Windows10

    【実行したExcelのバージョン】
    Office 365 MSO (16.0.12527.20986) 64ビット

    【やりたいこと】

    以下の処理をExcelアドインにする

    ・リボンにボタンを追加

    ・ボタンを押すとフリーフォームの入力モードになる

    (図形を固定で挿入するのではなく、クリックでユーザが図形を入力できる状態にしたいです)

    ・Escまたはダブルクリックで図形を挿入

    【起きている問題】

    ・リボンのボタンを押してフリーフォームを実行した際、初回のみ入力中の図形が表示されない

    ・Escまたはダブルクリックで入力モードを終了すると図形が表示される
    ・2回目以降は入力中も図形が表示される
    ・挿入→図形→フリーフォームを実行した後、リボンのボタンからフリーフォームを実行すると図形が表示される

    C#とVBAで試してみましたが、どちらも同じ現象が起こりました。

    VisualStudioのVisual Studio Tools for Office (VSTO)を使用(C#)
    var ctr = Globals.ThisAddIn.Application.CommandBars.FindControl(Id:200);
    ctr.Execute();

    マクロから.xlamを作成(VBA)
    Dim ctr
    Set ctr = CommandBars.FindControl(ID:=200)
    ctr.Execute

    図形を挿入する際に実行しなければいけない処理があるのでしょうか?

    初歩的な質問で申し訳ございませんが、よろしくお願いいたします。
    2020年8月28日 0:58

回答

  • こんにちは。
    ExecuteMsoメソッドでコマンドを実行してはいかがでしょうか。

    Public Sub Sample()
      Const id As String = "ShapeScribble" 'フリーハンド
      With Application.CommandBars
        '[フリーフォーム: フリーハンド]が押されていない状態であれば実行
        If .GetPressedMso(id) = False Then .ExecuteMso id
      End With
    End Sub


    • 回答としてマーク AraiM7 2020年8月31日 1:54
    2020年8月28日 11:43

すべての返信

  • こんにちは。
    ExecuteMsoメソッドでコマンドを実行してはいかがでしょうか。

    Public Sub Sample()
      Const id As String = "ShapeScribble" 'フリーハンド
      With Application.CommandBars
        '[フリーフォーム: フリーハンド]が押されていない状態であれば実行
        If .GetPressedMso(id) = False Then .ExecuteMso id
      End With
    End Sub


    • 回答としてマーク AraiM7 2020年8月31日 1:54
    2020年8月28日 11:43
  • きぬあささん初めまして。

    無事に表示することができました。

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

    2020年8月31日 1:54