アプリ版:「スタンプのみでお礼する」機能のリリースについて

レコードセレクタで選択された複数レコードの操作
http://support.microsoft.com/kb/407904/ja

を参考にして、下記のコードを作成しました。
横向き▼から下へShift+クリックで複数選択して、
実行すると問題はないのですが、添付画像のように
上方向に選択した場合は、
「カレントレコードがありません。」とエラーが出てしまいます。
どうやら
SelTopプロパティで横向き▼の位置を特定しているようで、
SelHeightプロパティで選択されているレコード数を取得しても
下方向に選択レコード数ループするようです。

上方向に選択レコードがある場合どうすれば良いでしょうか?

Dim rs As Recordset
Dim i As Long

Set rs = Me.RecordsetClone
rs.MoveFirst

'選択されている最初のレコードへ移動
rs.Move Me.SelTop - 1

For i = 1 To Me.SelHeight
  Debug.Print rs![所在地] & rs![地番]
rs.MoveNext
Next i

※添付画像が削除されました。

A 回答 (4件)

説明が前後してしまいますが、


最初のコードは何のイベント
で書かれているコードなのかを
聞いていればもう少し短い
スレッドになったかもしれません。
    • good
    • 0
この回答へのお礼

いろいろ教えて頂きありがとうございました。

お礼日時:2010/02/18 08:56

コードは良いようです。



「やり直せば。」というのは上への
選択がコード上エラーを起こす
仕様になっているので選択し直せば
という意味です。他意はありません。
Form_MouseUpイベントを利用すれば、
レコードが表形式でメインフォーム
に表示されていれば、最初のコードは
以下にできます。サブフォームの場合は
SelTop、SelHeightの各プロパティを
変数に格納し、変数を利用して
RecordsetCloneを取得します。
その詳しい説明はmeronさんが参考に
されたページにすべて書いてあります。


Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim rs As Recordset
Dim i As Long

Set rs = Me.RecordsetClone
rs.MoveFirst

'選択されている最初のレコードへ移動
rs.Move Me.SelTop - 1

For i = 1 To Me.SelHeight
MsgBox rs![所在地] & rs![地番]
rs.MoveNext
Next i

End Sub
    • good
    • 0

失礼しました。


変数にプロパティの値を格納
していないので、単純に
やり直せば、ということ
です。Seltopプロパティの
意味がわかっていれば、この
場合はSeltopの位置より上方
は選択対象からははずれます。

この回答への補足

回答ありがとうございます。
Access2007を使用しています。
Seltopプロパティの意味はわかっているつもりですが、
それでは、どのタイミングで変数に格納すればよいのでしょうか?
「やり直す」とはどのような意味でしょうか?

補足日時:2010/02/17 08:43
    • good
    • 0
この回答へのお礼

MouseUpイベントで行けそうです。
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Me.SelHeight > 0 Then
Debug.Print SelTop & "番目から" & SelHeight & "個"
End If
End Sub

問題なさそうでしょうか?。。。。

お礼日時:2010/02/17 09:15

>上方向に選択レコードがある場合どうすれば良いでしょうか?



SelTopプロパティ、SelHeightプロパティ
を初期化して、選択し直せばいいのでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す