過去ログ

                                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ボタン」を押したときに、入力したものに同じものがあった場合、
「同じものがあります」
というように書き替えを促すようなことは可能でしょうか。

わかる方がいらっしゃれば、ご教授願います。
 ───────────────────────────────────────  ■題名 : Re:SetFocus 他多数  ■名前 : Jaka  ■日付 : 02/12/2(月) 17:30  -------------------------------------------------------------------------
   こんにちは、ほとんど全くどの様な事をやっているのか解らないまま、取りあえずラベル表示のところだけ、考えてみたんだけど..。
間違っていたらすみません。

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
 ───────────────────────────────────────  ■題名 : Re:SetFocus 他多数  ■名前 : いぬだわん  ■日付 : 02/12/3(火) 13:49  -------------------------------------------------------------------------
   ▼Jaka さん:
こんにちは。早速の回答、ありがとうございます。

やっていることは、
ワークシートに既にある文字を別のものに書き替える、
という作業を行います。

UserForm2というのが出てきたとのことですが、
UserForm1のことです。
 ───────────────────────────────────────  ■題名 : Re:SetFocus 他多数  ■名前 : Jaka  ■日付 : 02/12/3(火) 15:57  -------------------------------------------------------------------------
   こんな感じでしょうか?良く解っていませんので外しているかも...。

>((その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
 ───────────────────────────────────────  ■題名 : Re:SetFocus 他多数  ■名前 : いぬだわん  ■日付 : 02/12/5(木) 15:06  -------------------------------------------------------------------------
   ▼Jaka さん:
こんにちは。

いろいろありがとうございます。
返事が遅くなってすみません。

これでちょっとやってみます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 435