エクセルのシート上にある、図形のテキストボックスのフォントサイズに「12」をセットしておいて、シート上に配置してあるコントロールボタンをクリックする事で、変更されたサイズから「12」へもどす仕組みを作りたいのですが・・・

テキストボックスのフォントサイズ 「12」から、テキストボックスをアクティブにし、ツールバーでフォントサイズを変更する。
↓ ** その後
シート上に配置されたボタンを押すと元の「12」に戻る

※ エクセル97、2000で使用(作成は97)

こんなことできますか? できれば、どなたか教えて下さい。宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

「テキストボックスの大きさを、基準の大きさの戻す(エクセルVBA)」と同じ前提です。



シート1のコードウインドウに貼り付け(例)
Private Sub CommandButton12_Click() 'フォントを元に戻すボタン
Font12set tbxClickName
End Sub

標準モジュールに貼り付け
Public Sub Font12set(txtName As String) 'フォントサイズを12に戻す
If Len(txtName) <> 0 Then '選択したテキストボックス名
With ActiveSheet.Shapes(txtName) '選択したテキストボックス
.TopLeftCell.Select
.Select
With Selection
.Font.Size = 12
.ShapeRange.Fill.ForeColor.SchemeColor = 65
End With
.TopLeftCell.Select
End With
End If
tbxClickName = ""
End Sub

この回答への補足

nishi6さん! 助けて下さい!
すみません、あれからしばらくなりますが、「テキストボックスの大きさを、基準の大きさの戻す」と同様にいろいろやっていますがうまく行きません。同じく「テキストボックスに値を入れる(4)」も前に進んでおりません。「テキストボックスに値を入れる(3)」のその後の方はいかがでしょうか?

テキストボックスの大きさ、フォントを基準に戻すのは、上書きせずに終了させれば、もとに戻るわけですから、わざわざボタンを作らなくてもいいかなぁとも思っているんですが、やはりあった方が便利そうです。
上書きせずに終了の方もうまく行かず、現在は、本体を終了させて、データを上書きさせて、それぞれバラバラに処理している状態です。

取急ぎ「テキストボックスに値を入れる(3)」の課題のつづきで困っています。どうか宜しくお願いします。みすてないでー・・・・

補足日時:2001/07/18 20:39
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Q[Access97]フォーム上のボタン操作でチェックボックスにチェックが入るようにしたい

Accessでテーブルを元にしていない単独のフォームを作っています。
クエリで抽出条件をパラメータで入力させるのと同様に、日付を入力してレポートをプレビュー表示させるためのフォームです。
集計表を作成するレポートの名前が入ったチェックボックスがフォームにあり、クリックひとつですべてのチェックボックスにチェックを入れるボタンを設置しています。
(画面図:例)
(キャンセルなし集計ボタン)(キャンセルあり集計ボタン)
□報告書集計 □キャンセルあり報告書集計
□記録集計  □キャンセルあり記録集計
(キャンセルボタン) (レポート出力ボタン)
上図の左のふたつにはデフォルトでチェックが入っています。
キャンセルあり集計ボタン
・クリックすると右の2つにもチェックが入る。
キャンセルなし集計ボタン
・クリックすると右の2つのチェックが取れる。
これら2つの処理はVBAで Me!報告書キャンセルチェック.Value = True 等としていますが、「プロパティクリック時でエラーが発生しました」となり、うんともすんとも動きません。
レポート出力ボタン
・クリックするとそのときにチェックが入っている集計レポートをプレビュー表示する。ただしキャンセルあり~にチェックがある場合はそのすぐ左の集計は出力しない。
これもVBAで
If Me!報告書チェック.Value = True And Me!報告書キャンセルチェック.Value = True Then
DoCmd.OpenReport "報告書集計表(キャンセルあり)"
ElseIf Me!報告書チェック.Value = True Then
DoCmd.OpenReport "報告書集計表"
End If
等としてますが、やはりエラーが出ます。
VBが間違ってるのか、設定を変えてもそれをフォーム上に視覚的に反映させてないからか、それともソースとなるテーブルがないからでしょうか?

Accessでテーブルを元にしていない単独のフォームを作っています。
クエリで抽出条件をパラメータで入力させるのと同様に、日付を入力してレポートをプレビュー表示させるためのフォームです。
集計表を作成するレポートの名前が入ったチェックボックスがフォームにあり、クリックひとつですべてのチェックボックスにチェックを入れるボタンを設置しています。
(画面図:例)
(キャンセルなし集計ボタン)(キャンセルあり集計ボタン)
□報告書集計 □キャンセルあり報告書集計
□記録集計  □キャンセル...続きを読む

Aベストアンサー

