テーブルでコンボボックスから選んでデータを入力したい場合、コンボボックスの内容を他のテーブルやクエリあるいは値リストから抽出する方法はわかりますが、コンボボックスの内容に該当するものが無い場合、一覧から選ばずに、手入力することにしたいと思っています。そこで、手入力した後次のレコードに移動した時にコンボボックスの内容に手入力した内容がすぐに反映するようにしたいのですが、うまい方法は無いでしょうか?私としてはいちいち他のテーブルを開いて入力したりせずにしたいのですが・・・

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

A 回答 (5件)

同じテーブルからリストを取得する為には、一度レコードを保存する以外ないようです。

そのため今まで設定した「データ入力のチェック」を"いいえ"に戻し、「リスト外入力時」のボックスから"[イベントプロジージャ]"の文字を消したうえで、「更新後処理」に設定したモジュールの中身を下記のように置き換えます。

' レコードを保存し、コンボボックスのリストを再作成します。

DoCmd.RunCommand acCmdSaveRecord
Me![(コンボボックス名)].Requery

(*)例によって同じフォーム内に、同じテーブル(クエリー)からリストを作っているコンボボックスがあるなら、その分も上記とまったく同じ構文で行を作成します。

あまり綺麗な方法ではないですが、これが一番現実的な方法のようです。
    • good
    • 0
この回答へのお礼

試してみたところうまくいきました!大変ありがとうございました。(お礼が遅れてしまいすみませんでした。)

お礼日時:2001/03/19 12:04

回答が何回にも分かれてしまってすみません。


たしかにクエリーを元にしている場合など、おっしゃる通りの手順を踏まないとリストが更新されないみたいですね。

コンボボックスのプロパティを開き、「更新後処理」から開いたモジュール作成画面で、"Private Sub~"の行と"End Sub"の行の間に、

Me![(コンボボックス名)].Requery

という行を作成してみてください。
同じフォーム内に、同じテーブル(クエリー)からリストを作っているコンボボックスがあるなら、その分も上記とまったく同じ構文で行を作成してみてください。

これで、おそらくコンボボックス更新後にすぐ反映されます。

この回答への補足

すみません。そもそもフォームプロパティの入力チェックの項目を「はい」に変更する操作を行っていませんでした。結果問題なく動作しました。ありがとうございました。ところで、この方法はコンボボックスの値の取得元(例えばテーブルB)がフォームを作成する元になったもの(例えばテーブルA)と別な場合にうまくいきますが、私がやりたい方法としてはコンボボックスの値の取得元が同じテーブルAである場合です。もちろんそのまま取得すると様々な重複した値がそのままコンボボックスの内容になりしますので、重複したデータを自動的に1個にするクエリAを作成して(これは問題なくできました)そのクエリAをコンボボックスの値の取得元にしてみましたが、次のレコードへ移動する前にエラーが表示され、モジュール文の.AddNewのところでとまってしまうようです。そこでフォームプロパティの入力チェックの項目を「いいえ」に変更したところ、次のレコードへ移動しましたが、“更新”に匹敵する操作を行わない限りコンボボックスの値に反映されませんでした。いろいろと文句ばかり言うようで、もうしわけありませんが、上記の内容を解消できる術がありましたらご教示ください。

補足日時:2001/03/15 18:50
    • good
    • 0

再検証してみたのですが、先に紹介したモジュールではやはりフォームでの入力直後にリスト追加されるようですけれど、お使いの環境ではうまくいっていないのでしょうか?


もう一度確認してみてください。

それと、下記のモジュールに一点修正個所があります。
「.Update」の行と「End With」の行の間に一行、

.Close

というrecordset終了行が抜けていました。下記のモジュールをコピーしていた場合、追加しておいてください(なくても動作上不具合はないようですが)。
モジュールに抜けている行があり、すみませんでした。

この回答への補足

