Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3444 / 13644 ツリー ←次へ | 前へ→

【62183】フォームのテキストボックス(Excel) ponponpon 09/6/28(日) 17:21 質問[未読]
【62184】Re:フォームのテキストボックス(Excel) りん 09/6/28(日) 17:27 発言[未読]
【62185】Re:フォームのテキストボックス(Excel) ponponpon 09/6/28(日) 18:19 発言[未読]
【62188】Re:フォームのテキストボックス(Excel) ma 09/6/28(日) 21:10 発言[未読]
【62193】Re:フォームのテキストボックス(Excel) ponponpon 09/6/28(日) 22:55 お礼[未読]

【62183】フォームのテキストボックス(Excel)
質問  ponponpon  - 09/6/28(日) 17:21 -

引用なし
パスワード
   ExcelVBAを勉強し始めたばかりの者です。
ビデオ教材で勉強しておりますがわからないところがありましたので
教えていただきたく投稿いたします。

フォームをつくり、いくつかのテキストボックスが入っています。
1つのテキストボックスがおかしな動きをします。
文字入力をし、漢字に変換し、確定のためEnterキーを押すと、
上のテキストボックスに入力した文字がすべて消えてしまいます。
プロパティのLockedはfalse、
Enabledはtrueで設定されていますので
入力は出来るはずなのですがそれも出来ず
他のテキストボックスの入力まで消えてしまうのが
よくわかりません。
そのようなことが起こる設定はあるのでしょうか。
Enterキーを押したときの動作を設定するプロパティでもあるのでしょうか。


コードは以下のとおりです。
Option Explicit
Private i As Long

Private Sub CommandButton1_Click()

Worksheets(1).Cells(i, 1).Value = TextBox1.Value
Worksheets(1).Cells(i, 2).Value = TextBox2.Value
Worksheets(1).Cells(i, 3).Value = ComboBox1.Value
Worksheets(1).Cells(i, 5).Value = TextBox3.Value
Worksheets(1).Cells(i, 6).Value = TextBox4.Value

End Sub

'次へ移動
Private Sub CommandButton2_Click()

i = i + 1
Call Display

End Sub

'前へ移動
Private Sub CommandButton3_Click()
If i = 2 Then
MsgBox "前に戻れません"
End If
i = i - 1
Call Display

End Sub

Private Sub TextBox4_Change()

Call Display

End Sub

'フォームの初期設定
Private Sub UserForm_Initialize()

i = 2

Call Display

ComboBox1.AddItem "経理課"
ComboBox1.AddItem "人事課"
ComboBox1.AddItem "営業1課"
ComboBox1.AddItem "営業2課"


End Sub

'データ表示

Public Sub Display()
TextBox1.Value = Worksheets(1).Cells(i, 1).Value
TextBox2.Value = Worksheets(1).Cells(i, 2).Value
ComboBox1.Value = Worksheets(1).Cells(i, 3).Value
TextBox3.Value = Worksheets(1).Cells(i, 5).Value
TextBox4.Value = Worksheets(1).Cells(i, 6).Value
End Sub

excel表のそれぞれの列のタイトルは
1列目タイトル 社員コード
2列目タイトル 氏名
3列目タイトル 所属部署
4列目タイトル 性別
5列目タイトル 電話番号
6列目タイトル 住所

です。

2列目からデータが入っています。

なお、もしコードは正確に入力できていて、へんなところを
間違えていじっていなければ
見ていたビデオではこれで問題なく動いているようでした。

また、住所の欄をいじらなければすべて問題なく動くようです。

よろしくお願いいたします。

【62184】Re:フォームのテキストボックス(Excel)
発言  りん E-MAIL  - 09/6/28(日) 17:27 -

引用なし
パスワード
   ponponpon さん、こんにちわ。

ざっとみただけですが、

↓住所を入力するテキストボックスで文字列を入力するとこのイベントがおきます。
>Private Sub TextBox4_Change()
>
>Call Display
>
>End Sub

↓イベントでは、このモジュールが呼び出されます。

>Public Sub Display()
>TextBox1.Value = Worksheets(1).Cells(i, 1).Value
>TextBox2.Value = Worksheets(1).Cells(i, 2).Value
>ComboBox1.Value = Worksheets(1).Cells(i, 3).Value
>TextBox3.Value = Worksheets(1).Cells(i, 5).Value
>TextBox4.Value = Worksheets(1).Cells(i, 6).Value
  ↑ここでセルの内容を読み込んでいます。
>End Sub

【62185】Re:フォームのテキストボックス(Excel)
発言  ponponpon  - 09/6/28(日) 18:19 -

引用なし
パスワード
   さっそくのお返事有難うございます。

はい、Excelの表がありまして
そちらのもともと入っていたデータはフォームに表示されるのですが
フォーム上のテキストボックスで住所(textbox4)への入力ができません。
特にそのテキストボックスへの文字入力自体が出来ないのです。
そのテキストボックスは住所欄なので文字を入力し、
変換をして漢字に直し、変換確定のためEnterキーをおすと
入力した文字が消えてしまいます。
同時にその瞬間
なぜか他のテキストボックスに入力していた文字まで消えてしまいます。
そのEnterキーを押すと入力しかけた文字が消えてしまうことや他のテキストボックスの入力済み文字まで消えてしまうところがよくわかりませんでした。


説明不足で申し訳ありません。
説明を追加します。

