• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WORD VBA)

How to Automatically Input RGB Information in Word VBA

このQ&Aのポイント
  • Learn how to automatically input RGB information in Word VBA using a software that displays the color information at the mouse position.
  • Currently, the RGB information is manually inputted using an input box, but you can make use of the information already copied to the clipboard.
  • By incorporating the clipboard content into the VBA macro, you can automatically set the RGB values and update the selected shape's fill color.

質問者が選んだベストアンサー

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

すいません、ざっくりとですが。 Dim CB As New DataObject, buf As String, Arr As Variant Dim R As Integer, G As Integer, B As Integer   CB.GetFromClipboard   buf = CB.GetText   buf = Mid(buf, 5, Len(buf) - 5)   Arr = Split(buf, ",")     R = Arr(0)     G = Arr(1)     B = Arr(2)   Selection.InlineShapes(1).Fill.BackColor = RGB(R, G, B)   'または図形を選択して   Selection.ShapeRange.Fill.ForeColor.RGB = RGB(R, G, B) End Sub 先にMidを使って、クリップボードの内容から必要な部分だけ引き出しておきます。   Rgb(255,99,100) → 255,99,100 それをSplitを使って","で区切り、配列に格納、それぞれをR,G,Bに割り当てます。   R=255  G=99  B=100 多分、大丈夫だと思うのですが・・・

oldhidesan
質問者

お礼

tsubuyukiさん ありがとうございました。私が希望する結果になりました。お世話になりました。

その他の回答 (2)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

> Sample2で試したところ、CB As New DataObjectのところで、「ユーザー定義型は定義されていません。」と表示 これが回答中の >> Microsoft Forms 2.0 Object Libraryを参照設定しておかないと >> DataObjectを定義するところでエラーで止まります。 >> ツール→参照設定で見当たらない場合は、空のユーザーフォームを作るフリをすると出てきます。 の部分に当たります。 ・・・と言うかすいません^^; 画像を添付したらよかったですね^^; VBE(マクロを書くウィンドウ)のメニュー、 ツール→参照設定 を選択すると、図のようなダイアログが出てきますので、 「Microsoft Forms 2.0 Object Library」を探してチェックを入れてやってください。 これで見当たらない時はVBEのメニュー、挿入→ユーザーフォーム を選択し、 空のユーザーフォームを作り、そのあとで参照設定をもう一度してみてください。 今度は上の方にチェックが入った状態で出てくると思います。 その後、先般のマクロを走らせると、今度は動くようになっている・・はずです^^;

oldhidesan
質問者

お礼

tsubuyukiさん ありがとうございます。ご返事を見る前に補足として書き込みさせてもらいました。定義の件は解決したのですが、新しい質問を補足でさせてもらいました。 よろしくお願いします。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

その > マウスがある位置の色の情報を表示するソフト がどんなソフトで、クリップボードにどのように格納されているかハッキリしませんが・・ とりあえず、 Sub Sample() Dim CB As New DataObject,buf As String      CB.GetFromClipboard  'CBにクリップボードをDataObjectとして取得   buf = CB.GetText    '変数bufにクリップボードのデータの文字を取得   MsgBox buf       '取得した文字をメッセージボックスに表示 End Sub こんな感じでクリップボードから取り出せます。 この場合、クリップボードの中身が「文字(または準ずるもの)」じゃないとエラーが返ります。 ちなみに、Microsoft Forms 2.0 Object Libraryを参照設定しておかないと DataObjectを定義するところでエラーで止まります。 ツール→参照設定で見当たらない場合は、空のユーザーフォームを作るフリをすると出てきます。 おっしゃる通り、 > クリップボードに”RGB(204, 035, 035)”が入って いるのであれば、 Sub Sample2() Dim CB As New DataObject, buf As String Dim R As Integer, G As Integer, B As Integer   CB.GetFromClipboard   buf = CB.GetText     R = Mid(buf, 5, 3)     G = Mid(buf, 10, 3)     B = Mid(buf, 15, 3)   Selection.InlineShapes(1).Fill.BackColor = RGB(R, G, B)   'または図形を選択して   'Selection.ShapeRange.Fill.ForeColor.RGB = RGB(R, G, B) End Sub で、出来る・・と思うのですが^^; 2007は手元に無いので確認とれずです、すいません^^;;

oldhidesan
質問者

お礼

tsubuyukiさん、早速ありがとうございます。 RGB(204,035,035)とクリップボードに入っていますので、Sample2で試したところ、CB As New DataObjectのところで、「ユーザー定義型は定義されていません。」と表示されてエラーになってしまいました。VBAが初心者で良く理解できておりません。よろしくご指導お願いします。 なお、RGB表示にスペースがありませんでしたので、G = Mid(buf, 9, 3) B = Mid(buf, 13, 3) に書き直ししました。

oldhidesan
質問者

補足

tsubuyukiさんが説明されていたのに、私が見過ごしました。定義の問題は解決しました。 ところが私の間違いで、RGBが全て3桁でないことが分かりました。1桁もあれば、2桁もあります。この場合には当然エラーになってしまいます。何か解決方法はないでしょうか? Sample1も問題なクリップボードの内容が表示されますが、 Selection.InlineShapes(1).Fill.BackColor = buf として受け渡すと「型が違う」となってしまいます。どのような型にすればよいのでしょうか? お手数をおかけしますが、よろしくお願いします。

関連するQ&A