まだ、VB初めて2ヶ月なので分かる方、申し訳ないのですが
分かりやすく教えて下さい。

メニュー画面とデータを記入する画面が2画面あります。

メニュー画面の方に、コンボボックスを設置し、
コンボボックスに記入又は、記入したデータを選択させたい
のですが、コンボボックスにデータを保存できません。

最初は空の状態で初めて、コンボボックスに名称を入れます。
保存するデータ入れて、コマンドボタンを押します。
この時コンボボックスの▼を押したら、値は残っていました。
そして、データ記入画面に移ります。
又、メニュー画面に戻ると、その名前は保存されてなく
綺麗さっぱり無くなってしまいます。

本には、大雑把に書いてあるだけでした。

本に書いてあった事は、コンボボックスに値を保存する時、
コマンドボタンに
(コンボボックスのオブジェクト名:cboName)

cboName.AddItem cboName.Text

としか載ってなく、後の事は何も書いてありませんでした。
私には、後どのようにすれば良いのかが分かりません。

どうぞ、よろしくお願い致します。

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

A 回答 (3件)

2画面あるとのことですが、メニュー画面に戻るときもう一度その画面を作成(Load)しているのではないですか?


そのために入力した値はどこにも残っていない状態になっている気がします。

新しくコンボボックスに追加した値をファイルorDBに保存しておいて、メニュー画面を作成する際にコンボボックスに値をセットする
などの対応が必要ではないでしょうか?
    • good
    • 0
この回答へのお礼

早速のご回答有難うございます。ちょっと、出口が見えた気がします。
でも、やっぱり分からないのですが、
要するに、コンボボックスに値を入れっぱなしにせず、
どこかに溜めて置けば宜しいのですか?
そうしますと、どのように書けば良いのですか?
是非、お答えを下さると、嬉しいです。

お礼日時:2001/08/03 13:53

#1の回答から推測すると、解決策は、画面の切り替えを Load 、Unload によって行うのではなく、 Visibleプロパティを使うか、Show 、Hideメソッドを使うかです。

    • good
    • 0
この回答へのお礼

具体的に書いて下さり、有難うございます。ごちゃごちゃだった物が、解けた様です。有難うございました。

お礼日時:2001/08/06 10:02

そのコンボボックスの値はどこに保存するのですか?


ファイルですか?DBですか?それ以外?
つまり、そのマスタとなる場所から値を取得してコンボボックスに設定し、追加が発生した場合は、そのマスタへの更新処理が必要だと思います。
もし、そのマスタが保存する必要もないのであればグローバル変数とするとか、引数として持ちまわす等の処理がいると思います。

具体的な動きが良くわからないので(説明できない理由もあると思いますが)、これが正しいとは言えませんが・・・
    • good
    • 0
この回答へのお礼

色々細かい説明有難うございました。一生懸命何とか書きましたら、何とか出るようになりました。本当に有難うございました。

お礼日時:2001/08/06 09:56

この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のヘルプが見られる環境なら、...続きを読む

Qあるコンボボックス名を選択時に、コマンドボタンを使用不可にする

あるコンボボックス名を選択時に、コマンドボタンを
使用不可にするソースを書いてみたのですが、ダメでした。
コンボボックスのListは処理1~4、Itemdataは1~4とListに
対応した形になっています。

Private Sub ドロップダウン_Change()

If SyoriKubun.Itemdata = コード Then

コマンドボタン.Enabled = False

End If

End Sub

判定部分Itemdataをlistにして、
表示名を判定に使おうとしてもダメでした。
もしかしたら、根本的(使い方)に間違っていますか?
書き込みをお願い致します。

Aベストアンサー

イベントが違うと思います。

正しくは「Private Sub ドロップダウン_Click()」ですよ。
試して見て下さい。

補足で、もし他のを選択した場合のために、「.Enable」プロパティを「True」にしてあげるのも忘れていますよ。

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

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


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

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

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

Aベストアンサー

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

Qコンボボックスからテキストボックスへのデータ反映

コンボボックスにてデータ(文字列+数字)を選択して、同フォーム内にある テキストボックスへ数字だけを表示させるにはどのようにコードを入力すれば良いでしょうか? VS2010を利用しています。

コンボボックスには、●●会社 00000000000
▲▲会社 1111111111

といったように登録されております。

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

TextBox1.Text = ComboBox1.Text

End Sub

上記のコードですと、文字列+数字がテキストボックスへ反映されてしまいます。

お忙しい中お手数をお掛けしますが、ご教授下さい。

Aベストアンサー

TextBox1.Text = ComboBox1.Text.Split(" "c)(1)

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

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

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

Aベストアンサー

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

Q勤怠管理でコマンドボタンを押すことで記入完了とわかるようにしたい

Excelで勤怠管理を作成してます。
以前は作業者電子押印欄を設けてましたが、都合により押印欄を削除しました。

記入完了が一目でわかるように、コマンドボタンにマクロを登録したいと思うのですが知識不足で上手くできません。

コマンドボタンを押下することで
どこか適当なセルに"記入完了"と表示させたり
色で識別できるようにしたりできないでしょうか?

VBAの知識が豊富なかた、助けてください
お願いします

Aベストアンサー