フォームプロパティの入力チェックの項目を「はい」に変更する操作を行っていませんでした。結果問題なく動作しました。ありがとうございました。ところで、この方法はコンボボックスの値の取得元(例えばテーブルB)がフォームを作成する元になったもの(例えばテーブルA)と別な場合にうまくいきますが、私がやりたい方法としてはコンボボックスの値の取得元が同じテーブルAである場合です。もちろんそのまま取得すると様々な重複した値がそのままコンボボックスの内容になりしますので、重複したデータを自動的に1個にするクエリAを作成して(これは問題なくできました)そのクエリAをコンボボックスの値の取得元にしてみましたが、次のレコードへ移動する前にモジュール文の.AddNewのところでとまってしまうようです。そこでフォームプロパティの入力チェックの項目を「いいえ」に変更したところ、次のレコードへ移動しましたが、“更新”に匹敵する操作を行わない限りコンボボックスの値に反映されませんでした。いろいろと文句ばかり言うようで、もうしわけありませんが、上記の内容を解消できる術がありましたらご教示ください。

補足日時:2001/03/15 18:46
    • good
    • 0

Ms Accessではテーブル(クエリー)を元にしたコンボボックスコントロールへリスト外入力を行う事があり、なおかつそれをリストに加えたいという場合、フォームを使用します。



そのため、まずは「コンボボックスから選んでデータを入力したい」テーブルに関連付けたフォームを作成します。いろいろとフォームには作成手順があるのですが、今回のご質問のケースの場合、テーブルに直接入力する事を考えられていたわけですからウィザードを使用して「データシート」で作成してもいいと思います。

次に作成したフォームをデザイン画面(編集画面)で開き、目的のコンボボックスを右クリックして「プロパティ」を開きます。そして開いたダイアログの表示を「イベント」のページに切り替え、ストの中の「リスト外入力時」を選択し、右側に現れた「…」ボタンを押します。するともう一枚ダイアログが表示されると思いますのでその中から「コードビルダ」を選択してください。これで、モジュール作成画面が開くはずです。

そして、画面が切り替わり、モジュール作成画面んが開いたら、"Private Sub~"の行と"End Sub"の行の間に、下記のサンプルを貼り付けてみてください。
ただし、これはあくまでサンプルですので、このままでは動きません。
(テーブル名)の部分はリストのもとになっているテーブル名へ、
(フィールド名)の部分はそのテーブル内のリストが格納されているフィールド名へ、
それぞれ変更してください。

それが終了したらモジュールを保存して作成画面を閉じ、フォームのデザイン画面でまだ開いているはずのコンボボックスのプロパティのページを「データ」に切り替え「入力チェック」の項目を「はい」に切り替えてフォームを保存するだけです。

下記のモジュールの動作確認は済んでいますのでおそらくそれでご希望の機能が動くと思います。

---

Response = acDataErrAdded

Dim rst As Recordset
Dim mydb As Database
Dim crnttbl As String

'現在のリスト一覧をテーブル(クエリー)から取得します。

Set mydb = CurrentDb
crnttbl = "(テーブル名)"
Set rst = mydb.OpenRecordset(crnttbl)

'リストに新規レコードを入力し、取得元テーブルを更新します。

With rst
.AddNew
![(フィールド名)] = NewData
.Update
End With

この回答への補足

細かな所まで説明して頂いて非常に助かりました。実際に試してみましたが、データシートビューのフォームではツールメニューの”レコード”→”更新”を実行して新しい値がコンボボックスに反映されるようです。欲をいって申し訳ありませんが、別のフィールド(レコード)へ移動したらすぐに反映されるようにしたいのですが、無理でしょうか。

補足日時:2001/03/15 14:56
    • good
    • 0

アプリケーションは何を使用されているのでしょうか?(名前とバージョンを教えてください)


アプリケーションによってやり方が変わりますのでそのあたりを教えて頂けないと皆さん回答に困られると思いますよ。

この回答への補足

質問内容が不十分でした。ACCESS2000を使用しています。宜しくお願い致します。

補足日時:2001/03/14 17:19
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

Qエクセル、フォームでのVBAについて(コンボボックス)

エクセル97でフォームのコンボボックスを使用する場合の質問です。
ワークシートにコンボボックスを10個配置しました。
入力範囲はすべて同じです。
このコンボボックスで特定の項目(入力範囲6番目)を選んだ場合、次のマクロを実行するようにしようと思っています。マクロを10個書いてそれぞれのコンボボックスに登録してもいいのですが、それよりはどのコンボボックスが使用されたか特定できればすべてのコンボボックスに一つのマクロで対応できます。
コンボボックスに番号(たとえばコンボ1~コンボ10)を振ってその番号の取得ができればいいのですが、どのように記述したらよいのか検討がつきません。
お教えください。

Aベストアンサー

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、ヘルプで調べてみてください。引数、ByVal、ByRefなど。

で、更なる質問部分についてですが
DrawingObjects("Combo1")といった表現をする場合はまとめられないんです。。。
が!
もう一度、考え直してみました。

Sub Combo1()
Call NextMacro(1)
End Sub

Sub NextMacro(ByVal SelCombo As Integer)
Dim ans As String
If Sheets("LOG").Range("C1") = False Then
Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex _
= Sheets("LOG").Range("H" & (30 + SelCombo)).Value
Exit Sub
End If
If Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex = 6 Then
ans = InputBox("地域を入れてください。", "地域設定")
Worksheets("LOG").Range("J" & SelCombo) = ans
End Sub

