Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


353 / 500 ページ ←次へ | 前へ→

【6150】Re:レコードNo.を取得する方法
お礼  きこ  - 05/9/2(金) 15:54 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございました。

指示どおりやってみました。
簡単にできてしまいました。
ありがとうございました。

できちゃうと、簡単なものなんですねえ。
感激です。


>>「AbsolutePosition」プロパティってどこにあるのですか?
>
>どこに…と言われると難しいんですが…。VBA で使う事ができます。
>
>
>>フォーム上でレコードNo.が取得できればいいのですが・・・。
>
>まずフォーム上に「txtレコード」という名前でテキストボックスを配置してみて下さい。
>
>次にフォームのプロパティを開いて
>
>[イベント] タブの [レコード移動時] を選択して右側の「...」をクリック。
>
>コードビルダを選択すると VBA を記述する画面が出てきまので、
>
>
>Private Sub Form_Current()
>  Me.txtレコード = Me.Recordset.AbsolutePosition + 1
>End Sub
>
>と記述して画面を閉じます。(記述はコピー&ペーストで大丈夫です。)
>
>
>フォームのレコードが変わるたびに「txtレコード」の値が変わると思うのですが
>いかがでしょうか?
>
>外していたらすみません。
・ツリー全体表示

【6149】Re:レコードNo.を取得する方法
回答  小僧  - 05/9/2(金) 15:25 -

引用なし
パスワード
   ▼きこ さん:
こんにちは。

>「AbsolutePosition」プロパティってどこにあるのですか?

どこに…と言われると難しいんですが…。VBA で使う事ができます。


>フォーム上でレコードNo.が取得できればいいのですが・・・。

まずフォーム上に「txtレコード」という名前でテキストボックスを配置してみて下さい。

次にフォームのプロパティを開いて

[イベント] タブの [レコード移動時] を選択して右側の「...」をクリック。

コードビルダを選択すると VBA を記述する画面が出てきまので、


Private Sub Form_Current()
  Me.txtレコード = Me.Recordset.AbsolutePosition + 1
End Sub

と記述して画面を閉じます。(記述はコピー&ペーストで大丈夫です。)


フォームのレコードが変わるたびに「txtレコード」の値が変わると思うのですが
いかがでしょうか?

外していたらすみません。
・ツリー全体表示

【6148】Re:レコードNo.を取得する方法
質問  きこ  - 05/9/2(金) 15:04 -

引用なし
パスワード
   小僧 さん:
>こんにちは。
>
>
>関数ではないですが、レコードセットの位置でしたら
>「AbsolutePosition」プロパティで取得する事ができます。
>使用される場合は、1レコード目の値が「0」なので気をつけて下さい。

「AbsolutePosition」プロパティってどこに
あるのですか?
私はフォーム上でレコードNo.が取得できればいいのですが・・・。

次元の低い質問だったらすみません。
・ツリー全体表示

【6147】Re:CSVファイルインポートの際の「0」につ...
お礼  ゆきゆき  - 05/9/2(金) 15:01 -

引用なし
パスワード
   インポートの定義を保存し、解決しました。
ありがとうございました。
・ツリー全体表示

【6146】Re:レコードNo.を取得する方法
回答  小僧  - 05/9/2(金) 14:51 -

引用なし
パスワード
   ▼きこ さん:
こんにちは。

>レコード位置(レコードNo.)を取得する方法で
>適当な関数ってないですか?

関数ではないですが、レコードセットの位置でしたら
「AbsolutePosition」プロパティで取得する事ができます。
使用される場合は、1レコード目の値が「0」なので気をつけて下さい。
・ツリー全体表示

【6145】レコードNo.を取得する方法
質問  きこ  - 05/9/2(金) 14:39 -

引用なし
パスワード
   田舎の事務員です。
周りに相談する人も大きな本屋もないので苦労しています。


レコード位置(レコードNo.)を取得する方法で
適当な関数ってないですか?
・ツリー全体表示

【6144】Re:CSVファイルインポートの際の「0」につ...
回答  クロ  - 05/9/2(金) 14:32 -

引用なし
パスワード
   インポート方法は?
