- ベストアンサー
How to Automatically Input RGB Information in Word VBA
- 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.
- みんなの回答 (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 多分、大丈夫だと思うのですが・・・
その他の回答 (2)
- tsubuyuki
- ベストアンサー率45% (699/1545)
> Sample2で試したところ、CB As New DataObjectのところで、「ユーザー定義型は定義されていません。」と表示 これが回答中の >> Microsoft Forms 2.0 Object Libraryを参照設定しておかないと >> DataObjectを定義するところでエラーで止まります。 >> ツール→参照設定で見当たらない場合は、空のユーザーフォームを作るフリをすると出てきます。 の部分に当たります。 ・・・と言うかすいません^^; 画像を添付したらよかったですね^^; VBE(マクロを書くウィンドウ)のメニュー、 ツール→参照設定 を選択すると、図のようなダイアログが出てきますので、 「Microsoft Forms 2.0 Object Library」を探してチェックを入れてやってください。 これで見当たらない時はVBEのメニュー、挿入→ユーザーフォーム を選択し、 空のユーザーフォームを作り、そのあとで参照設定をもう一度してみてください。 今度は上の方にチェックが入った状態で出てくると思います。 その後、先般のマクロを走らせると、今度は動くようになっている・・はずです^^;
お礼
tsubuyukiさん ありがとうございます。ご返事を見る前に補足として書き込みさせてもらいました。定義の件は解決したのですが、新しい質問を補足でさせてもらいました。 よろしくお願いします。
- tsubuyuki
- ベストアンサー率45% (699/1545)
その > マウスがある位置の色の情報を表示するソフト がどんなソフトで、クリップボードにどのように格納されているかハッキリしませんが・・ とりあえず、 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は手元に無いので確認とれずです、すいません^^;;
お礼
tsubuyukiさん、早速ありがとうございます。 RGB(204,035,035)とクリップボードに入っていますので、Sample2で試したところ、CB As New DataObjectのところで、「ユーザー定義型は定義されていません。」と表示されてエラーになってしまいました。VBAが初心者で良く理解できておりません。よろしくご指導お願いします。 なお、RGB表示にスペースがありませんでしたので、G = Mid(buf, 9, 3) B = Mid(buf, 13, 3) に書き直ししました。
補足
tsubuyukiさんが説明されていたのに、私が見過ごしました。定義の問題は解決しました。 ところが私の間違いで、RGBが全て3桁でないことが分かりました。1桁もあれば、2桁もあります。この場合には当然エラーになってしまいます。何か解決方法はないでしょうか? Sample1も問題なクリップボードの内容が表示されますが、 Selection.InlineShapes(1).Fill.BackColor = buf として受け渡すと「型が違う」となってしまいます。どのような型にすればよいのでしょうか? お手数をおかけしますが、よろしくお願いします。
お礼
tsubuyukiさん ありがとうございました。私が希望する結果になりました。お世話になりました。