で、いいのでは。
ちゃんと全部キレイにまとまるやん♪
と、言いたいところなんですが、テストしてません。
動かなかったらごめんなさい。(^-^;;;

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、...続きを読む

QEXCEL VBA コンボボックス、テキストボックスが未入力のときメッセージを表示する方法

ユーザーフォームにコンボボックス2個textboxが2個あります
コンボは選択のみです。
コンボとtextbox1は入力必須にして、空欄でコマンドボタンが押された時はメッセージを表示したいです
OKwebを参考に作ったのですが、コンボ1が空欄でもMsgが出ません
願いします

Private Sub CommandButton1_Click()
Dim ctrl As Control, tst1 As String, txt2 As String
Dim ws As Worksheet

Set ws = Sheets("sheet1")
For Each ctrl In Me.Controls
Select Case ctrl.Name
Case "ComboBox1", "ComboBox2", "TextBox1"
If Me.Controls(ctrl.Name).Value = "" Then
txt1 = txt1 & ctrl.Name & vbLf
Else
txt2 = txt2 & Me.Controls(ctrl.Name).Value & vbLf
End If
End Select
Next
If Len(txt1) > 0 Then
MsgBox "以下の値を入力してください" & vbLf & txt1, vbExclamation
Exit Sub
Else
ret = MsgBox("以下の値を入力します" & vbLf & txt2, vbOKCancel)
If ret <> vbOK Then Exit Sub

ユーザーフォームにコンボボックス2個textboxが2個あります
コンボは選択のみです。
コンボとtextbox1は入力必須にして、空欄でコマンドボタンが押された時はメッセージを表示したいです
OKwebを参考に作ったのですが、コンボ1が空欄でもMsgが出ません
願いします

Private Sub CommandButton1_Click()
Dim ctrl As Control, tst1 As String, txt2 As String
Dim ws As Worksheet

Set ws = Sheets("sheet1")
For Each ctrl In Me.Controls
Select Case ctrl.Name
Case "ComboBox1", "ComboBox2", "...続きを読む

Aベストアンサー

こんにちは。

バグらしいバグは掲載されたソースからは読み取れません。ComboBox に
どのようにデータを追加しているのか、どのようなデータなのかあたり
からも検証しないと。

また、ソースが途中で途切れてますよ。ちゃんと End Sub まで、掲載して
下さい。

とりあえず、新規ブックで Userform を挿入し、

 ・Textbox1
 ・ComboBox1
 ・ComboBox2
 ・CommandButton1

をそれぞれ配置してから、下記ソースを貼り付けて動かしてみて下さい。

Private ws As Worksheet

Private Sub UserForm_Initialize()
  
  Set ws = Sheets("sheet1")
  
  ' // ComboBox 用テストデータ作成
  ws.Cells.Delete
  With ws.Range("A1:C10")
    .Formula = "=""R""&ROW()&""C""&COLUMN()"
    .Value = .Value
  End With
  With ws.Range("D1:D10")
    .Formula = "=""ITEM""&ROW()"
    .Value = .Value
  End With
  ' // 選択 ONLY のコンボボックス(fmStyleDropDownList)に
  ' // データを追加する
  With Me.ComboBox1
    .Style = fmStyleDropDownList
    .ColumnCount = 2
    .List = ws.Range("A1:C10").Value
  End With
  With Me.ComboBox2
    .Style = fmStyleDropDownList
    .List = ws.Range("D1:D10").Value
  End With

End Sub

' // Style が fmStyleDropDownList のコンボボックスで値を消去できるようにする
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 8 Or KeyCode = 46 Then ' 8:backspace / 46: delete key
    ComboBox1.ListIndex = -1
  End If
End Sub
Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 8 Or KeyCode = 46 Then ' 8:backspace / 46: delete key
    ComboBox2.ListIndex = -1
  End If
End Sub

Private Sub CommandButton1_Click()

  Dim ctrl As Control, txt1 As String, txt2 As String
  Dim ret As Integer
  
  For Each ctrl In Me.Controls
    Select Case ctrl.Name
      Case "ComboBox1", "ComboBox2", "TextBox1"
        If Len(Trim$(ctrl.Text)) = 0 Then
          txt1 = txt1 & ctrl.Name & vbLf
        Else
          txt2 = txt2 & ctrl.Text & vbLf
        End If
      Case Else
    End Select
  Next
  
  If Len(txt1) > 0 Then
    MsgBox "以下の値を入力してください" & vbLf & txt1, vbExclamation
    Exit Sub
  Else
    ret = MsgBox("以下の値を入力します" & vbLf & txt2, vbOKCancel)
    If ret <> vbOK Then Exit Sub
  End If

End Sub

追伸:: ....余計なお世話ですが。

■1点目: 変数名が違います。

> Dim ctrl As Control, tst1 As String, txt2 As String

txt1 As String ですよね。このようなミスを防ぐ意味で、Option Explicit
を宣言のうえ、プログラムを作成する習慣をつけた方が、上達が速いですよ。

■2点目: For Each ループについて

For Each ctrl In Me.Controls のループで

> Me.Controls(ctrl.Name).Value

とするのは、折角 For Each を使う意味が無くなってしまいますから、
そのまま ctrl.value とか、ctrl.text で使って下さい。

こんにちは。

バグらしいバグは掲載されたソースからは読み取れません。ComboBox に
どのようにデータを追加しているのか、どのようなデータなのかあたり
からも検証しないと。

また、ソースが途中で途切れてますよ。ちゃんと End Sub まで、掲載して
下さい。

とりあえず、新規ブックで Userform を挿入し、

 ・Textbox1
 ・ComboBox1
 ・ComboBox2
 ・CommandButton1

をそれぞれ配置してから、下記ソースを貼り付けて動かしてみて下さい。

Private ws As Worksheet

Private Sub ...続きを読む

Qコンボボックスの設定  【エクセル】

エクセルのコンボボックスについてです。
コンボボックスのリストとして


黄色
というリストをコンボボックスの‘入力範囲’に指定します。

コンボボックスの
‘コントロールの書式設定’→‘リンクするセル’
でセルを指定すると、赤を選んだとき リンクさせたセルには
「1」とでますが、なぜ1と出るのか、というのと
私は「赤」と表示させたいのですが、そのやり方を教えて頂きたいです。

コンボボックスを初めて使うので初心者的な質問だと思いますが宜しくお願いします。

Aベストアンサー

この質問もあいまいな点あるのだが。
(1)データー入力規則ーリストー元の値のドロップダウンリスト
ガあるのだが知っていて使わないのか?
これだと質問のようなことはない。選択したドロップダウンの出るセルに文字が出る。
(2)シートやユーザーフォームにコンボボックスを貼り付けているのか
A。質問者はどうもフォームのコンボボックスを使っているらしい
(「入力範囲」という言葉から)
下記Bをお勧めします。
しかし現状のままだと別のセルに一旦数字を出して(J2とでも仮定して)赤白黄うお出したいセルに
=INDEX(H1:H3,J2)
と入れると良い。
H1:H3に赤、青、黄といれて置く(入力範囲)。
ーー
B.コントロールツールボックスのコンボぼっくすを使うと
FillListRangeに例えばH1:H3  H1:H3に赤、青、黄といれ
LinkedCellを例えばD2にすれば、選択後出るには赤とでる。
ーー
>「初心者的な」といいながら、一番難しい方法でやっているようだ。

Qコンボボックスの値が変更されたらそのコンボボックスに表示されたURLを開きたい

データ型がハイパーリンクの文字列が入力されたテーブルをコンボボックスに表示させています。(添付画像参考)
希望は、
プルダウンでURLを選択したと同時にリンク先へ飛びたいです。
現在は、
プルダウンでURLを選択→コンボボックスをクリック
でリンク先に飛んでいます。
多分コンボボックスのChangeイベントだと思うのですが
どうすればいいのでしょうか?

アドバイスよろしくお願いします。

Aベストアンサー

No.2です。

> ""を開いています。

このメッセージから、推測される原因を確認した結果、
おおよそ状況がつかめました。

前回回答前のこちらでのテストでは、ハイパーリンク型
フィールドへのファイルのドラッグ&ドロップでアドレス
を記録したのですが、この場合、入力データにカーソルを
合わせた後、F2キーで編集モードにすると
「http//www.goo.ne.jp/#http//www.goo.ne.jp/#」
と、アドレスが二重に表示されます。
(実際には1個目のアドレスは文字列としての表示、
 2個目のアドレスが実際のリンク先)

一方、Webブラウザなどからアドレスをコピー&ペースト
した場合は
「#http//www/goo.ne.jp#」
と、実際のリンク先のアドレスのみが記録されますが、
このデータを「Call FollowHyperlink(コンボ0)」の
形で参照すると、エラーとなってしまうようです。
大変失礼致しました。


対処法としては、「データの先頭文字が『#』かどうかで
切り分け」も考えましたが、今回の件では「Follow」を
使用した方がよさそうです(汗)

Private Sub コンボ0_AfterUpdate()

  If Nz(コンボ0, ") = "" Then Exit Sub

  'コンボ0に記録されたハイパーリンクを実行
  '(FollowHyperlinkと違い、アドレスを引数とする必要
  ' はなし。こちらの詳細もヘルプを参照下さい(汗))
  コンボ0.Hyperlink.Follow

End Sub

No.2です。

> ""を開いています。

このメッセージから、推測される原因を確認した結果、
おおよそ状況がつかめました。

前回回答前のこちらでのテストでは、ハイパーリンク型
フィールドへのファイルのドラッグ&ドロップでアドレス
を記録したのですが、この場合、入力データにカーソルを
合わせた後、F2キーで編集モードにすると
「http//www.goo.ne.jp/#http//www.goo.ne.jp/#」
と、アドレスが二重に表示されます。
(実際には1個目のアドレスは文字列としての表示、
 2個目のアドレスが実際...続きを読む

Qエクセル、コンボボックス/フォームのとコントロールツールボックスの

エクセル2000です。
今まではワークシートにフォームのコンボボックスを貼って使ってきました。
でも色を変えたり出来ないので、今度はコントロールツールボックスからコンボボックスを貼ってみました。

質問ですが、コンボボックスに表示させるリストを設定するのに、これまでのフォームのコンボボックスだと書式設定で入力範囲をカーソルをあてて一度に簡単に指定できたのですが、コントロールツールボックスのコンボボックスだとそれが出来ません。VBEditorのプロパティのところのListFillRangeの右側にいちいち手でSheet1!A1:A5のように打ち込まなければならないようです。これではけっこう手間がかかってしまいます。
わたしのやりかたが間違っているのでしょうか?

Aベストアンサー

#2です。
>この意味が良くわかりませんでした。
エクセル(VBA)ではリストに出す範囲を指定するだけですが、
VBのコンボボックスの項目(アイテム)の登録はListFillRangeがないので、AddItemを項目数だけ、記述
する必要があると言うことを言いたかったのです。
エクセル(VBA)では手数が省けていると思います。

Qエクセル コンボボックスで選んだ文字を

エクセルにて
コントロール ツールボックスで、コンボボックスを作りました。
コンボボックス内の項目は都道府県名を選べるようにした場合
北海道を選んだらA1に北海道
沖縄を選んだらA1に沖縄と
コンボボックスで選んだ文字がA1へ返されるようにしたいのですが
どのようにすれば宜しいのでしょうか?

ご存知の方いらっしゃいましたら宜しくお願い申し上げます。

Aベストアンサー

#1のご回答どおりですが、
ツールバーの編集モードのアイコン(定規と鉛筆)をクリックして
編集モードに入る(へっこんだ感じになる)
8個の小さい丸が辺に現れる
コンボ上で右クリック
プロパティウインドウが現れる
LinkedCellを探し右枠に「A1」と入れる。(通常の番地表記式で入力する。1セルだけしか指定できない。
上記編集モードのアイコンをクリックして、編集モードを脱する。
ほかにVBAでも設定もできる。
ーーー
似たようなもので、入力規則の「リスト」りようあり。
ーーー
ほかに似たものとして、ListFillRangeがあり、複数セルを指定可。

Qエクセルに貼りついたコンボボックスについて

パソコン初心者です。よろしくお願いします。

インターネットの画面をコピーしてエクセルに貼り付けました。
余分な部分まで貼り付けてしまい削除したのですが、コンボボックスがどうしても削除できません。(リンクははずしました。)
ドラッグすることもできず、行を削除してもコンボボックスは残っております。どうしたらコンボボックスを削除できるでしょうか?
ご回答よろしくお願いいたします。

Aベストアンサー

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
3)これでツールバーが追加されて「デザインモード」というアイコンが表示され
  ていれば、下記の作業を行ってみて下さい。

次に、コンボボックスの削除を行います。
※添付画像もご覧下さい。

4)ツールバーの「デザインモード」のアイコンをクリックして、くぼんだ状態に
  して下さい。(※デザインモードをONの状態にします。)
5)シート上の消したい「コンボボックス」にマウスを当ててクリックして下さい。
  ※これで「コンボボックス」が選択状態になり、周囲にサイズ変更用の
   マークが表示されると思います。
6)上記5)でコンボボックスが選択状態になったら、[Del]キー(デリートキー)
  を押して下さい。
  ※これで「コンボボックス」が削除されれば完了です。
