VBAで「フォーカスのあるフィールドに色を付ける」条件を付ける方法

このQ&Aのポイント
  • 質問者は、帳票フォームの全てのコントロールに条件付き書式を適用し、「フォーカスのあるフィールドに色を付ける」方法をVBAで実現したいとしています。
  • 質問者は、コントロールが多いためVBAでループさせたいがコードが分からないと述べています。
  • VBAの条件付き書式を使って、「フォーカスのあるフィールドに」という条件をどのように付けるかを質問しています。
回答を見る
  • ベストアンサー

「フォーカスのあるフィールドに色を付ける」vba

帳票フォームの全てのコントロールに 条件付き書式で 「フォーカスのあるフィールドに色を付ける」を行いたいのですが コントロールが多すぎる為VBAでループさせたいのですがコードがわかりません。 http://www.tsware.jp/tips/tips_187.htm これをVBAで行いたいです。 VBAでの条件付き書式は Sub Sample() Dim Field As String Dim myFormName As String With Forms(myFormName).Controls(Field) With .FormatConditions .Delete With .Add(acExpression, , "[" & Field & "]=""あ""") .BackColor = 225 End With End With End With End Sub こんな感じで出来る事は知ってますが、 vbaで「フォーカスのあるフィールドに」と言う条件の付け方がわからないので教えてください。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

テキストボックスコントロールに「フォーカスのあるフィールド」条件付き書式を "V... http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12103886087 上記質問で解決された内容を流用してみると Dim ctl As Control For Each ctl In Forms(myFormName).Controls   With ctl     If .ControlType = acTextBox Or .ControlType = acComboBox Then       With .FormatConditions         .Delete         With .Add(acFieldHasFocus)           .BackColor = RGB(10, 10, 255)         End With       End With     End If   End With Next ctl ってな感じになると思います。 ※ myFormName が設定されていないので、どういう動きになるかは? ※ そのフォーム内で記述するのであれば For Each ctl In Me.Controls で良さそうに思います。 ※ 不都合あれば、修正してください(未検証)

sqxvxregjigx
質問者

お礼

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

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