一度手動でインポートしてウィザードで左下の「設定」から
インポート定義を確認の上、当該フィールドをテキスト型に
してみてはどうでしょうか?

コードでインポート定義を使用するのなら、このときに定義
を保存して置いてください。
・ツリー全体表示

【6143】Re:特定のExcelシートのセルに値をセット...
お礼  kiyo  - 05/9/2(金) 14:27 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございます。

基本的な部分でミスしているようですので
もう少しトライしてみます。

ありがとうございました。
・ツリー全体表示

【6142】Re:上書き保存
お礼  水無月  - 05/9/2(金) 14:23 -

引用なし
パスワード
   ありがとうございます。
上手くいきました。

また何かありましたら宜しくお願いします。
・ツリー全体表示

【6141】CSVファイルインポートの際の「0」について
質問  ゆきゆき  - 05/9/2(金) 14:08 -

引用なし
パスワード
   CSVファイルをインポートする際の「00」などといった
表示について質問があります。

CSVファイルの

00
01
02

というような文字列がインポート後、テーブルを見ると

0
1
2

といったように数値で格納されてしまいます。
もちろんテーブルのデータ型はテキスト型にしています。
ご回答のほど、よろしくお願い致します。
・ツリー全体表示

【6140】Re:コマンドボタンクリック時にチェック・...
回答  クロ  - 05/9/2(金) 13:31 -

引用なし
パスワード
   1レコードずつ登録変更するのであれば非連結フォームの方が
いいかと思います。

>フォーム"銀行"
>  テキストボックス"ID"、"氏名"、"登録番号"(すべてテキスト型)  
> テーブル名"銀行テーブル"
>
>コマンドボタン"登録"

このフォームのプロパティ「レコードソース」と各コントロールの
「コントロールソース」を外して(空欄にする)ください。

コマンドボタンのプロパティで「名前」はcmb1として、「課題」は
「登録/変更」とします。

その他テキストボックスの名前はそのままで結構です。
IDテキストボックスの更新後処理のイベントに

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("銀行テーブル", dbOpenDynaset)
rs.Filter = "[ID]='" & Me.ID & "'"
Set rs = rs.OpenRecordset
If rs.RecordCount <> 0 Then
 Me.ID = rs!ID
 Me.氏名 = rs!氏名
 Me.登録番号 = rs!登録番号
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing

cmd1コマンドボタンのクリック時のイベントに

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM 銀行テーブル WHERE [ID]='" & Me.ID & "'", dbOpenDynaset)
With rs
 If .EOF And .BOF Then
  If MsgBox("このレコードを登録してよろしいですか?", vbQuestion + vbYesNo, "確認") = vbYes Then
   .AddNew
   rs!ID = Me.ID
   rs!氏名 = Me.氏名
   rs!登録番号 = Me.登録番号
   MsgBox "新規登録をしました。", vbInformation, "メッセージ"
  Else
   Me.ID.SetFocus
   .Close: Set rs = Nothing
   db.Close: Set db = Nothing
   Exit Sub
  End If
 Else
  If MsgBox("このレコードを変更してよろしいですか?", vbQuestion + vbYesNo, "確認") = vbYes Then
   .Edit
   rs!ID = Me.ID
   rs!氏名 = Me.氏名
   rs!登録番号 = Me.登録番号
   MsgBox "内容の変更をしました。", vbInformation, "メッセージ"
  Else
   Me.ID.SetFocus
   .Close: Set rs = Nothing
   db.Close: Set db = Nothing
   Exit Sub
  End If
 End If
 .Update
 .Close: Set rs = Nothing
End With
db.Close: Set db = Nothing
Me.ID = Null

でどうでしょうか?
※「参照設定」で[Microsoft DAO 3.* Object Library] を参照チェックして
 ください。


>テキストボックス"ID"を手入力すると"氏名"、"登録番号"が"銀行テーブル"から抽出、表示されます。(データがあれば)
>
>IDの重複チェックを行い・・・
>1."ID"入力→"氏名"、"登録番号"が表示→氏名、登録番号を修正して登録ボタンをクリックすると上書き保存されるようにする。
>2."ID"が新規のものであれば"登録ボタン"クリック時は新規に登録される。
>
>この2点を設定したいのですが、どのようなVBAを組んだらいいでしょうか?
>お力ください・・_(_^_)_
・ツリー全体表示