7)続けて、他のコンボボックスなどのコントロールを削除したい場合は、
 上記5)、6)の作業を繰り返して下さい。

8)なお、シート上のコントロールを全て削除したい場合は、下記の操作を
 行って下さい。
 ◎あらかじめ「デザインモード」をONの状態にします。
   ↓
 ◎メニュー: 「編集」→「ジャンプ」
   ↓
 ◎表示された「ジャンプ」ダイアログの「セル選択」ボタンをクリックします。
   ↓
 ◎表示」された「選択オプション」ダイアログの中の「オブジェクト」という
  項目(オプションボタン)を選択します。
   ↓
 ◎「OK」ボタンをクリックします。
   ↓
 ◎これでシート上の全てのコントロールが選択された状態になります。
   ↓
 ◎ここで[Del]キー(デリートキー)を押せば、全てのコントロールが削除
  されます。

9)作業が終了したら、「デザインモード」アイコンを再度クリックして、
  デザインモードをOFFにします。

以上で作業完了です。

もしも上手くいかなかった場合はすみません。
参考になれば幸いです。

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
...続きを読む

Qエクセルのマクロ コンボボックス他について

下記のプログラムでユーザーフォームを作成しました。
まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。
しかし、エラーは出ていないので文法的には合っているようにおもいます。
それだけに、どこが違うのか尚更わかりません。

