システムメンテナンスのお知らせ

Excel 2016のVBAで、ユーザフォームではなくワークシート上のテキストボックス中の文字列に対して、その色を変更する方法をご教示頂きたくお願いいたします。

ワークシート Sheet1 上のテキストボックス TextBox 1 中の文字列の色を赤にするのに
Worksheet(1).TextBoxes(1).Text.Font.Color = vbRed
には、「オブジェクトが必要です。」のエラーとなっています。

gooドクター

A 回答 (6件)

なにか、話が違ってきてしまっていますね。


確かに、文字を入れるということでしたら、
Worksheets("Sheet1").TextBoxes("TextBox 1").Text ="abcdefg"
で可能です。

>Worksheets("Sheet1").TextBoxes("TextBox 1").Text.Font.Color = vbRed
>  .Text.Font.Color テキストプロパティはありません。
このような書き方はしないと書いたつもりが、あらぬ方向にいってしまいました。

それについては謝罪します。

改めて、チェックし直しました。
フォームコントロールのTextBox のプロパティ
途中で欠けていたものを、書き出しました。
----------------------------
Addlndent, Application, AutoSize, Border, BottomRightCell, Caption, Creator, Enabled, Font, Formula, Height, Horizontal Alignment, Index, Interior, Left, Locked, LockedText, Name, On Action,
Orientation, Parent, Placement, PrintObject, RoundedCorners, Shadow, Text, TopLeftCell, VerticalAlignment, Visible, Width, ZOrder (全部使えるかは分かりません

----------------------------
#5で、私が書いた趣旨は、その対象のオブジェクトは、質問の際に指定しないと、答えられないということだったのが、話がうやむやになってしまいしまた。そして、テキストボックスには、概ね、二種類あるということでした。

ご質問は、文字の色を変えるですよね。文字そのものを変えるではありませんよね。

Worksheets("Sheet1").TextBoxes("TextBox 1").Font.Color = vbRed
もしくは、
Worksheets(1).TextBoxes(1).Font.Color = vbRed
(Sheets(1).TextBoxes(1).Font.ColorIndex = 3)

こちらが書いていないような書き加えなどせずに、プロパティはそのままで、もしエラーが発生するようでしたら、オフジェクトを必要とするエラーが出るなら、もう一度教えてください。
    • good
    • 0
この回答へのお礼

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

ご提示いただきました Worksheets("Sheet1").TextBoxes("TextBox 1").Font.Color = vbRed は上手くいきました。

当然ながら、残りの2例もOKです。

ありがとうございました。

お礼日時:2018/06/28 01:23

#3の回答者です。



>Worksheets("Sheet1").TextBoxes("TextBox 1").Text.Font.Color = vbRed
  .Text.Font.Color テキストプロパティはありません。
>やっぱり、「実行時エラー '424':オブジェクトが必要です。」になります。

私は、そんなことは書いていないのですが。
ご質問者さんの場合は、TextBox オブジェクトには、Text プロパティがなどありません。ないプロパティ名をつけているのでは、エラーになるのは当然なのです。

Worksheets(1).TextBoxes(1).Font.Color = vbRed
()の中は、index つまり、オブジェクトの順番。オブジェクト名が正しく入れているのかどうかは、こちらでは分かりません。まして、フォームのTextBox そのものがあるのかさえ、こちらでは分かりません。(現行では、Win10の大幅のアップデートで、ActiveX の使用を不可にしていらい、フォームコントロールが主流になりつつあるけれども、本当に使えこなせる人は、前から使ってきた人以外は、教わらないと難しいです)

それから、TextBoxes というのは、フォームコントロール・オブジェクトのコレクション名。
TextBoxes の正しく名称が入るなら、それはそれで、構わないが、意外に失敗が多いのは、二重の名称があるせいだと思います。なお、Shapes というのは、これらと図形を含めたオブジェクトの総称名。

質問の元の文章の書き方は、フォームコントロールのものです。ActiveX コントロールの場合は、これはまったく違います。フォームコントロールは、挿入-図形から出します。開発側ではありません。開発側にあるのは、テキストフィールドと言います。

ご質問者さんが、貼り付けたものは、フォームかActiveX かとか、最初から、話をもう一度整理しなおしたほうがよいと思います。失礼ですが、このレベルで間違えるとなると、最初の質問のコードも正しいか、疑わしくなってしまいます。

ActiveX の場合は、デザインモード(開発タブ内)にしておいて、ダブルクリックすれば、そのシートのVBエディターに飛びますが、フォームは、飛ぶことはありません。右クリックして、マクロの登録をクリックしなければなりません。

添付画像は、TextBoxフォームの ヘルプの内容。現在はヘルプには存在しません。
「テキストボックス中の文字列の色を変更する」の回答画像5
    • good
    • 0
この回答へのお礼

お世話になっております。

試してみた、Sheets(1).TextBoxes(1).Text = "Hello World!" が、該テキストボックスへの書き込みができています。

また、ご指摘の「TextBox オブジェクトには、Text プロパティがなどありません。」は、当たってないのでは?

お礼日時:2018/06/27 14:35

No.2の回答者です。



何故、ActiveSheetではなくWorksheets(1)にこだわるの?
No.3の回答者さんも書いていますが、Worksheets(1)は一番左端に
あるシートにあるものを処理するものです。
シート指定するならWorksheets("Sheet1")などにします。

お礼の実行時エラーは、一番左端のシートにテキストボックスなど
のShapesが何もないときのエラーだと思います。
開いているシート上にあるテキストボックスの文字を処理するなら
ActiveSheetが確実です。

紹介したURL先のマクロも、そのように書かれていますよね

Sub Shape内文字列の色変更_TextFrame2()
 ActiveSheet.Shapes(1) _
  .TextFrame2.TextRange.Font.Fill.ForeColor.RGB _
   = RGB(255, 0, 0)
End Sub

上記をそのまま記載して実行。
これで問題がないのならば、特定シートを指定し直すようにすれば
済むことだと思いますよ。
https://excel-ubara.com/excelvba1/EXCELVBA337.html

Sub シート指定したShapeでの文字列の色変更_TextFrame2()
 Workshets("シート名").Shapes(1) _
  .TextFrame2.TextRange.Font.Fill.ForeColor.RGB _
   = RGB(255, 0, 0)
End Sub
    • good
    • 0
この回答へのお礼

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

Worksheet(1)、ActiveSheetについては、了解しました。
試してみた、Sheets(1).TextBoxes(1).Text = "Hello World!" が、該テキストボックスへの書き込みができていましたので、そのまま使っていました。

 ActiveSheet.Shapes(1) _
  .TextFrame2.TextRange.Font.Fill.ForeColor.RGB _
   = RGB(255, 0, 0)
では、先のお礼に書きましたのと同じエラーになります。

お礼日時:2018/06/27 14:22

こんにちは。



Worksheets(1).TextBoxes(1).Font.Color = vbRed

TextBoxes というのは、フォームコントロールの Ver.95 のオブジェクト名で、今は、ヘルプにも出てこないはずです。

「オブジェクトが必要です。」
というのは、Worksheet というオブジェクトは存在しないからです。
通常は、Worksheets("Sheet1") という名称にします。
Worksheets(1) というのは、少し意味か違います。左端にあるワークシートという意味です。
    • good
    • 1
この回答へのお礼

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

Worksheets("Sheet1").TextBoxes("TextBox 1").Text.Font.Color = vbRed
としましたが、
やっぱり、「実行時エラー '424':オブジェクトが必要です。」になります。

お礼日時:2018/06/23 01:55

ワークシートにある図形としてのテキストボックスならば、


Shapeを使ってTextFrame2オブジェクトで指定します。
https://www.relief.jp/docs/excel-vba-change-font …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

Worksheets(1).Shapes(1) _
.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
としましたが、

「実行時エラー:'-2147024809(80070057)' 指定された値は境界を超えています。」となりました。

お礼日時:2018/06/23 01:45

Worksheet(1).TextBoxes(1).Textbox.forecolor


じゃないかな?

https://msdn.microsoft.com/ja-jp/vba/access-vba/ …
    • good
    • 1
この回答へのお礼

早速回答頂きありがとうございます。

ご教示どおりに修正して実行しましたが、
「実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません。」となりました。

お礼日時:2018/06/23 01:27

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング