Page 435 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼SetFocus 他多数 いぬだわん 02/12/2(月) 14:35 ┗Re:SetFocus 他多数 Jaka 02/12/2(月) 17:30 ┗Re:SetFocus 他多数 いぬだわん 02/12/3(火) 13:49 ┗Re:SetFocus 他多数 Jaka 02/12/3(火) 15:57 ┗Re:SetFocus 他多数 いぬだわん 02/12/5(木) 15:06 ─────────────────────────────────────── ■題名 : SetFocus 他多数 ■名前 : いぬだわん ■日付 : 02/12/2(月) 14:35 -------------------------------------------------------------------------
以前このような質問をしました。 あるワークシートの行の奇数列に任意の文字データがあるとします。 ex) A B C D E F G ・・・ 1 たぬき (空白) ぞう (空白) こじか (空白) さる (空白)・・・ UserForm1があるとして、 UserForm1には、 任意の文字列(奇数列)をLabelプロパティに表示するLabel1から8、 任意の文字を偶数列に入れるためのTextBox1から8、 データが8個以上あった場合のために、9個目以上を表示するためのCommandButton(Next)、 9個以上あった場合、前の文字列データを表示するためのCommandButton(Back) があるとします。 UserForm1には、 任意の文字列(奇数列)をLabelプロパティに表示するLabel1から8、 任意の文字を偶数列に入れるためのTextBox1から8、 データが8個以上あった場合のために、9個目以上を表示するためのCommandButton(Next)、 9個以上あった場合、前の文字列データを表示するためのCommandButton(Back) があり、どちらのボタンを押してもTextBoxに入れた任意の文字を空白セルに書き込みできるようにはできました。 (コロスケさん、Hirofumiさん、その節はありがとうございました。) ↓↓ここからが質問です↓↓ 質問の内容は2つあります。 上記の内容を下記のコードでやっています。 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=773;id=excel ((その1)) そこで、書き込む際、Next、Backボタンを押した時に、 TextBox1から8のTextBoxにて入力がされていなかった場合、 MsgBoxで「入力されていません」というメッセージを出して、 入力されていないTextBoxにカーソルを合わせて入力を促すことをしたのですが、 入力されていない箇所に入力をした後、 「実行時エラー 2110 コントロールが表示されていない、利用できない、またはフォーカスを持てないため、 コントロールにフォーカスを移すことができません。」 というエラーメッセージが出ます。 このようなエラーを回避することは可能ですか。 ((その2)) 「OKボタン」を押したときに、入力したものに同じものがあった場合、 「同じものがあります」 というように書き替えを促すようなことは可能でしょうか。 わかる方がいらっしゃれば、ご教授願います。 |
こんにちは、ほとんど全くどの様な事をやっているのか解らないまま、取りあえずラベル表示のところだけ、考えてみたんだけど..。 間違っていたらすみません。 UserForm2と言うのが解りません。 1つのフォームだけでやっているのではないのでしょうか? フォームレイアウトなども書いて説明されると、頭の悪い私でも力添えできるかもしれません。 Private Sub cmdBack_Click() If TextBox1.ControlTipText <> "1" Then GetData TextBox1.ControlTipText - 1 End If End Sub Private Sub cmdNext_Click() If TextBox8.ControlTipText <> "10" Then GetData TextBox1.ControlTipText + 1 End If End Sub Private Sub CommandButton1_Click() Unload Me End End Sub Private Sub UserForm_Initialize() NewData GetData 1 End Sub 'ここのUserForm2が、??? Sub SetData() For i = 1 To 8 Cells(1, i + 1) = UserForm2.Controls("TextBox" & i).Text Next i End Sub Sub NewData() For i = 1 To 8 With UserForm1 .Controls("TextBox" & i).Text = "" End With Next i End Sub Sub GetData(Col As Integer) For i = Col To 8 + Col - 1 With UserForm1 .Controls("Label" & i - Col + 1).Caption = Cells(1, 2 * i - 1) .Controls("TextBox" & i - Col + 1).ControlTipText = i End With Next i End Sub |
▼Jaka さん: こんにちは。早速の回答、ありがとうございます。 やっていることは、 ワークシートに既にある文字を別のものに書き替える、 という作業を行います。 UserForm2というのが出てきたとのことですが、 UserForm1のことです。 |
こんな感じでしょうか?良く解っていませんので外しているかも...。 >((その2)) >「OKボタン」を押したときに、入力したものに同じものがあった場合、 >「同じものがあります」 >というように書き替えを促すようなことは可能でしょうか。 OKボタンを押したときよりclassを使って、Exitイベントで処理した方が言いと思いますけど。このコードには入っていません。 Private Sub cmdBack_Click() If TextBox1.ControlTipText <> "1" Then GetData TextBox1.ControlTipText - 1 End If End Sub Private Sub cmdNext_Click() If TextBox8.ControlTipText <> "10" Then GetData TextBox1.ControlTipText + 1 End If End Sub Private Sub CommandButton1_Click() Unload Me End End Sub '書き換え Private Sub CommandButton2_Click() TextNo = TextBox1.ControlTipText SetData TextNo End Sub 'Initializeは、やめました。 Private Sub UserForm_Activate() NewData GetData 1 End Sub Sub SetData(TextNo) Dim ErrF As Boolean ErrF = False For i = TextNo To 8 + TextNo - 1 Txn = i - TextNo + 1 CRn = i * 2 Cells(1, CRn) = UserForm1.Controls("TextBox" & Txn).Text If UserForm1.Controls("TextBox" & Txn).Text = "" And ErrF = False Then ErrF = True TTn = Txn End If Next i If ErrF = True Then ErrMsg (TTn) End Sub Sub NewData() For i = 1 To 8 With UserForm1 .Controls("TextBox" & i).Text = "" End With Next i End Sub Sub GetData(Col As Integer) Dim ErrF As Boolean ErrF = False For i = Col To 8 + Col - 1 With UserForm1 .Controls("Label" & i - Col + 1).Caption = Cells(1, 2 * i - 1) .Controls("TextBox" & i - Col + 1).ControlTipText = i .Controls("TextBox" & i - Col + 1).Value = Cells(1, 2 * i - 1).Offset(, 1).Value If .Controls("TextBox" & i - Col + 1).Text = "" And ErrF = False Then ErrF = True TTn = i - Col + 1 End If End With Next i If ErrF = True Then ErrMsg (TTn) End Sub Sub ErrMsg(TTn) DoEvents UserForm1.Controls("TextBox" & TTn).SetFocus MsgBox "入力されていません。" End Sub |
▼Jaka さん: こんにちは。 いろいろありがとうございます。 返事が遅くなってすみません。 これでちょっとやってみます。 |