なお、Unload UserForm1 を Unload UserForm にした場合、
Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を
UserForm にした場合、
「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。
どこが悪いのかわかりません。
どなたか、教えてください。

なお、エクセルは2003、OSはXPです。

Private Sub ComboBox1_Change()
End Sub

Private Sub ComboBox2_Change()
End Sub

Private Sub ComboBox3_Change()
End Sub

Private Sub CommandButton1_Click()
Unload UserForm1
Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value
Unload UserForm1
Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value
Unload UserForm1
Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value
End Sub

Private Sub UserForm_initialize()
With ComboBox1
.AddItem "U"
.AddItem "K"
.AddItem "E"
End With
With ComboBox2
.AddItem "A"
.AddItem "B"
.AddItem "C"
End With
With ComboBox3
.AddItem "D"
.AddItem "E"
.AddItem "F"
End With
End Sub

下記のプログラムでユーザーフォームを作成しました。
まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。
しかし、エラーは出ていないので文法的には合っているようにおもいます。
それだけに、どこが違うのか尚更わかりません。

なお、Unload UserForm1 を Unload UserForm にした場合、
Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を
UserForm にした場合、
...続きを読む

Aベストアンサー

#1です。

エラーも出ないで、思った動作にもならないとは思えませんが、、、
質問に書いたコード以外にも記述があるのかな?

