アプリ版:「スタンプのみでお礼する」機能のリリースについて

マウスがある位置の色の情報を表示するソフトを利用して、 RGB情報を得ています。(例 RGB(204, 035, 035) 。 次のWORDマクロ動かし、RGB情報を手入力して欲しい結果を得ています。しかし、せっかくクリップボードに”RGB(204, 035, 035)”が入っていますので、それを自動的に以下のマクロに取り入れたいと考えております。どのようにすれば良いかアドバイスお願いできないでしょうか? なお, OSはWindows7を使用しています。Wordは2007です。

Sub ColorPaste()
'
Dim Red As Integer
Dim Green As Integer
Dim Blue As Integer

Red = InputBox("赤の数字を入れてください。")
Green = InputBox("緑の数字を入れてください。")
Blue = InputBox("青の数字を入れてください。")

Selection.InlineShapes(1).Fill.BackColor = RGB(Red, Green, Blue)
End Sub

A 回答 (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

多分、大丈夫だと思うのですが・・・
    • good
    • 0
この回答へのお礼

tsubuyukiさん

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

お礼日時:2012/11/12 12:07

> Sample2で試したところ、CB As New DataObjectのところで、「ユーザー定義型は定義されていません。

」と表示

これが回答中の
>> Microsoft Forms 2.0 Object Libraryを参照設定しておかないと
>> DataObjectを定義するところでエラーで止まります。
>> ツール→参照設定で見当たらない場合は、空のユーザーフォームを作るフリをすると出てきます。
の部分に当たります。

・・・と言うかすいません^^;
画像を添付したらよかったですね^^;

VBE(マクロを書くウィンドウ)のメニュー、
ツール→参照設定 を選択すると、図のようなダイアログが出てきますので、
「Microsoft Forms 2.0 Object Library」を探してチェックを入れてやってください。
これで見当たらない時はVBEのメニュー、挿入→ユーザーフォーム を選択し、
空のユーザーフォームを作り、そのあとで参照設定をもう一度してみてください。
今度は上の方にチェックが入った状態で出てくると思います。
その後、先般のマクロを走らせると、今度は動くようになっている・・はずです^^;
「WORD VBA」の回答画像2
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/11/12 09:22

その


> マウスがある位置の色の情報を表示するソフト
がどんなソフトで、クリップボードにどのように格納されているかハッキリしませんが・・

とりあえず、

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が全て3桁でないことが分かりました。1桁もあれば、2桁もあります。この場合には当然エラーになってしまいます。何か解決方法はないでしょうか?

Sample1も問題なクリップボードの内容が表示されますが、

Selection.InlineShapes(1).Fill.BackColor = buf として受け渡すと「型が違う」となってしまいます。どのような型にすればよいのでしょうか?

お手数をおかけしますが、よろしくお願いします。

補足日時:2012/11/12 09:15
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/11/12 00:48

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