>>やはりエラーが出ます。
 何というエラーが出るかがわからないと想像できませんよ。自分も特にコードにおかしいものは見当たりません。
Me!○○

Me.○○
とした方が候補がリストで出て来るので、コントロール名のミスなどがあればすぐわかると思います。


>>それともソースとなるテーブルがないからでしょうか?

 これは関係ないです。
 フォームの「更新の許可」プロパティは「はい」になっていますか?

Qアクセス レポート テキストボックスの文字配置は文字数で自動的に文字配置の変更可能ですか

現在アクセスに入力されているテーブルのデーターをもとに書道展のキャプションを作成中です
タイトルと作家の名前を表示させますがタイトルが1文字数から13文字数くらいまでと様々なため
テキストボックスの文字配置が均等割り付けだと文字数の多いタイトルは2段目が間延びしておかしいです
例えば8文字までだと均等割り付けそれ以上だと左揃えなどということが可能でしょうか?
他に良い方法があれば教えてくださいよろしくお願いします
Wordの差し込み文章のように一枚ごとの編集が出来ればいうことなしなのですが?それはあり得ませんか?

Aベストアンサー

> イベントプロシージャには文字数が多くなれば自動で2行にになり字も小さくなるための式がかかれています

こちらでしょうか?

テキストボックス内の文字を自動で縮小して全体を表示
http://hatenachips.blog34.fc2.com/blog-entry-11.html

上記の例なら

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  AutoFontSize Me.テキストボックス名, 12
  If Len(Me.テキストボックス名) <= 8 Then
    Me.テキストボックス名.TextAlign = 4 '均等割り付け
  Else
    Me.テキストボックス名.TextAlign = 1 '左揃え
  End If
End Sub

のようになります。


> ユーザー定義関数名、「イベントプロシージャ」以外の式が指定されていますとなりました。

加えた変更を元に戻してもエラーになりますか?

とりあえず、コンパイルしてエラーが無いことを確認してください。

経験上、Access のバージョンにもよりますが、
デザインビュー以外で表示しているときに VBA の修正をしたりすると
このエラーが出ることが多いような気がしています。

> イベントプロシージャには文字数が多くなれば自動で2行にになり字も小さくなるための式がかかれています

こちらでしょうか?

テキストボックス内の文字を自動で縮小して全体を表示
http://hatenachips.blog34.fc2.com/blog-entry-11.html

上記の例なら

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  AutoFontSize Me.テキストボックス名, 12
  If Len(Me.テキストボックス名) <= 8 Then
    Me.テキストボックス名.TextAlign = 4 '均等割り付け
  Else
    Me.テ...続きを読む

Qチェックボックスの配置順にテキストボックスに表示

accessのフォームにチェックボックスを配置し
チェックされたものをテキストボックスに表示させています。

■A ■B □C □D ■E

となっていたら、テキストボックスに

A B E

と表示させています。

チェックボックスの真ん中に新しくチェックボックスを追加すると
テキストボックス内には、追加したものが最後に表示されていまいます。

■A ■B □C ■Z □D ■E

とすると、テキストボックスには

A B Z E
と表示させたいのに
A B E Z
表示されてしまいます。

いちから順番どおりに作り直せばいいのですが
かなりたくさんチェックボックスがあるうえに
上司から、この先も何度も作り直しを指示されそうです・・・。

できれば簡単に、配置した順にテキストボックスに表示されるようにしたいです。

チェックボックスの配置順に
テキストボックスに文字を表示させる方法を教えてください!

Aベストアンサー

VBA は、なんとか大丈夫になったでしょうか

VBA での記述になります。
状況が不明なところもありますが、変更しやすい(?)方法での記述にしてみます。
説明は後にして、以下をフォームに記述しておきます。

Private Function MojiGet() As String
  Dim ctl As Control
  Dim sS As String

  With New ADODB.Recordset
    .Fields.Append "名", adVarChar, 255
    .Fields.Append "値", adBoolean
    .Fields.Append "左", adInteger
    .Fields.Append "順", adInteger
    .CursorLocation = adUseClient
    .Open

    For Each ctl In Me.Controls
      Select Case ctl.ControlType
        Case acCheckBox
          sS = ctl.Name
          If (ctl.Controls.Count > 0) Then
            sS = ctl.Controls(0).Caption
          End If
          .AddNew
          .Fields("名") = sS
          .Fields("値") = ctl.Value
          .Fields("左") = ctl.Left
          .Fields("順") = ctl.TabIndex
          .Update
      End Select
    Next

    .Filter = "値 = True"
    .Sort = "左"

    sS = ""
    While (Not .EOF)
      sS = sS & " " & .Fields("名")
      .MoveNext
    Wend
    .Close

    MojiGet = Mid(sS, 2)
  End With
End Function

