過去ログ

                                Page     697
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼レコード移動ボタンについて  EBA 03/2/6(木) 12:45
   ┗Re:レコード移動ボタンについて  Jaka 03/2/6(木) 14:42
      ┗見落し  Jaka 03/2/6(木) 14:51
         ┗ごめんなさい。うえの見落しは、無視してください。  Jaka 03/2/6(木) 15:46
            ┗Re:レコード移動について  EBA 03/2/6(木) 16:06
               ┗Re:レコード移動について  Jaka 03/2/7(金) 9:08
                  ┗Re:レコード移動について  EBA 03/2/7(金) 10:20

 ───────────────────────────────────────
 ■題名 : レコード移動ボタンについて
 ■名前 : EBA
 ■日付 : 03/2/6(木) 12:45
 -------------------------------------------------------------------------
   またまたお世話になります。
EXCELVBA初心者のEBAです。
早速ですが質問させていただきたいのです。

   A      B      C
1 設計番号 御得意先名    設計金額 
2 10001  にゃんこ建設(株)  1,000
3 10002  わんわん建設(株)  2,000
4 10003  (株)ひつじ     3,000
5 10004  (株)どらどら設計  4,000
6 10005  (株)ふくろう建設  5,000
・  ・      ・      ・
・  ・      ・      ・
・  ・      ・      ・
(設計番号は200くらいだとして)というシート(設計List)があります。
ユーザーフォームにテキストボックス1(設計番号)、2(御得意先名)、3(設計金額)。
コマンドボタン1(先頭)、2(ステップ10前へ)、3(前へ)、4(後へ)、
5(ステップ10後へ)、6(最後)をつくり、
セルの内容をリンクさせてレコード移動をしたいのです。
下のようなコードを書いたのですが、コマンドボタン2のステップ10前へ
(カレントレコードの10件前へとぶ)のボタンのコードで、もし前に10件以下しかデータが
無い場合は先頭レコードへとぶ、というのがわからいのです。
Controlsourceプロパティを設定できません。プロパティの値が不正です。
というメッセージがでるのですが、どう修正してよいのやら???
コマンドボタン5(ステップ10後へ)はうまく作動するのです。
どなたかご教授お願い致します。

****************************************************
Dim First As Long  '最初のレコード
Dim Last As Long   '最後のレコード
Dim Current As Long 'カレントレコード
'================================================
Private Sub UserForm_Initialize()
  
  Worksheets("設計List").Select
  First = Range("A1").CurrentRegion.Row + 1
  Last = Range("A1").CurrentRegion.Rows.Count
  
  Current = Last
  LinkCell
End Sub
'================================================
'「先頭」
Private Sub CommandButton1_Click()
  Current = First
  LinkCell
End Sub
'================================================
'「ステップ10前へ」
Private Sub CommandButton2_Click()
   If Current > FirstRow Then
    Current = Current - 10
    LinkCell
      If Current < First Then
        Current = First
        LinkCell
        MsgBox "最初のレコードです."
      End If
  End If
End Sub
'================================================
'「前へ」
Private Sub CommandButton3_Click()
  If Current > First Then
    Current = Current - 1
    LinkCell
  End If

End Sub
'================================================
'「次へ」
Private Sub CommandButton4_Click()
  
  If Current < Last Then
    Current = Current + 1
    LinkCell
  End If

End Sub
'================================================
'「ステップ10次へ」
Private Sub CommandButton5_Click()
  If Current < Last Then
    Current = Current + 10
    LinkCell
      If Current > Last Then
        Current = Last
        LinkCell
        MsgBox "最後のレコードです."
      End If
  End If
End Sub
'================================================
'「最後」
Private Sub CommandButton6_Click()
  Current = Last
  LinkCell
End Sub

'================================================
Sub LinkCell()
  Dim strRang As String
  strRang = "A" & Current
  TextBox1.ControlSource = strRang
  strRang = "B" & Current
  TextBox2.ControlSource = strRang
  strRang = "C" & Current
  TextBox3.ControlSource = strRang
End Sub
 ───────────────────────────────────────  ■題名 : Re:レコード移動ボタンについて  ■名前 : Jaka  ■日付 : 03/2/6(木) 14:42  -------------------------------------------------------------------------
   こんにちは。
こんな感じで良いんじゃないかと思うんですけど..。

>Sub LinkCell()
>  Dim strRang As String
>  strRang = "A" & Current
>  TextBox1.ControlSource = strRang
>  strRang = "B" & Current
>  TextBox2.ControlSource = strRang
>  strRang = "C" & Current
>  TextBox3.ControlSource = strRang
>End Sub

  ↓

Sub LinkCell()
  Dim strRang As String
  strRang = "A" & Current
  TextBox1.value = range(strRang).value
  strRang = "B" & Current
  TextBox2.value = range(strRang).value
  strRang = "C" & Current
  TextBox3.value = range(strRang).value
End Sub
 ───────────────────────────────────────  ■題名 : 見落し  ■名前 : Jaka  ■日付 : 03/2/6(木) 14:51  -------------------------------------------------------------------------
   それと、他のはこうした方が....。