【6139】Re:特定のExcelシートのセルに値をセット...
発言  小僧  - 05/9/2(金) 13:29 -

引用なし
パスワード
   ▼kiyo さん、Gin_II さん:
こんにちは。

>Aテーブルにはセットしたい数字(B)、セットするExcelシート名(C)が
>登録されています。

>        Set appWbook = appExcel.Workbooks.Open("C")
>       
>        ここでシート名、セル名を指定する方法がわかりません

基本的な事になってしまうのですが、Excel のオブジェクトを操作する場合

Application - Book - Sheet - Cell

になりますが、kiyo さんのご提示されたコードからは

Application     Sheet

しか読み取れません。
Book の情報や どのセルに配置したい、という情報はどこに隠されているのでしょうか?

(他にも 存在パス や デスクトップのフォルダ名を取得されている意図も解りませんが…)


>Excel側には起動時に走るマクロが登録されています。
>そのマクロを走らせない方法もあれば一緒に教えていただけないでしょうか

こちらは ExcelVBA の話になりますね。

EnableEvents プロパティで処理する事になります。
・ツリー全体表示

【6138】Re:コマンドボタンクリック時にチェック・...
発言  小僧  - 05/9/2(金) 13:23 -

引用なし
パスワード
   ▼さとこ さん:
こんにちは。

>コマンドボタン"登録"

があるという事は、

テキストボックスにID の値を入力し
表示されたデータに修正を行った後に
気が変わって登録ボタンを押さずにフォームを抜けた場合は
修正は行われなかった事にしたい、という事でしょうか?

そうなると非連結のフォームになると思われるので
結構手間がかかると思いますが…。


連結フォームでしたら

 DCount("*", Me.RecordSource, "ID =" & Me.txtID)

あたりで重複を確認して、

重複あり: Me.Recordset.FindFirst "ID = " & Me.txtID
重複なし: DoCmd.GoToRecord acActiveDataObject, , acNewRec

というような処理を組めば可能だと思います。
・ツリー全体表示

【6137】Re:上書き保存
回答  たん  - 05/9/2(金) 13:06 -

引用なし
パスワード
   >  rs.Open "T_SYOMEI", cn, adOpenKeyset, adLockOptimistic
修正したいレコードを特定して開く。

>  rs.AddNew
AddNewはヘルプ見ると分かる筈ですが、新規の場合です。
では、更新の場合は?ヘルプの中にもありますが、Editメソッドです。
・ツリー全体表示

【6136】上書き保存
質問  水無月  - 05/9/2(金) 12:09 -

引用なし
パスワード
   こんにちは。
1人で色々考えてみたのですが、どうしても分かりません。
どなたかご教授宜しくお願いします。

フォームの非連結のテキストボックスに入力した値を、保存ボタンをクリックすることでテーブルに登録しようとしています。
保存ボタンのクリック時イベントに下記のコードを書きました。

Private Sub HOZON_Click()
  
  Dim cn As ADODB.Connection
  Dim rs As ADODB.Recordset
  
  Set cn = CurrentProject.Connection
  
  Set rs = New ADODB.Recordset
  rs.Open "T_SYOMEI", cn, adOpenKeyset, adLockOptimistic

  rs.AddNew
    rs!SYURUI1 = Me!SYURUI1
    rs!SYURUI2 = Me!SYURUI2
    rs!SYURUI3 = Me!SYURUI3
    rs!SYURUI4 = Me!SYURUI4
    rs!SYURUI5 = Me!SYURUI5
  rs.Update
  
  MsgBox " 保存しました♪ "
  
  rs.Close
  cn.Close
  
End Sub

これで新規レコードを作成して保存する場合は上手くいきました。

この次に、登録済みのレコードの一部を修正して再登録したいのです。
登録済みのレコードをフォーム上に表示させるまでは上手くいったのですが、その状態で保存をクリックすると、エラーが出ます。インデックス、主キーがだぶっているせいだとは思うのですが、そこからどうすればいいか分かりません。

宜しくお願いします。
・ツリー全体表示

【6135】Re:特定のExcelシートのセルに値をセット...
回答  kiyo  - 05/9/2(金) 11:42 -