チェックボックスの状態を順次チェックしていくわけですが、
後での並べ替え( Sort )が楽なように ADO のレコードセットを使っておきます。

> A B Z E
> と表示させたいのに
> A B E Z
> 表示されてしまいます。

これは、おそらく
    For Each ctl In Me.Controls
      Select Case ctl.ControlType

とした場合の、出現順(作った順)で処理されているのだと思います。
上記の記述では、チェックボックスなら
・名前を覚える(チェックボックスにラベルがくっついていたらラベルの標題)
・値を覚える
・左位置を覚える
・タブ移動順を覚える

で、この4つを全部覚えたら
・値 = True で絞込み( Filter )
・並び替えを、左位置昇順
この結果で、「名」を繋げていきます
Filter は使わずに、True の時のみレコードセットに追加・・・でも良いと思います。
並び順をタブ移動順に変更するのも容易です。

また、2段・3段になっていて、上の段から・・・とかなら
"上" フィールドを追加して、ctl.Top も覚えておいてから
Sort で "上, 左" とすれば順に得られれます。( "左, 上" とするとまた違った順に)
もちろん、横並びの Top 値や Left 値は同じにしておく必要はありますが・・・
でも、タブ移動順の方が使えるのかも?

ここで、関数名を MojiGet としたので、テキストボックスに設定する時には
Me.テキストボックス = MojiGet
で、できると思います。

テキストボックスのコントロールソースに =MojiGet() としても表示できますが、
更新のタイミングがうまくとれないと思います。
( Me.Recalc 等で表示更新はされますが)
その時には、このチェックボックスが変更されたら・・・・
という意味で、引数に与えるようにします。( Access さんに教えてあげます)
関数側では、引数は必要としていないので、ダミー的な受けにしておきます。

Private Function MojiGet2(ParamArray vDmy()) As String
  MojiGet2 = MojiGet
End Function

テキストボックスのコントロールソースには、
チェックボックス「A」「B」「C」に変更あったら表示を更新したい場合
 =MojiGet2([A],[B],[C])
とでも記述しておきます。

なお、フォーム上に上記とは別の用途のチェックボックスがあるのであれば、
チェックボックスのプロパティにある「タグ」に識別子を埋めておきます。
「タグ」に設定する文字列は何でもよいので、
例えば、対象外のチェックボックスには設定なし・・・だけとすると

    For Each ctl In Me.Controls
      Select Case ctl.ControlType
        Case acCheckBox
          If (Len(ctl.Tag) > 0) Then ' ★こんな感じの判別
            sS = ctl.Name


※ 冒頭に示した内容では、毎回順を得ていますが、
 順を求めるのは1回で良いので、Form_Load とかでやっておいて、
 以降は求まっていた順を使いながら、True/False を判別・・・・でも良いかも

 ただ、フォーム上では操作が絡むので、応答に満足できれば、このままでも・・・

※ 同じような事をするフォームが複数あるのであれば、
 関数部分を標準モジュールに移動させ、
 ・ Private → Public
 ・ Me.Controls → CodeContextObject.Controls
 の変更で動くかも(未検証)

※ ADO のレコードセットを使わなくても、「タグ」に順を設定するとか・・・
 でも、追加した後、その「タグ」修正を間違わない・・・注意が必要ですね
 上記では、追加したら「タグ」に何かを入れておけば・・・・楽かな?
 いろいろ方法はあると思います。


参考にする/しない等々、自己責任でお願いします。

VBA は、なんとか大丈夫になったでしょうか

VBA での記述になります。
状況が不明なところもありますが、変更しやすい(?)方法での記述にしてみます。
説明は後にして、以下をフォームに記述しておきます。

Private Function MojiGet() As String
  Dim ctl As Control
  Dim sS As String

  With New ADODB.Recordset
    .Fields.Append "名", adVarChar, 255
    .Fields.Append "値", adBoolean
    .Fields.Append "左", adInteger
    .Fields.Append "順", adInteger
    ....続きを読む

Q【VBA】ユーザーフォームから、シート上のテキストボックスを操作

ユーザーフォームで入力した値を、シート上にあるテキストボックスに入力させたいのですが、
どのように記述すればいいのでしょうか?(ボタンで操作)
またおなじくテキストボックスの大きさ、フォントの大きさ、などを操作するにはどのようにしたらいいですか?

Aベストアンサー

えーっとそうですねぇ・・・デバック画面でステップインさせながらだとどの行でひっかかったのか分かるのですが。
まぁとりあえずシート名「印刷」の上にあるテキストボックスの名前が本当に「名前Box3」 なのか確認して下さい。
テキストボックスのプロパティで確認できますし。下のコードを走らせて確認しても良いかなと。
For Each hogehoge In Worksheets("印刷").Shapes
 MsgBox (hogehoge.Name)
