2017-12-17 1 views
0

私は手紙の条件の場合における色のためにお願いしたいと思います:Visual BasicのExcelは、文字の色を求めるためにはどのよう

string="asdfghjkl" 
for i=1 to len(string) 
    letter = mid(string, i, 1) 
    input_letter = inputbox("Write a letter") 
    if letter = input_letter 'and letter.Font.Color = RGB(31,78,120) 
     'my code here 
    endif 
next 

ザ・とletter.Font.Color = RGB(31,78,120)動作していません。それは私にオブジェクトが必要だと言います。

これに似た方法はありますか?このRGBの色は青です、と私はあなたの質問の問題について(設定EXCEL記録マクロで)青に文全体を変換

With Selection.Font 
    .ThemeColor = xlThemeColorAccent1 
    .TintAndShade = -0.499984740745262 
End With 

おかげ

+0

RGB関数はLongを返します。したがって、InputBoxではこの数値を要求できます。たとえば、 'RGB(112,15,210)= 13766512'です。 – JohnyL

答えて

1

するためにこのコードを使用しています:

.Font.Colorは、クラスRangeの財産ですが、コードのあなたの行で:

if letter = input_letter 'and letter.Font.Color = RGB(31,78,120) 

...変数letterのこのプロパティにアクセスしようとしています。これはStringです(明示的に宣言していませんが、ちょうど上記のletter = mid(string, i, 1)を実行すると自動的に宣言されます)。あなたはRangeオブジェクト(実際には、すべてではないでObject)ではない何かにプロパティ.Font.Colorにアクセスしようとしている:あなたはObject required例外を取得する理由である

。私はあなたが何をしようとして理解することはわからないんだけど

:あなたの本当の必要性について

。 Excelで単一のセルに複数の色のテキストを表示しようとしていますか?私は右のそれを持っている場合は、文字列があります:

string="asdfghjkl" 

を(注意してください:あなたの変数Stringを呼び出すことはできません、それはコードのために予約されたキーワードです何か他のものにそれを呼び出すと考えてください。私はあなたがすでにあなたの実際のコードでそうしているか、まったく実行できないだろうと思いますが)。

...と、その文字列の各文字のために、

for i=1 to len(string) 

は...あなたは、ユーザーがあなたの色を与えたいです。その場合、Excelでは実行できません。そうでなければ、実際の必要性をより良く表現できますか?

+0

私がやっていることは少しゲームです。 別のシートに書かれた5つのランダムな文が得られますが、これはすでに動作しています。文章に値するように設定する 文章=範囲( "B11")。値 次に、Excelのセル内に文字が隠されているため、文の色を青に変更します。 次に、入力ボックスで文字を入力してinput_letterに保存するように求めます。 私がしようとしているのは、input_letterが文章にあるかどうかを尋ねることです。 偶然が見つかると、文字色を白に変更します。 –

0

次のコードは、あなたの文字列値含むセルRange(B11)の.Charactersプロパティを使用して、OP・ロジックおよびコメントの最も近くに来る:

コード

Option Explicit 
Sub test() 
Dim blue   As Long: blue = RGB(31, 78, 120) 
Dim s   As String: s = "asdfgh" 
Dim letter  As String 
Dim input_letter As String 
Dim i   As Integer 
Dim rng   As Range 
Set rng = ThisWorkbook.Worksheets("MySheet").Range("B11") 
With rng 
    .Value = s 
    ' color whole string 
    .Characters(1, Len(s)).Font.Color = blue 
    For i = 1 To Len(s) 
    letter = Mid(s, i, 1) 
    input_letter = InputBox("Write a letter") 
    If letter = input_letter And .Characters(i, 1).Font.Color = blue Then 
     'color found character 
     .Characters(i, 1).Font.Color = vbWhite 
    ElseIf input_letter = "" Then Exit For 
    End If 
    Next 
End With 
End Sub 

ノートを

モジュールの宣言ヘッドには常にOption Explicitを使用してください。だから、Stringは関数であるため、変数名として使用できないことがわかります。

If状態の余分な色のチェックは、余りにも長い青色の文字であるようです。あなたはFor内で繰り返さInputBoxESを好むように見える

からNextループは、単一の呼び出しに減少させることができました。

+0

助けてくれてありがとう! 私はinputboxをforループの中に置かないのは、コードを実行するたびに1文字だけを尋ねるべきだからです。だから、ボタンを押して、文字を入力し、次のプレイヤーと同じことを入力します。 –

+0

それは明らかに助けてくれてうれしいです。他のユーザーにも役立つ可能性があります(https://stackoverflow.com/help/someone-answersを参照してください)。 –

関連する問題