'「ステップ10前へ」
Private Sub CommandButton2_Click()
   If Current > FirstRow Then
    Current = Current - 10
    LinkCell
      If Current < First Then
        Current = First
        LinkCell
        MsgBox "最初のレコードです."
      End If
  End If
End Sub

  ↓

Private Sub CommandButton2_Click()
   If Current > FirstRow Then
    Current = Current - 10
    LinkCell
   elseIf Current < First Then
    Current = First
    LinkCell
    MsgBox "最初のレコードです."
   End If
End Sub

****************************

Private Sub CommandButton5_Click()
  If Current < Last Then
    Current = Current + 10
    LinkCell
      If Current > Last Then
        Current = Last
        LinkCell
        MsgBox "最後のレコードです."
      End If
  End If
End Sub

  ↓

Private Sub CommandButton5_Click()
  If Current < Last Then
    Current = Current + 10
    LinkCell
  elseIf Current > Last Then
    Current = Last
    LinkCell
    MsgBox "最後のレコードです."
  End If
End Sub
 ───────────────────────────────────────  ■題名 : ごめんなさい。うえの見落しは、無視してください。  ■名前 : Jaka  ■日付 : 03/2/6(木) 15:46  -------------------------------------------------------------------------
   ごめんなさい。

良く見ませんでした。
 ───────────────────────────────────────  ■題名 : Re:レコード移動について  ■名前 : EBA  ■日付 : 03/2/6(木) 16:06  -------------------------------------------------------------------------
   ▼Jaka さん:
素早い回答ありがとうございます。
LinkCellのコードを書き直してみたのですが、
「Rengeオブジェクトは失敗しました。Globalオブジェクト」
というメッセージがでるのです。
なにか良いてだては御座いますでしょうか?
それから、大変申し訳ないのですが私のミスでコードに一部誤りが・・・。
Jakaさんのおかげで発見しました。

Private Sub CommandButton2_Click()
   If Current > FirstRow Then
    Current = Current - 10
    LinkCell
   elseIf Current < First Then
    Current = First
    LinkCell
    MsgBox "最初のレコードです."
   End If
End Sub

の2行目のところ、If Current > First Then でした・・・。
これから気をつけます。^_^;
 ───────────────────────────────────────  ■題名 : Re:レコード移動について  ■名前 : Jaka  ■日付 : 03/2/7(金) 9:08  -------------------------------------------------------------------------
   おはようございます。
原因は、Currentがマイナスになっちゃう時がある性みたいでした。
下記コードは私の偏見で、余計なものを加えてあります。


Dim First As Long  '最初のレコード
Dim Last As Long   '最後のレコード
Dim Current As Long 'カレントレコード

Private Sub CommandButton7_Click()
  Unload Me
End Sub

'================================================
Private Sub UserForm_Initialize()
  Worksheets("設計List").Select
  First = Range("A1").CurrentRegion.Row + 1
  Last = Range("A1").CurrentRegion.Rows.Count
  Current = Last
  LinkCell
End Sub
'================================================
'「先頭」
Private Sub CommandButton1_Click()
  Current = First
  LinkCell
End Sub
'================================================
'「ステップ10前へ」
Private Sub CommandButton2_Click()
   If Current = First Then
    MsgBox "現在、最初のレコードです。"
   ElseIf Current <= 10 Then
    Current = First
    LinkCell
    MsgBox "最初のレコードに飛びました。"
   Else
    Current = Current - 10
    LinkCell
   End If
End Sub
'================================================
'「前へ」    ここだけちょっとパターンを変えてみました。意味無し。
Private Sub CommandButton3_Click()
  If Current = First Then
   MsgBox "現在、最初のレコードです。"
  Else
   Current = Current - 1
   LinkCell
   If Current = First Then
     MsgBox "最初のレコードになりました。"
   End If
  End If
End Sub
'================================================
'「次へ」
Private Sub CommandButton4_Click()
  If Current = Last Then
    MsgBox "現在、最後のレコードです."
  ElseIf Current + 1 = Last Then
    Current = Current + 1
    LinkCell
    MsgBox "最後のレコードになりました。"
  Else
    Current = Current + 1
    LinkCell
  End If
End Sub
'================================================
'「ステップ10次へ」
Private Sub CommandButton5_Click()
  If Current = Last Then
    MsgBox "現在、最後のレコードです."
  ElseIf Current + 10 >= Last Then
    Current = Last
    LinkCell
    MsgBox "最後のレコードに飛びました。"
  Else
    Current = Current + 10
    LinkCell
  End If
End Sub
'================================================
'「最後」
Private Sub CommandButton6_Click()
  Current = Last
  LinkCell
End Sub
'================================================
Sub LinkCell()
  Dim strRang As String
  strRang = "A" & Current
  TextBox1.Value = Range(strRang).Value
  strRang = "B" & Current
  TextBox2.Value = Range(strRang).Value
  strRang = "C" & Current
  TextBox3.Value = Range(strRang).Value
End Sub
 ───────────────────────────────────────  ■題名 : Re:レコード移動について  ■名前 : EBA  ■日付 : 03/2/7(金) 10:20  -------------------------------------------------------------------------
   ▼Jaka さん:
おはようございます。
できました!完成です!!
本当にありがとうございました。m(__)m
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 697