先ほどの質問と関連しているのではないですか。
私が思うに、本部あて報告忘れを本部側でチェックすることではなかったかと思いますが。
こんなことしても、役立たないと思いますよ。
シートには値しか残りません。手書きするのと変わらないと思います。
前日も分の「報告済み」なんて、今日も残っていて、そのまま送ったら、チェックにならない。
前問について、もう少し色んなケースを想定して、対策を考えるべきです。
管理者が報告を承認決裁したか・権限なども絡んできます。
本格的に対策を考えると、システムを作る話になり、質問者では手に負えないでしょう。
ーー
コマンドボタンを押下することで
どこか適当なセルに"記入完了"と表示させたり
色で識別できるようにしたりできないでしょうか?
これはコードを書くことは簡単です。マクロの記録をとり、ボタンに
登録すればよい。それさえ思いつかないのだから、少し本やWEBを勉強したら。
ーー
マクロの記録(一部修正加筆)
ツールーマクロー新しいマクロの記録ー操作
ツールーマクローマクロー編集
結果
Sub Macro1()

Range("C3").Select
ActiveCell.FormulaR1C1 = "記入完了"
Range("C3").Select
With Selection.Interior 'セルの色
.ColorIndex = 22 '色のコード
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With

End Sub

先ほどの質問と関連しているのではないですか。
私が思うに、本部あて報告忘れを本部側でチェックすることではなかったかと思いますが。
こんなことしても、役立たないと思いますよ。
シートには値しか残りません。手書きするのと変わらないと思います。
前日も分の「報告済み」なんて、今日も残っていて、そのまま送ったら、チェックにならない。
前問について、もう少し色んなケースを想定して、対策を考えるべきです。
管理者が報告を承認決裁したか・権限なども絡んできます。
本格的に対策を考えると...続きを読む

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コンボボックスに取得したレコードデータを表示したい

環境:winxp、vb6、access2000

以下の様にアクセスから抽出したレコード"rstdata"をCombo1のデータソースに指定してコンボボックスに表示したいのですが、何も表示されません。
原因が分かる方がいらっしゃればご教示ください。


*******コード********
Dim cn As New ADODB.Connection
Dim cmd As ADODB.Command
Dim rstdata As ADODB.Recordset
Dim strSQLdata As String
Set cn = New ADODB.Connection
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False;" & _
"Data Source=aaa.mdb;" & _
"Mode=Read"
cn.Open
Set rstdata = New ADODB.Recordset
strSQLdata = "Select 項目名 From T_SHIKENDATA order by ID"
rstdata.Open strSQLdata, cn, adOpenStatic
Set Combo1.DataSource = rstdata
rstdata.Close
Set rstdata = Nothing
cn.Close
Set cn = Nothing

環境:winxp、vb6、access2000

以下の様にアクセスから抽出したレコード"rstdata"をCombo1のデータソースに指定してコンボボックスに表示したいのですが、何も表示されません。
原因が分かる方がいらっしゃればご教示ください。


*******コード********
Dim cn As New ADODB.Connection
Dim cmd As ADODB.Command
Dim rstdata As ADODB.Recordset
Dim strSQLdata As String
Set cn = New ADODB.Connection
cn.ConnectionString = ...続きを読む

Aベストアンサー

Set Combo1.DataSource = rstdata
Combo1.DataField = "項目名"
ですと、カレントレコードのみのようですね。


Do Until rstdata.EOF
Combo1.AddItem rstdata("項目名")
rstdata.MoveNext
Loop
ではダメでしょうか。

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の機能はエクセルに入ってないという認識でよいでしょうか?

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

Qデータコンボボックスを連動させたい。

はじめまして、宜しくお願いします。

VB6、SQLサーバーでタイトルのようなことを実現したいと思っています。

データベース(テーブル名:行事履歴)の内容は

年度    行事
----------------------
2001    夏期キャンプ
2001    修学旅行
2002    社会見学

となっており、

コンボ1で年度を選択して、選択した年度の行事を
コンボ2にリストとして表示したいと思っています。
(例えば、コンボ1で"2001"を選ぶとコンボ2には"夏期キャンプ"、"修学旅行"
のみが表示される)

現在やっているのは
コンボ1とそれに連結しているADOデータコントロール1、
コンボ2とそれに連結しているADOデータコントロール2を用意して

ADOデータコントロール1のRecordSourceには
"SELECT DISTINCT 年度 FROM 行事履歴"

ADOデータコントロール2のRecordSourceには
"SELECT * FROM 行事履歴"
としておき、

ADOデータコントロール1のCHANGEイベントで
ADOデータコントロール2のRecordSourceを
"SELECT * FROM 行事履歴 WHERE 年度 = '" & ADOデータコントロール1.TEXT & "'"

としているのですがコンボ2のリストに
"夏期キャンプ"、"修学旅行"、"社会見学"が3つとも表示されてしまい、
うまく連動してくれず行き詰っています。
(一応、コンボ2の.Refreshメソッドを行っているのですがうまくいかないようです。)

もしもなにかお気づきの方が居られましたら、ご教授ください。
宜しくお願いいたします。

はじめまして、宜しくお願いします。

VB6、SQLサーバーでタイトルのようなことを実現したいと思っています。

データベース(テーブル名:行事履歴)の内容は

年度    行事
----------------------
2001    夏期キャンプ
2001    修学旅行
2002    社会見学

となっており、

コンボ1で年度を選択して、選択した年度の行事を
コンボ2にリストとして表示したいと思っています。
(例えば、コンボ1で"2001"を選ぶとコンボ2には"夏期キャンプ"、"修学旅行"
のみが表示...続きを読む

Aベストアンサー

>一応、コンボ2の.Refreshメソッドを行っているのですがうまくいかないようです。
コンボ2ではなくADOデータコントロール2をRefreshしてみてください。

Private Sub DataCombo1_Change()
Adodc2.RecordSource = "SELECT * FROM 行事履歴 WHERE 年度 = '" & DataCombo1.Text & "'"
Adodc2.Refresh
End Sub

これでだめなようなら、補足してください。


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

人気Q&Aランキング