人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記の質問の続きです。Accessのフォームにテキストボックスをつけます。日付のみテキストボックスで入力できるようにします。ボタンを押すと、入力したテキストボックスの日付以降をテーブルに挿入したいです。
http://q.hatena.ne.jp/1238561501
例えばテキストボックスに10/1と入力します。ボタンを押すとExcelのA列を参照して10/1が最初に出てくればそれ以降の行を見てテーブルへの挿入をしたいと思っています。どのように実現すればよいでしょうか?またテキストボックスに日付以外を挿入できないようにするにはどのようにしたらよいでしょうか?

●質問者: akaired
●カテゴリ:コンピュータ
✍キーワード:access Excel テキスト ボタン ボックス
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● SALINGER
●60ポイント

フォームに追加したボタン名はコマンド1、テキストボックス名はテキスト0としています。

ボタンのClickイベントで日付かどうかを判断し、日付の場合はデータを取得するプロシージャに渡します。

Option Compare Database

Private Sub コマンド1_Click()
  'テキストボックスが日付に変換できるかをチェック
 If Not IsDate(テキスト0.Value) Then
 MsgBox "日付を入力してください"
 Else
 Call AddXls(DateValue(テキスト0.Value))
 End If
End Sub

Sub AddXls(myDate2 As Date)
 Dim DB As DAO.Database
 Dim RS As DAO.Recordset
 Dim appExcel As Object
 Dim ws As Worksheet
 Dim lastRow As Long
 Dim i As Long
 Dim j As Integer
 Dim myDate As Date
 Dim myID As String
 Dim myMoney As Long
 Dim myText As String
 Dim f As Boolean
 
 Set DB = CurrentDb
  'テーブル名はTestTableとしました
 Set RS = CurrentDb.OpenRecordset("TestTable")

  'エクセルファイルのパスを指定
 Set appExcel = GetObject("C:\Documents and Settings\hogehoge\デスクトップ\test.xls")
 
  'シート名をマイシートとしました
 Set ws = appExcel.Worksheets("マイシート")

  '作業中はエクセルシートを非表示
 appExcel.Parent.Windows(appExcel.Name).Visible = False

  '最終行の取得(マネー列を使用しました)
 lastRow = ws.Cells(ws.Rows.Count, 3).End(xlup).row
 
  '日付データの比較から、行の取得
 For i = 10 To lastRow
 If ws.Cells(i, 1).Value <> "" Then
 myDate = ws.Cells(i, 1).Value
 End If
 
 If myDate >= myDate2 Then
 f = True
 Exit For
 End If
 Next i
 
  'Excelからデータの取得
 If f Then
 For j = i To lastRow
 If ws.Cells(j, 1).Value <> "" Then
 myDate = ws.Cells(j, 1).Value
 End If
 If ws.Cells(j, 2).Value <> "" Then
 myID = ws.Cells(j, 2).Value
 End If
 myMoney = ws.Cells(j, 3).Value
 myText = ws.Cells(j, 4).Value
 
  'レコードセットに追加
 RS.AddNew
 RS.Fields(0) = myDate
 RS.Fields(1) = myID
 RS.Fields(2) = myMoney
 RS.Fields(3) = myText
 RS.Update
 Next
 End If
 
 appExcel.Parent.Windows(appExcel.Name).Visible = True
 
  'エクセルブックを閉じる
 appExcel.Close True
 
  ' オブジェクトの参照を解放
 Set ws = Nothing
 Set appExcel = Nothing
 
 MsgBox ("エクセルの読み込みが終了しました")

End Sub
◎質問者からの返答

ご回答ありがとうございます。説明下手で申し訳ございません。一番しりたいのはA列で指定の日付が最初にでてくる所の行数がしりたいです。そこの処理だけでありがたいです。例えばA列全選択して指定の日付を検索(もじくは文字列)。ヒットした文字列の一番最初の行数を得たいです。

例えば10/10を指定します。A列の100行目から110行目にかけて10/10が入力されていたとします。一番最初に100行目の10/10がヒットするので100行目というのを変数に格納したいのです。これを実現できる関数があればお教えください。Find,match,instrなんの関数を利用しても実現できればOKです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