【要旨】 Addメソッドの引数に、「acFieldHasFocus」を指定すればOKです。 【詳細】 > vbaで「フォーカスのあるフィールドに」と言う条件の付け方が > わからないので教えてください。 関数やメソッドで、ある決められた引数から選択するものの場合、 VBAの「インテリセンス」を利用するのが便利です。 ただ、このインテリセンスを有効に利用するには、対象オブジェクトの 「データ型を指定した変数」への格納が必要な場合があります。 (例えばご提示のコードのように、「Controls」を経由した場合は、  全てのコントロールが「FormatConditions」プロパティを持っては  いないため、その配下のメソッドなどについてはインテリセンスが  働かなくなります) Sub Sample()   '「Field」はDAOのメンバにあるため使用しない方が無難   Dim sField As String   Dim myFormName As String   'FormatConditionsを格納する変数を宣言   Dim Obj As FormatConditions   With Forms(myFormName).Controls(Field)     'FormatConditionsを変数に格納     Set Obj = .FormatConditions     With Obj       .Delete       'データ型を明示した変数を経由しているため、以下の       'コードを手打ちした場合、「With .Add(」まで入力すると       'インテリセンスが候補を表示してくれます       '(「With .Add()」と入力してから「)」の前に戻った場合は       ' 働かないため、「(」を削除して再入力するか、「()」の       ' 間をマウスの右クリックして「入力候補」を選択)       With .Add(acExpression, , "[" & Field & "]=""あ""")         .BackColor = 225       End With     End With   End With   'オブジェクトを格納した変数は、念のため、明示的に変数を解放   Set Obj = Nothing End Sub

sqxvxregjigx
質問者

お礼

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

関連するQ&A

  • アクセス複数の条件で同じ書式をつけるには?

    条件付き書式です。(しかもVBAです) 一つのフィールドに対して違う条件だけど同じ書式をつけたい時、 まとめる事は出来ないのでしょうか? 例えばフォールド1の「あ」と「い」を赤にしたい場合、 Sub test01() Dim Field As String Dim MyFormName As String MyFormName = "フォーム" Field = "フィールド1" With Forms(MyFormName).Controls(Field) With .FormatConditions .Delete With .Add(acExpression, , "[" & Field & "]=""あ""" And "[" & Field & "]=""い""") .ForeColor = 225 End With End With End With End Sub のような事は出来ないのでしょうか? これをすると 実行時エラー:型が一致しません。(Error 13) になります。 素直に、 Sub test02() Dim Field As String Dim MyFormName As String MyFormName = "フォーム" Field = "フィールド1" With Forms(MyFormName).Controls(Field) With .FormatConditions .Delete With .Add(acExpression, , "[" & Field & "]=""あ""") .ForeColor = 225 End With With .Add(acExpression, , "[" & Field & "]=""い""") .ForeColor = 225 End With End With End With End Sub としなくちゃダメでしょうか? 何故こんな事がしたいかと言うと、3つ以上やりたい条件がありので、 同じ書式のものはまとめたいのです。 ご教授よろしくお願いします。

  • 白のコード(数値)を教えてください。

    Sub test() Dim Field As String Dim MyFormName As String MyFormName = "フォーム" Field = "フィールド1" With Forms(MyFormName).Controls(Field) With .FormatConditions .Delete With .Add(acExpression, , "[" & Field & "]=""test""") .ForeColor = #FFFFFF '白にしたい End With End With End With End Sub フォームに条件付書式を設定したくて上記のコードをVBE画面に貼りつけたのですが 文字色を白にしたいのです。 しかしデザインビューで白を確認すると、「#FFFFFF」となってしまい、 VBAコードに貼りつけるとコンパイルエラーになります。 アクセス2007です。 白のコード(数値)を教えてください。

  • アクティブ(カレント)レコードに条件付き書式で

    アクティブ(カレント)レコードに条件付き書式で色を付けるには? フォームに乗ってるサブフォームに対して、レコードが移動したら条件付き書式をつけたいです。 サブフォームのCurrentイベントに ////////////////////////////////////////////////////// Private Sub Form_Current() Dim avarContorol As Variant Dim iLoop As Integer Dim ctl As Control Dim mystr As String Dim i As Integer ReDim avarControl(Me.Controls.Count - 1) For i = 0 To Me.Controls.Count - 1 avarControl(i) = Me.Controls(i).Name Next i For iLoop = 0 To UBound(avarControl) With Me.Controls(avarControl(iLoop)).FormatConditions .Delete 'コントロールが文字列型ならダブルコーテーションでくくる With .Add(acExpression, , "[名前] = """ & Me.Controls("名前") & "") .BackColor = 255 End With End With Next iLoop End Sub ////////////////////////////////////////////////////// としたのですが、エラーにもならないけど、色もつかないです。 予想としては赤になると思ったのですが・・・ しかも、2010は設定した条件付き書式をフォームビューでは確認できないようです。 フォームビューで設定した条件付き書式は保存されないから、デザインビューで確認しようとしても、見れません。 サブフォームに対して行おうとしているからできないのでしょうか? どこが間違ってるか教えていただけますか? ご回答よろしくお願いします。

  • Access VBA 添付型フィールド

    Access VBAで添付型フィールドからファイル名を取りだしたいのですが、どのようにすればいいでしょうか? Private Sub Sample() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim SQL As String   Set DB = CurrentDb SQL_1 = "SELECT * FROM ボランティア情報 ORDER BY 分野 & 団体名読み;" Set RS = DB.OpenRecordset(SQL_1, dbOpenDynaset) With RS   Do While Not .EOF   MsgBox (!写真.FileName)  ←ここでエラーが出ます。 .   MoveNext   Loop End With RS.Close Set RS = Nothing Set MDB = Nothing End Sub

  • Excel2010のバグ?(条件つき書式)

    test1は、A~X列に数字と条件付き書式をセットするマクロですが、途中のセルから色化けします。 原因がお分かりの方はご教授ください。どうもExcel2010のバグのように思われます。 バグならMicrosoftのどこに報告あるいは問い合わせれば良いでしょうか。 Sub test1() Dim aRow As Long Dim aCol As Long With ActiveSheet For aRow = 1 To 3 For aCol = 1 To 25 .Cells(aRow, aCol).Value = aCol Call SetFormatConditionOfColor(aRow, aCol, "=1") Next Next End With End Sub Public Sub SetFormatConditionOfColor(ByVal aRow As Long, ByVal aCol As Long, ByVal aFormula As String) With ActiveSheet.Cells(aRow, aCol) .FormatConditions.Delete '一致するセル .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:=aFormula With .FormatConditions(1) .Font.Color = 0 .Interior.Color = 13434879 End With '一致しないセル .FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _ Formula1:=aFormula With .FormatConditions(2) .Font.Color = 16777215 .Interior.Color = 16767843 End With End With End Sub OS: MS WindowsXP Professional Service Pack3 Excel: Microsoft Office Professional Plus 2010 14.0.5128.5000(32ビット)

  • 「フォーカスのあるレコード」に色付けしたい

    「フォーカスのあるフィールド」ではなく「フォーカスのあるレコード」に色付けしたい アクセス2007です。 フォームの条件付き書式には「フォーカスのあるフィールド」と言う条件で色付けできますが 「フォーカスのあるフィールドと同じレコードのフィールド」に色を付けたいです。 図をご覧いただければわかりやすいと思いますが、 IDフィールドの3にフォーカスがある場合は、フィールド1のCも色を変えたいです。 IDフィールドには、「フォーカスのあるフィールド」で条件付き書式設定をしました。 VBAでも大丈夫なので教えてください。

  • VBAに関して

    VBA超初心者の者ですが、ある一つのシートにいくつかの別のファイルを開いて順にコピーして貼り付けていくというプログラムを作成したいと思っています。 Sub naka() Dim k As Integer Dim r As String k = InputBox("ファイル数を記入してください") r = InputBox("範囲を指定してください") Call s1(k, r) End Sub Sub s1(i As Integer, rangearea As String) Dim v As Integer Dim x As String For v = 1 To i Dim OpenFileName As String With OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") ThisWorkbook.Sheets(1).Range("rangearea").Copy ActiveSheet.Range("1+(rangearea.rows.count*(v-1)),1").PasteSpecial End With Next v End Sub こんな感じでかいてみたものの全く異なったものをかいているようです。同じフォルダ内にコピーするファイルが存在しているものと仮定していますが、マイ ドキュメント内のファイルとしたいです。コピーすべきシートは1としています。大変分かりづらい文章ですが、おかしい部分の指摘、見本等示していただけたらありがたいです。

  • 条件付書式をVBAでセルに設定するときのルール

    図のような列があります。 C列にこだわっているわけではないのですが、その左側にある列で計算をしているという意味で、A、B列はあけただけです。 で、IF文で計算してある条件に合致するとC列で「TRUE」を表示し、合致していない場合はそのときの計算結果を表示させています(IF文的に正しくないので、計算したままの値が計算結果として表示される)。 この結果の見せ方として、これまではC列に「条件付書式」を手動で設定し、文字がTRUEのとき字を青くする表示にしていたのですが、同様の処理を行うExcel Bookファイルが多いため、VBAで条件書式を設定しようとし、次のような記述を実行しました。 すると、図のような結果になりました。 ---------------------------------------------- Sub TestSample() Dim i As Long i = 20 '実際には最終行はBookによって異なるので、 ’行末検索させせていますが、とりあえずここでは20としておきます。 With ActiveSheet Range(Cells(2, 3), Cells(i, 3)).Select With Selection     FormatConditions.Add Type:=xlTextString, String:="TRUE", _     TextOperator:=xlContains     .FormatConditions(1).Font.Color = RGB(0, 50, 255) ’ーーA     .FormatConditions(1).Interior.TintAndShade = 0   ’ーーB End With End With End Sub ---------------------------------------------- 質問が2つあります。 1. 背景がいわゆる「色なし」ではなく白くなっていますが、背景「色なし」かつ「罫線でかこむ」には、どのような記述をすればよいでしょうか 2. FormatConditions.Add Type:~~~~ につづく別の行(Aのところ)に「FormatConditions.」と記述すると実行できません。 マクロで条件書式の自動記録をやって参考にしたところ、添値のような(1)が記録されることに気が付き、それを真似して FormatConditions(1). としたところ、動作しました。 最初だけFormatConditionsで、なぜAのところはFormatConditions(1).となるのか、またAとBはどちらも「FormatConditions(1).」でダブっているのに処理上エラーを返さないのか、理屈がわかりません。 (1)がつく意味と、AとBはどちらも(1)で(ダブっても)動作するのか(逆にいえば、なぜ最初のFormatConditionsだけ、番号がついていないのか、たぶんデフォルトで(0)の意味?) について、このへんの仕組みの解説をよろしくお願いします。

  • VBAの書き方を教えてください。パート2

    10月12日に、こちらでVBAの書き方をお聞きした内容の続きになります。 http://okwave.jp/qa/q7744550.html FrmLevelInitの実行が定期的に停止し、ログインできなくなる。 または、一度ID、Passを入力してはじかれた後、Passを再入力し直すとログイン出来る。 の2点が発生してしまいます。 環境がRuntimeを使って使用しているので、作成者が何度もVBAを立ち上げて実行し、再配布している状態です。 すみませんがお手伝い頂けますでしょうか。 Public Sub FrmLevelInit(ParamArray v()) On Error Resume Next If (IsMissing(v)) Then sIdSave = "" sNameSave = "" iUserLevel = 0 Else sIdSave = v(0) sNameSave = v(1) iUserLevel = CLng(v(2)) End If End Sub ' 指定されたフォームのコントロールのタグをチェック Public Sub FrmLevelSet(frm As Form) Dim ctl As Control Dim i As Long For Each ctl In frm.Controls With ctl i = InStr(.Tag, "," & iUserLevel & ",") If (i > 0) Then .Enabled = False End With Next End Sub Public Function LoginId() As String ' ID を返す LoginId = sIdSave End Function Public Function LoginName() As String ' 名前を返す LoginName = sNameSave End Function

  • エクセルVBAのユーザーフォームにセルデータを

    Excel2007を使っています。 VBA初心者ですがユーザーフォームのテキストフォームにエクセル内のセルデータを表示させたいと考えています。 以下のコードをユーザーフォームのコードに書いてユーザーフォームを走らせましたがユーザーフォームは表示するのですがデータがまったく表示されません。 どなたかご教授いただけませんでしょうか。 Sub Farst() Dim Data1 As String Dim Data2 As String Dim Data3 As String Dim Data4 As String Dim Data5 As String Dim Data6 As String Dim Data7 As String Dim Data8 As String Dim Data9 As String Dim Data10 As String Dim ActiveRow As String ActiveRow = 4 With Worksheets("MDH,MDO") Data1 = .Cells(ActiveRow, 1) Data2 = .Cells(ActiveRow, 2) Data3 = .Cells(ActiveRow, 3) Data4 = .Cells(ActiveRow, 4) Me.TextBox1連番.Text = Data1 Me.TextBox2品番.Text = Data2 Me.TextBox3品番2.Text = Data3 Me.TextBox4品番3.Text = Data4 End With End Sub

専門家に質問してみよう