引用なし
パスワード
    Gin_II さんありがとうございます。

>この方法になると思いますけど。
>どのようなコードを記述して、どううまくいかないのでしょうか?

Aテーブルにはセットしたい数字(B)、セットするExcelシート名(C)が
登録されています。

'データ獲得
strS = ""
strS = strS & vbNewLine & " SELECT B,C"
strS = strS & vbNewLine & " FROM " & Aテーブル
Set rs1 = CurrentDb.OpenRecordset(strS, dbOpenDynaset) 'SQL実行
If rs1.RecordCount < 0 Then
   GoTo Err_
Else
   Do Until rs1.EOF
   i = i + 1
     'ココでオブジェクトの存在チェック
       Set MyWSH = CreateObject("WScript.Shell")
       MyDesktopPath = MyWSH.SpecialFolders("Desktop")
       If Dir(存在パス& rs1("C").Value, vbDirectory) = "" Then
        strNoName = strNoName & rs1("C").Value & vbCr
        GoTo nextset
       End If
        Set appExcel = New Excel.Application
        Set appWbook = appExcel.Workbooks.Open("C")
       
        ここでシート名、セル名を指定する方法がわかりません

       Set MyWSH = Nothing
     rs1.MoveNext
   Loop


Excel側には起動時に走るマクロが登録されています。
そのマクロを走らせない方法もあれば一緒に教えていただけないでしょうか

どうぞよろしくお願いいたします。


・ツリー全体表示

【6134】Re:特定のExcelシートのセルに値をセット...
回答  Gin_II  - 05/9/2(金) 11:17 -

引用なし
パスワード
   >Bテーブルのレコードを取得し、
>ループさせながら、その中でExcelをキックして
>値をセットし、閉じるという作業を
>繰り返す方法を考えたのですがうまくうごきません。

この方法になると思いますけど。
どのようなコードを記述して、どううまくいかないのでしょうか?
・ツリー全体表示

【6133】特定のExcelシートのセルに値をセットした...
質問  kiyo  - 05/9/2(金) 11:01 -

引用なし
パスワード
   お世話になります。
A.mdbの中にあるBテーブルが存在します。
Bテーブルのデータを1レコードずつ異なるExcelシートの
特定のセルにセットしたいのですが、
なかなかいい方法が見つかりません。

Bテーブルのレコードを取得し、
ループさせながら、その中でExcelをキックして
値をセットし、閉じるという作業を
繰り返す方法を考えたのですがうまくうごきません。

なにか良い方法をご存知の方がいれば
教えてください。
よろしくお願いいたします。
・ツリー全体表示

【6132】コマンドボタンクリック時にチェック・登録
質問  さとこ  - 05/9/2(金) 10:42 -

引用なし
パスワード
   フォーム"銀行"
  テキストボックス"ID"、"氏名"、"登録番号"(すべてテキスト型)  
 テーブル名"銀行テーブル"

コマンドボタン"登録"

テキストボックス"ID"を手入力すると"氏名"、"登録番号"が"銀行テーブル"から抽出、表示されます。(データがあれば)

IDの重複チェックを行い・・・
1."ID"入力→"氏名"、"登録番号"が表示→氏名、登録番号を修正して登録ボタンをクリックすると上書き保存されるようにする。
2."ID"が新規のものであれば"登録ボタン"クリック時は新規に登録される。

この2点を設定したいのですが、どのようなVBAを組んだらいいでしょうか?
お力ください・・_(_^_)_
・ツリー全体表示

【6131】Re:追記
発言  たん  - 05/9/2(金) 8:53 -

引用なし
パスワード
   >http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=5878;id=access

追記。
誤解を生むと困るので補足するけど、「知識がないなら質問するな」とは言ってません。

質問をするのなら、「せめて投稿者名は統一してくれよ」、あと、
「質問する前に、分からなくてもいいけど、ヘルプ等を読んで、自分が何が分からないの
かを説明出来るようにしなさい」

ということです。

# 「何も分からない」は子供の質問、「ここが分からない」は大人の質問の仕方だと
# 私は思っています。
・ツリー全体表示

353 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084718
(SS)C-BOARD v3.8 is Free