最初にExcelの表があり、
それを1件ずつ表示できるフォームを作りました。
1行目がタイトル(フィールド名?)で
2行目からデータが入っています。


フォームには

社員コード、氏名などを入力するテキストボックスが
それらのラベルとセットで複数あります。

フォームの下のほうに
登録、前へ移動、次へ移動の3つのボタンがあり
登録で保存(excelの表への入力)、
前へ移動で前のデータへ、
次へ移動で次のデータへ移動が出来ます。

Excel表は
2列目が最初のデータの列なのでそれより前に移動は
出来ないようになっています。

住所(textbox4)に文字入力せず無視して
ほかのテキストボックスのみ入力して登録ボタンをクリックすれば
Excelの表に入力されます。

textbox1〜3に入力、combobox1に入力(一覧から選択)の後、
最後にtextbox4で文字入力し、文字変換後確定のために
Enterキーを押すと、今までフォームに入力した
すべてが消えてしまいます。

おかしなところをいじってtextbox4でのEnterキー入力での動作を
おかしくしてしまったのかと思い原因を探しているのですが
よくわかりませんでした。

という状況です。

【62188】Re:フォームのテキストボックス(Excel)
発言  ma  - 09/6/28(日) 21:10 -

引用なし
パスワード
   横から失礼いたします。

ponponpon さん、りんさんの回答を見てみましょう。

UFには、イベントがあります。
クリック・ダブルクリック・値の変更(Change)などあります。

Call Displayで、Public Sub Display()が、呼び出されるとき

TextBox4.Value = Worksheets(1).Cells(i, 6).Value  で、

TextBox4.Value の値が変更されています。

そのとき、Private Sub TextBox4_Changeが呼び出されているかと思いますが・・・。

UFの、Private Sub UserForm_Initialize の中にカーソルを置き「F8」を押していくと1行づつでディバッグしていくので分かりやすいかと思います。


▼ponponpon さん:
>ExcelVBAを勉強し始めたばかりの者です。
>ビデオ教材で勉強しておりますがわからないところがありましたので
>教えていただきたく投稿いたします。
>
>フォームをつくり、いくつかのテキストボックスが入っています。
>1つのテキストボックスがおかしな動きをします。
>文字入力をし、漢字に変換し、確定のためEnterキーを押すと、
>上のテキストボックスに入力した文字がすべて消えてしまいます。
>プロパティのLockedはfalse、
>Enabledはtrueで設定されていますので
>入力は出来るはずなのですがそれも出来ず
>他のテキストボックスの入力まで消えてしまうのが
>よくわかりません。
>そのようなことが起こる設定はあるのでしょうか。
>Enterキーを押したときの動作を設定するプロパティでもあるのでしょうか。
>
>
>コードは以下のとおりです。
>Option Explicit
>Private i As Long
>
>Private Sub CommandButton1_Click()
>
>Worksheets(1).Cells(i, 1).Value = TextBox1.Value
>Worksheets(1).Cells(i, 2).Value = TextBox2.Value
>Worksheets(1).Cells(i, 3).Value = ComboBox1.Value
>Worksheets(1).Cells(i, 5).Value = TextBox3.Value
>Worksheets(1).Cells(i, 6).Value = TextBox4.Value
>
>End Sub
>
>'次へ移動
>Private Sub CommandButton2_Click()
>
>i = i + 1
>Call Display
>
>End Sub
>
>'前へ移動
>Private Sub CommandButton3_Click()
>If i = 2 Then
>MsgBox "前に戻れません"
>End If
>i = i - 1
>Call Display
>
>End Sub
>
>Private Sub TextBox4_Change()
>
>Call Display
>
>End Sub
>
>'フォームの初期設定
>Private Sub UserForm_Initialize()
>
>i = 2
>
>Call Display
>
>ComboBox1.AddItem "経理課"
>ComboBox1.AddItem "人事課"
>ComboBox1.AddItem "営業1課"
>ComboBox1.AddItem "営業2課"
>
>
>End Sub
>
>'データ表示
>
>Public Sub Display()
>TextBox1.Value = Worksheets(1).Cells(i, 1).Value
>TextBox2.Value = Worksheets(1).Cells(i, 2).Value
>ComboBox1.Value = Worksheets(1).Cells(i, 3).Value
>TextBox3.Value = Worksheets(1).Cells(i, 5).Value
>TextBox4.Value = Worksheets(1).Cells(i, 6).Value
>End Sub
>
>excel表のそれぞれの列のタイトルは
>1列目タイトル 社員コード
>2列目タイトル 氏名
>3列目タイトル 所属部署
>4列目タイトル 性別
>5列目タイトル 電話番号
>6列目タイトル 住所
>
>です。
>
>2列目からデータが入っています。
>
>なお、もしコードは正確に入力できていて、へんなところを
>間違えていじっていなければ
>見ていたビデオではこれで問題なく動いているようでした。
>
>また、住所の欄をいじらなければすべて問題なく動くようです。
>
>よろしくお願いいたします。

【62193】Re:フォームのテキストボックス(Excel)
お礼  ponponpon  - 09/6/28(日) 22:55 -

引用なし
パスワード
   maさん、りんさん、有難うございました。
解決しました。
F8のことも今回知ることが出来ました。
やってみました。
1行ずつ動いて検証できるんですね。
有難うございました。

3444 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free