> 最終処理として、所定の箇所に選択した記号が表示(コピー)される

ここでいう「最終処理」とはCommandButton1をクリックする事で、「所定の箇所」とは基本データ作成シートのセルC3~C5の事で、「記号」とは各ComboBox1~3の値(AとかKとか)ですよね?

> 一度閉じてしまったユーザーフォームの画面を開けるには

Show メソッドを呼ぶだけです。
ユーザーフォームのオブジェクト名が UserForm1 なら

 UserForm1.Show

QエクセルVBA コンボボックスで強制終了

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボボックス22リスト設定:データ数80

現象
 (1)コンボボックス22を▼でなく入力し、保存すると強制終了
 (2)上記現象発生後、コンボボックス1の▼押下で強制終了
 (3)複数のPCで試したが、性能の良いPCでもたまに起こる。
  性能が悪いPCの場合、確実に起きる。
 (4)他のフォームはいくらやってもこの現象は発生しない。
  但し、コンボボックス2~21のような大量なコンボボックスはない

考えること
 (1)コンボボックスのリストの限界等はあるのでしょうか。
 (2)メモリ等の関係で発生するのでしょうか。
 (3)コンボボックスに入力不可とするか、テキストでNoを入力
  させる方法をとった方がよいでしょうか。

長々とすみません。
よろしくお願いいたします。

   

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボ...続きを読む

Aベストアンサー

こんにちは。

>VBAを組んだのは2007で今、それを動かしているのは2002です。
>こんなことをしているのが悪いのでしょうか・・・。

一般論なのですが、VBAの場合は、下位互換は期待しないほうがよい、ということです。下のバージョンでは、テキストコード(.bas)で、エクスポート・インポートをしたほうが良いかもしれません。特に、2007と2003では、ファイルフォーマットが違いますからね。

>自分で設定しない限りは、Add-inの機能はエクセルに入ってないという認識でよいでしょうか?

今、私は、「自分で設定しない限り」だったか、ちょっとはっきり答えられません。これは、当面、そのままにしておきます。

QAccess2003フォームでコンボボックスの内容が消える。

こんにちは。
Access2003について質問させてください。

フォームにコンボ[1]コンボ[2]コンボ[3]があり
[1]の選択結果によって[2]、[2]の選択結果によって[3]の内容が変わるように
SQLステートメントの抽出条件に[forms]![フォーム名]![○○○]で設定をしています。
これで、テーブルにはきちんと入力データが保存されているのですが、
次回フォームを開いたときにコンボ[2][3]が空欄になっています。

どうしてなのでしょうか?
フォームにも表示させておく方法があれば教えて下さい。

Aベストアンサー

>フォームは入力用の設定はなく

>フォームを開くときのイベントにも
>コンボボックスを再クエリするコードを入れましたが
>やはり表示されません(>_<)
なんか変なやり方をしているのでしょうね

実物を見ないで想像だけでそれが何かを言い当てるのは
できそうにありません

誰か身近のAccessのできる人に実物を見てもらってください
たぶんそんな難しいことじゃないでしょから
大ベテランでなくても大丈夫だと思いますよ


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

人気Q&Aランキング