Next hogehoge


で訂正です。
フォントの種類ではなく、フォントのサイズでしたね。
こっちに修正
 .Font.Name = "MS P明朝" 'フォント名

 .Font.Size = 15 ' フォントサイズ

QAccess97 テキストボックスを利用したあいまい検索フォーム

Acces97にて下記のようなデータベースを使用しております。

 テーブル:銀行コード一覧(銀行コード、銀行名、支店コード、支店名、支店住所)
 クエリー:Q-銀行名検索、Q-支店名検索
 フォーム:F-銀行名検索、F-支店名検索

今は検索したいフィールド毎にクエリーとフォームが作ってあり、同じようなクエリーとフォームが複数ある状態です。
 <クエリー>
  (1)Q-銀行名検索→フィールド「銀行名」に【Like "*" & [調べたい銀行名の一部入力] & "*"】設定
  (2)Q-支店名検索→フィールド「支店名」に【Like "*" & [調べたい支店名の一部入力] & "*"】設定
  ・・・以下同様のクエリー複数あり
 <フォーム>
  (1)F-銀行名検索にQ-銀行名検索を設定
  (2)F-支店名検索にQ-支店名検索を設定
  ・・・以下同様のフォーム複数あり

今回作りたいのは、1つのフォーム内に検索したいフィールド分の検索ボタンを作り、検索したい項目をテキストボックス内に入力後該当ボタンをクリックすることによって入力した項目を含むデータが抽出されるというフォームです。
例えば、"東京"と入力し「支店名」ボタンをクリックすると『東京営業部』『東京中央』等"東京"を含むデータが抽出される といった具合です。

部署内にAccess作成事例集なるものがあり、それを元に下記のように作成してみました。
フォーム名を「F-銀行コード一覧」・テキストボックス名を「検索」として、「支店名」ボタンのマクロに [Forms]![F-銀行コード一覧]![検索]=[銀行コード一覧]![支店名] というアクション(フィルタの実行→Where条件式)を設定。しかし、これでは『東京』のみしか抽出されませんでした。
Like関数を利用するのかと思い Like "*"&[Forms]![F-銀行コード一覧]![検索]&"*"=[銀行コード一覧]![支店名] としてみましたが設定できませんでした。

どのようなアクションを設定したらフォームでのあいまい検索ができるのでしょうか?

Acces97にて下記のようなデータベースを使用しております。

 テーブル:銀行コード一覧(銀行コード、銀行名、支店コード、支店名、支店住所)
 クエリー:Q-銀行名検索、Q-支店名検索
 フォーム:F-銀行名検索、F-支店名検索

今は検索したいフィールド毎にクエリーとフォームが作ってあり、同じようなクエリーとフォームが複数ある状態です。
 <クエリー>
  (1)Q-銀行名検索→フィールド「銀行名」に【Like "*" & [調べたい銀行名の一部入力] & "*"】設定
  (2)Q-支店名検索→フィールド「支店名...続きを読む

Aベストアンサー

フムフム!

1、検索フォームのレコードソースに作成されたクエリを設定する。
2、入力された条件に基づいてフォームをリクエリする。

ということです。
ですから、マクロはこの際関係ありません。

検索したい項目毎にクエリーを作成・・・。

ではなくて、

クエリーの検索したい項目毎に抽出条件を設定。

です。

まあ、これは表現の問題で一応クリアされているとすれば、既に99%完成しています。
既に99%完成とは、「検索フォームのレコードソース=クエリ」ということです。

さて、ここからかなり怪しい記憶ですが、{Shift}{F9}か{Ctrl}{F9}で再検索(=Requery)します。
問題は、これをどのように自動化するかです。

1、コマンドボタンを検索フォームに配置。(ウィザードを使わずにただ配置)
2、同ボタンを右クリックして、次のコードを書く。

Private Sub コマンド_抽出_Click()
  Me.Requery
End Sub

作成したクエリを使うのはあくまでも検索フォーム。
この場合、「検索フォームのレコードソース=クエリ」という設定を行うという意味。
クエリを起動しても、ただ、クエリが開くだけです。

残された課題は、僅かに1行のコードを書くだけじゃないですか?
頑張って下さい。

フムフム!

1、検索フォームのレコードソースに作成されたクエリを設定する。
2、入力された条件に基づいてフォームをリクエリする。

ということです。
ですから、マクロはこの際関係ありません。

検索したい項目毎にクエリーを作成・・・。

ではなくて、

クエリーの検索したい項目毎に抽出条件を設定。

です。

まあ、これは表現の問題で一応クリアされているとすれば、既に99%完成しています。
既に99%完成とは、「検索フォームのレコードソース=クエリ」ということです。

...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報