174410

hatena の Microsoft Access 掲示板



[7387] サブレポートの詳細の高さの変更について Name:kazu Date:2017/12/05(火) 14:00 [ 返信 ]
よろしくお願いします。

サブレポートの高さをVBAで変更できなくて投稿させていただきました。

メインレポートとサブレポートの構成で、日付が変わるときに空白を入れて見やすいようにしたいと考えています。
実際のレポートの画面は添付した画像の上の部分になります。

日付ごとにまとめるところまではできたので、次にサブレートの詳細の高さを変更しようと思い、印刷時のイベントに

Me.Detail.Height = 3

としましたが、エラー2191が表示されてしまいました。エラーの内容は『プリントプレビュー又はプリントした後に高さは変更できません』
という内容でした。
今度は、フォーマット時のイベントに同じように

Me.Detail.Height = 3

としましたが、エラーは起きませんが、サブレポートの高さは変更されずに表示されてしまいます。

添付した画像の下が作りたいと思っているレポートの画面になります。
サブレポートの高さを変更するためには、どのイベントに高さのVBAのコードを作成すればいいか行き詰ってしまいました。
Win7 Office2010を使用しています。
よろしくお願いいたします。


[7388] RE:サブレポートの詳細の高さの変更について Name:hatena Date:2017/12/05(火) 18:06
Me.Detail.Height = 3

はどのフォーマット時イベントに記述したのですか。

また、3 という数値はどこからきたのでしょうか。

コードの一部分だけでなく、

Private Sub ・・・・
から
End Sub
まで、すべて提示してください。

ただ「日付が変わるときに空白をいれたい」のなら、VBAは必要ないですね。

「グループ化と並べ替え」で、「日付」でグループしてグループフッターを表示させればいいだけです。

[7391] RE:サブレポートの詳細の高さの変更について Name:kazu Date:2017/12/06(水) 02:21
アドバイスありがとうございました。

日付でグループ化、グループフッターを表示で空白を入れることができました。

Me.Detail.Height = 3の記述についてですが、まずは詳細の高さをVBAで操作するところからはじめようと思いフォーマット時イベントに

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)

Me.Detail.Height = 3

End Sub

としてまずは高さをVBAで3に変更できないか試行錯誤していました。ですが、ご指摘にありましたように、グループ化で解決することができました。本当にありがとうございました。

[7392] RE:サブレポートの詳細の高さの変更について Name:hatena Date:2017/12/06(水) 10:27
解決できてなによりです。

> 詳細の高さをVBAで操作するところからはじめようと思い

について、将来、使う必要が生じたときのために、少し解説しておきます。

詳細セクションの「印刷時拡張」「印刷時縮小」が「いいえ」に設定されている場合にのみ、VBAから変更できます。「はい」の時に変更しても、その後自動で拡張、縮小されてしまうからです。デフォルトでは印刷時拡張は「はい」に設定されてます。

次に、単位ですが、

Me.Detail.Height = 3

はおそらく3cmの高さにしたいというこことだと推測しますが、
VBAでは、特に指定しない場合は、Twip という単位が使われます。

Twip - Wikipedia

1cm=567Twip と覚えておくといいでしょう。ということで 3cm にしたい場合は、

Me.Detail.Height = 3 * 567

あるいは、Report.ScaleMode プロパティ (Access) で単位を指定してから設定することもできます。

Me.ScaleMode = 7 'cm単位
Me.Detail.Height = 3

[7393] RE:サブレポートの詳細の高さの変更について Name:kazu Date:2017/12/07(木) 09:06
ありがとうございます。

詳細セクションのVBAでの操作について、ご説明いただきありがとうございます。高さの調整の必要が出てきたときに、思い出して活用したいと思います。

この度は、本当にありがとうございました。

[7383] データ型「短いテキスト」の数値にレポートで三桁区切りカンマ Name:ゆん Date:2017/12/03(日) 20:37 [ 返信 ]
お世話になります。

Access2007〜2013ファイル形式のファイルです。

他システムからテーブルにテキストデータ取り込みしました。

テーブルでのデータ型「短いテキスト」に金額である数字が入っています。

レポートでこの数字を表示させるのですが、
数字が4桁以上になった時に3桁くぎりカンマが出るようにしたいです。

書式のところに色々入れてみてもうまくいきませんで悩んでおります。
(4桁だと綺麗にだせても、3桁のときにも不要なカンマがでてきたり。)

ご教授のほどよろしくお願いいたします。

[7384] RE:データ型「短いテキスト」の数値にレポートで三桁区切り Name:hatena Date:2017/12/04(月) 10:01
データは金額なのになぜ「短いテキスト型」なのでしょうか。

通貨型にすべきです。通貨型なら、書式プロパティに
#,##0
と設定するだけで実現できます。

[7389] RE:データ型「短いテキスト」の数値にレポートで三桁区切り Name:ゆん Date:2017/12/05(火) 22:58
ご教示ありがとうございました。

データー取り込みの段階で通貨型にし、教えていただいた書式プロパティの設定にてうまく出来ました!

本当にありがとうございます!!(多謝)


> データは金額なのになぜ「短いテキスト型」なのでしょうか。
>
> 通貨型にすべきです。通貨型なら、書式プロパティに
> #,##0
> と設定するだけで実現できます。

[7390] 【解決】データ型「短いテキスト」の数値にレポートで三桁区切り Name:hatena Date:2017/12/06(水) 01:18
> データー取り込みの段階で通貨型にし、教えていただいた書式プロパティの設定にてうまく出来ました!

データ型は適切なものにしておかないと、いろいろ具合が悪いですね。

金額をテキスト型にしておくと、今回のような書式の問題以外にも、演算や集計もうまくできません。抽出や並べ替えもうまくいきません。

日付は、日付/時刻型にしておくべきです。

[7376] 行の挿入が出来ません Name:あきら Date:2017/11/24(金) 21:29 [ 返信 ]
お世話になります
http://hatenachips.blog34.fc2.com/blog-entry-58.html
で掲示して戴いている行番号の複数行のコピー・削除は
うまくできましたが挿入がうまくできません


Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then Me.明細番号 = Me.CurrentRecord
⇒ Me.内訳名 = Forms![FM見積]![け内訳]
⇒ Me.大内訳名 = Forms![FM見積]![け大内訳]
End Sub

2行を追加で複数行のコピーは出来ましたが

挿入コマンドで上記2行を記入するタイミングが分かりません
親フォームで記載している 大内訳と内訳(両方とも文字です)が
記入されないままレコードの挿入がされるのでテーブルには
新しいレコードが生まれていますが 2個のキーワードが無い為
表示されません

下記に上記2行を記入するとカレントレコードを保存してから
リクエリーを行う必要が有る のメッセージです


Private Sub cmd挿入_Click()
Dim TempNum As Long
If Me.NewRecord Then Exit Sub
With Me.RecordsetClone
.Bookmark = Me.Bookmark
TempNum = .AbsolutePosition + 1
Do Until .EOF
.Edit
!明細番号 = .AbsolutePosition + 2
.Update
.MoveNext
Loop
.AddNew
!見積ID = Me.Parent!見積ID
!明細番号 = TempNum
.Update
Me.Parent.FM見積明細.Requery
End With
End Sub

ご教授お願いいたします

わがままなお願いですが
複数行を貼り付けるときに任意の位置で挿入モードで貼り付けは出来ませんか

1 ばなな
2 りんご
3 いちご

他でコピーした
5 AAA
6 BBB を2を指定して貼り付けると

1 ばなな
2 AAA
3 BBB
4 りんご
5 いちご
複数行の場所の移動時に既存のデータが上書きで消えるのが怖いです
よろしくお願いいたします

[7377] RE:行の挿入が出来ません Name:hatena Date:2017/11/25(土) 01:13
下記の情報を追加してください。

サブフォームコントロールのリンク親フィールド、リンク子フィールドの設定

メインフォーム、サブフォームのレコードソースに含まれるフィールド名、その主キーの設定


> 複数行を貼り付けるときに任意の位置で挿入モードで貼り付けは出来ませんか

クリップボード経由で張り付けるということですよね。

Access(や一般的なデータベース)では、挿入という機能はありません。
最後に追加することしかできません。


> 複数行の場所の移動時に既存のデータが上書きで消えるのが怖いです

このページのコードの解読してもらえばわかると思いますが、
行の移動時にデータの上書きはしていません。
書き換えているのは行番号だけです。
行番号を書き換えたあとで、再クエリして並べ替えているだけですので、
データが上書きされるということは原理的にありえません。

[7378] RE:行の挿入が出来ません Name:あきら Date:2017/11/25(土) 17:15
お世話になります
>
> サブフォームコントロールのリンク親フィールド、リンク子フィールドの設定
@ 見積ID オートナンバー型でリンク
テーブルは
T見積
見積ID オートナンバー 主キー
顧客ID 数値型
工事名 テキスト
T明細
見積明細ID オートナンバー 主キー
見積ID 数値型
明細番号 数値型 重複あり
大内訳名 テキスト サブフォームで非表示
内訳名 テキスト サブフォームで非表示
項目 テキスト
数量 数値
単価 数値

親フォーム名 FM見積
サブフォーム名 FM見積明細
その他のサブフォーム なし

親フォームで 大内訳と内訳で抽出してサブフォームに表示しています
通常入力時には
項目 変更後イベントで

Private Sub 項目_AfterUpdate()
Me.内訳名 = Forms![FM見積]![け内訳]
Me.大内訳名 = Forms![FM見積]![け大内訳]
End Sub
[大内訳(食品)] [内訳(くだもの)]を代入しています

[け内訳]]と[け大内訳] は親フォームの非連結のコンボボックスです

今行っているのは
見積明細ID 明細番号
15--------- 1 ばなな [大内訳(食品)] [内訳(くだもの)]
35--------- 2 りんご [大内訳(食品)] [内訳(くだもの)]
11--------- 3 いちご [大内訳(食品)] [内訳(くだもの)]
上記に

15--------1 ばなな [大内訳(食品)] [内訳(くだもの)]
36--------2 ------ [大内訳(食品)] [内訳(くだもの)]
35--------3 りんご [大内訳(食品)] [内訳(くだもの)]
11--------4 いちご [大内訳(食品)] [内訳(くだもの)]
紹介いただいている挿入モードでこの結果を出したいです
今挿入ボタンを押すと新規レコードに
[大内訳(食品)] [内訳(くだもの)]がないので

15--------1 ばなな [大内訳(食品)] [内訳(くだもの)]
35--------3 りんご [大内訳(食品)] [内訳(くだもの)]
11--------4 いちご [大内訳(食品)] [内訳(くだもの)]
と なってしまいます


> > 複数行を貼り付けるときに任意の位置で挿入モードで貼り付けは出来ませんか
>
> クリップボード経由で張り付けるということですよね。
>
> Access(や一般的なデータベース)では、挿入という機能はありません。
> 最後に追加することしかできません。

すみません 説明不足でした
見積明細ID 明細番号
15-------1 ばなな [大内訳(食品)] [内訳(くだもの)]
35-------2 りんご [大内訳(食品)] [内訳(くだもの)]
11-------3 いちご [大内訳(食品)] [内訳(くだもの)]
上記に

↓ データがクリップボードにある時(複数行)
7-------9 昆布 [大内訳(食品)] [内訳(乾物)]
40-------10 干物 [大内訳(食品)] [内訳(乾物)]

紹介していただいている 挿入コマンドの変形で複数行を一度に
追加できませんか

15-------1 ばなな [大内訳(食品)] [内訳(くだもの)]
51-------2 昆布 [大内訳(食品)] [内訳(くだもの)]
52-------3 干物 [大内訳(食品)] [内訳(くだもの)]
35-------4 りんご [大内訳(食品)] [内訳(くだもの)]
11-------5 いちご [大内訳(食品)] [内訳(くだもの)]

見積明細IDはレコードをコピーして
貼り付けるのだから新しい番号ですね

追加情報がうまく書けませんが、わかっていただけるでしょうか
よろしくお願いいたします

[7379] RE:行の挿入が出来ません Name:hatena Date:2017/11/26(日) 17:22
> @ 見積ID オートナンバー型でリンク
> テーブルは
> T見積
> 見積ID オートナンバー 主キー
> 顧客ID 数値型
> 工事名 テキスト
> T明細
> 見積明細ID オートナンバー 主キー
> 見積ID 数値型
> 明細番号 数値型 重複あり
> 大内訳名 テキスト サブフォームで非表示
> 内訳名 テキスト サブフォームで非表示
> 項目 テキスト
> 数量 数値
> 単価 数値
>
> 親フォーム名 FM見積
> サブフォーム名 FM見積明細
> その他のサブフォーム なし
>
> 親フォームで 大内訳と内訳で抽出してサブフォームに表示しています

サブフォームのリンク親フィールド、リンク子フィールドの設定は、
見積ID になっているのでしょうか。

「大内訳と内訳で抽出して」とは、具体的にどのように抽出しているのでしょうか。

見積ID でリンクしていれば、見積IDで抽出されますが、
さらに大内訳と内訳で抽出するのですか。

リンク親フィールド、リンク子フィールドの設定を下記のようにすれば、
自動で、見積ID、大内訳、内訳 で抽出されて、さらに大内訳、内訳もメインフォームの
値を規定値として自動入力してくれます。

リンク親フィールド 見積ID;け大内訳;け内訳
リンク子フィールド 見積ID;大内訳;内訳

これではだめでしょうか。


だめな場合は、大内訳、内訳 の抽出をどのような方法で行っているかの説明、
また、見積ID以外で、大内訳、内訳 で抽出する理由・目的も説明してください。


> > クリップボード経由で張り付けるということですよね。
> >
> > Access(や一般的なデータベース)では、挿入という機能はありません。
> > 最後に追加することしかできません。
>
> すみません 説明不足でした
> 見積明細ID 明細番号
> 15-------1 ばなな [大内訳(食品)] [内訳(くだもの)]
> 35-------2 りんご [大内訳(食品)] [内訳(くだもの)]
> 11-------3 いちご [大内訳(食品)] [内訳(くだもの)]
> 上記に
>
> ↓ データがクリップボードにある時(複数行)
> 7-------9 昆布 [大内訳(食品)] [内訳(乾物)]
> 40-------10 干物 [大内訳(食品)] [内訳(乾物)]
>
> 紹介していただいている 挿入コマンドの変形で複数行を一度に
> 追加できませんか
>
> 15-------1 ばなな [大内訳(食品)] [内訳(くだもの)]
> 51-------2 昆布 [大内訳(食品)] [内訳(くだもの)]
> 52-------3 干物 [大内訳(食品)] [内訳(くだもの)]
> 35-------4 りんご [大内訳(食品)] [内訳(くだもの)]
> 11-------5 いちご [大内訳(食品)] [内訳(くだもの)]
>
> 見積明細IDはレコードをコピーして
> 貼り付けるのだから新しい番号ですね

クリップボードのデータは、 [内訳(乾物)]なのに、
張り付け後は、 [内訳(くだもの)] に変更するのですか。
ちょっと違和感を感じますが、いいのでしょうか。

できないことはないですが、かなり難度の高いものになりますね。
クリップボードの内容を取得して、データ件数、データ内容を分析する必要があります。

コピー元のデータはどこにあるのでしょうか。
別フォームがあって、そこで選択するのでしょうか。
もし、そうなら、クリップボード経由ではなく、
別フォームの選択データを直接挿入するというコードの方が
楽だし確実だと思います。

[7380] RE:行の挿入が出来ません Name:あきら Date:2017/11/27(月) 00:39
> > @ 見積ID オートナンバー型でリンク
> > テーブルは
> > T見積
> > 見積ID オートナンバー 主キー
> > 顧客ID 数値型
> > 工事名 テキスト

明細の親 子 フォームのリンク用に2個追加しました
大内訳名 数値型 親フォームで表示
内訳名 数値型 親フォームで表示
数値の記入は 親フォームにある2個のコンボボックスより代入
サブフォームを大内訳・内訳を切り替えるたびに更新します

> > T明細
> > 見積明細ID オートナンバー 主キー
> > 見積ID 数値型
> > 明細番号 数値型 重複あり
> > 大内訳名 テキスト サブフォームで非表示
> > 内訳名 テキスト サブフォームで非表示

下記は数値型に変更しました(テスト中のため表示にしています
大内訳名 数値型 サブフォームで表示
内訳名 数値型 サブフォームで表示

> 「大内訳と内訳で抽出して」とは、具体的にどのように抽出しているのでしょうか。

見積明細は一つのテーブルなので 下記のコンボボックスで
見積IDと大内訳IDと内訳IDが合致した明細を表示しています


下記は前回書き忘れたテーブルで2個あります

T大内訳 親フォームのコンボボックスで利用
大内訳ID 数値型 ←物件ごとに変更が少しあります
大内訳名 テキスト
見積ID 数値型

T内訳 親フォームのコンボボックスで利用
内訳ID 数値型 ←物件ごとに変更が大きくあります
内訳名 テキスト
見積ID 数値型


> サブフォームのリンク親フィールド、リンク子フィールドの設定は、
> 見積ID になっているのでしょうか。
リンク親フィールド 見積ID
リンク子フィールド 見積ID としていましたが

ご指導いただきました下記により
> リンク親フィールド 見積ID;け大内訳;け内訳
> リンク子フィールド 見積ID;大内訳;内訳
>
> これではだめでしょうか。

リンク親フィールド 見積ID;け大内訳ID;け内訳ID
> リンク子フィールド 見積ID;大内訳ID;内訳ID

に 変更したら

サブフォームの新規レコードのテキストボックスに
所定の値は入っています

見積明細ID--明細番号--大内訳--内訳---明細---数量
オート------Null-------2------15-----Null---Null

なので 当初設定していた

サブフォームの更新前処理を
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then Me.明細番号 = Me.CurrentRecord
Me.内訳名 = Forms![FM見積]![け内訳]
Me.大内訳名 = Forms![FM見積]![け大内訳]
End Sub

上記をご指導いただいているように


Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then Me.明細番号 = Me.CurrentRecord

End Sub

に書き直しました

ご指導の挿入ボタンを押すと 前回と変わりません
(前回は 大内訳と内訳はテキストでしたが今は数字で入っています)

見積明細ID 明細番号
15--------- 1 ばなな [大内訳(食品)] [内訳(くだもの)]
35--------- 2 りんご [大内訳(食品)] [内訳(くだもの)]
11--------- 3 いちご [大内訳(食品)] [内訳(くだもの)]
上記に

15--------1 ばなな [大内訳(食品)] [内訳(くだもの)]
36--------2 ------ [大内訳(食品)] [内訳(くだもの)]
35--------3 りんご [大内訳(食品)] [内訳(くだもの)]
11--------4 いちご [大内訳(食品)] [内訳(くだもの)]
紹介いただいている挿入モードでこの結果を出したいです
今挿入ボタンを押すと新規レコードに
[大内訳(食品)] [内訳(くだもの)]がないので

15--------1 ばなな [大内訳(食品)] [内訳(くだもの)]
35--------3 りんご [大内訳(食品)] [内訳(くだもの)]
11--------4 いちご [大内訳(食品)] [内訳(くだもの)]
と なってしまいます

尚 T明細テーブルを見ると
36--------2 ------ [大内訳( 0 )] [内訳( 0 )]
のレコードが生まれています


> 見積ID でリンクしていれば、見積IDで抽出されますが、
> さらに大内訳と内訳で抽出するのですか。
>
> リンク親フィールド、リンク子フィールドの設定を下記のようにすれば、
> 自動で、見積ID、大内訳、内訳 で抽出されて、さらに大内訳、内訳もメインフォームの
> 値を規定値として自動入力してくれます。
>
自動入力されていますが挿入ができません


>
> だめな場合は、大内訳、内訳 の抽出をどのような方法で行っているかの説明、
> また、見積ID以外で、大内訳、内訳 で抽出する理由・目的も説明してください。

上記の理由と目的ですが、建築の見積を行っています
物件により大小さまざまで、今は数万円〜数億円の見積をおこなっています

又、同じ程度の物件でも提出先により大内訳・内訳が変わります
よって、以前提出している同程度の物件をコピーして明細の一部を
削除・追加・挿入を繰り返し行います

又、前回は電気設備の仮設工事で計上していた明細を
今回は 建築工事の共通仮設工事で計上

慣れない人が内訳を間違えて入力したものを
正規の内訳に移動等を頻繁に行います

なので
> クリップボードのデータは、 [内訳(乾物)]なのに、
> 張り付け後は、 [内訳(くだもの)] に変更するのですか。
> ちょっと違和感を感じますが、いいのでしょうか。

これが 必要なのです

見積ではコンクリート打設 10 m3 20000--200,000の明細を
実行予算でたとえば
型枠代--生コン代--打設手間--養生費等に分割
この時に行挿入が必要です

今までは 番号を10・20・30で最初は振っておき
新規レコードで11・22・23と番号を手入力しリクエリーで整列
この方法だと1つの内訳で50〜100行あると間の番号がわからないし
目で参照したいデータが見えない
編集時にあらかじめ11・12・13・14と番号だけを振って
空白行を作ってリクエリで記入済み明細を参照しながら分解等を
行っていました

>
>
> > > クリップボード経由で張り付けるということですよね。
> > >

>
> クリップボードのデータは、 [内訳(乾物)]なのに、
> 張り付け後は、 [内訳(くだもの)] に変更するのですか。
> ちょっと違和感を感じますが、いいのでしょうか。
>
> できないことはないですが、かなり難度の高いものになりますね。
> クリップボードの内容を取得して、データ件数、データ内容を分析する必要があります。
>

> コピー元のデータはどこにあるのでしょうか。

ほとんどは作業を行う同じテーブルに有ります

> 別フォームがあって、そこで選択するのでしょうか。
> もし、そうなら、クリップボード経由ではなく、
> 別フォームの選択データを直接挿入するというコードの方が
> 楽だし確実だと思います。
同じテーブルの別物件の一部を仮テーブルに移しコピー元用フォームに
表示させレコード番号等で範囲を指定後コピー先に追加ですね
この場合もコピー先の明細番号を指定し割り込ませることが
必須です
入力する人間はフォーム以外触れません

[7381] 解決しました 行の挿入が出来ません Name:あきら Date:2017/11/28(火) 01:11
解決しました
強引かも解りませんが
Cmd挿入 ボタンの クリックイベントに
2行追加したら解決しました

Private Sub cmd挿入_Click()

Dim TempNum As Long

If Me.NewRecord Then Exit Sub
With Me.RecordsetClone
.Bookmark = Me.Bookmark
TempNum = .AbsolutePosition + 1
Do Until .EOF
.Edit
!明細番号 = .AbsolutePosition + 2
.Update
.MoveNext
Loop
.AddNew
!見積ID = Me.Parent!見積ID
!明細番号 = TempNum
!内訳ID = Forms![FM見積]![内訳ID] ←追加しました
!大内訳ID = Forms![FM見積]![大内訳ID] ←追加しました
.Update
Me.Parent.FM見積明細.Requery
End With
End Sub

で 挿入できました
ありがとうございました

引き続き
下記をトライします 又、ご指導頂きます様お願いいたします

見積明細ID 明細番号
15-------1 ばなな [大内訳(食品)] [内訳(くだもの)]
35-------2 りんご [大内訳(食品)] [内訳(くだもの)]
11-------3 いちご [大内訳(食品)] [内訳(くだもの)]
上記に

↓ データがクリップボードにある時(複数行)
7-------9 昆布 [大内訳(食品)] [内訳(乾物)]
40-------10 干物 [大内訳(食品)] [内訳(乾物)]

紹介していただいている 挿入コマンドの変形で複数行を一度に
追加できませんか

15-------1 ばなな [大内訳(食品)] [内訳(くだもの)]
51-------2 昆布 [大内訳(食品)] [内訳(くだもの)]
52-------3 干物 [大内訳(食品)] [内訳(くだもの)]
35-------4 りんご [大内訳(食品)] [内訳(くだもの)]
11-------5 いちご [大内訳(食品)] [内訳(くだもの)]

見積明細IDはレコードをコピーして
貼り付けるのだから新しい番号ですね

[7382] RE:行の挿入が出来ません Name:hatena Date:2017/11/28(火) 13:20
クリップボードからカレントレコードにデータを挿入するコードを書いてみました。
書いてみたら、思ったよりシンプルにできました。

帳票サブフォームで行番号フィールドの連番を維持する - hatena chips
のサンプルに追加しました。

サブフォーム上にコマンドボタン「cbCBPaste」を配置して、クリック時のコードを下記のように設定します。

Private Sub cbCBPaste_Click()
  Dim Pos As Long, RCnt As Long, CBCnt As Long, i As Long

  Pos = Me.CurrentRecord      '※1
  RCnt = Me.Recordset.RecordCount  '※1
  DoCmd.SetWarnings False
  DoCmd.RunCommand acCmdPasteAppend '※2
  DoCmd.SetWarnings True
  CBCnt = Me.Recordset.RecordCount - RCnt '※3
  If CBCnt = 0 Then Exit Sub

  With Me.RecordsetClone
    .AbsolutePosition = Pos - 1
    For i = Pos + CBCnt To RCnt + CBCnt '※4
      .Edit
      !行番号 = i
      .Update
      .MoveNext
    Next
    For i = Pos To Pos + CBCnt - 1 '※5
      .Edit
      !行番号 = i
      .Update
      .MoveNext
    Next
  End With
  Me.Parent.受注明細.Requery '※6
  Me.Recordset.AbsolutePosition = Pos - 1 '※7
End Sub

以上でクリップボードに複数レコードがあっても、現在行の位置に挿入されます。

考え方
※1 現在行(CurrentRecord)とレコード件数(RecordCount)を変数に保存しておく
※2 追加貼り付け(acCmdPasteAppend)を実行
※3 追加後のレコード件数から前のレコード件数を引いて追加件数を取得
※4 保存した現在行から、行番号に追加件数を加算
※5 追加分のデータの行番号は保存した現在行からの連番を代入する
※6 サブフォームを再クエリして行番号で並び替える
※7 変数に保存した現在行の位置に移動する

ちなみに、

!内訳ID = Forms![FM見積]![内訳ID] ←追加しました
!大内訳ID = Forms![FM見積]![大内訳ID] ←追加しました

を挿入するなら※5のループ内になります。
ただ、リンク親フィールド、リンク子フィールドが設定されていれば、
Accessが自動で更新してくれるので、このコードは不要のはずなんですが。

[7385] RE:行の挿入が出来ません Name:あきら Date:2017/12/04(月) 21:41
ありがとうございます コピーはうまくいきました
また新しい問題が出ました
少し多いデータを張り付けるとクリップボードが満タンです

動けなくなっています

もう一つ .Requery がうまく動いていないのか一度閉じるまで
きれいに 並び替えが出来ていません

> クリップボードからカレントレコードにデータを挿入するコードを書いてみました。
> 書いてみたら、思ったよりシンプルにできました。
>

>     Next
>     For i = Pos To Pos + CBCnt - 1 '※5
>       .Edit
>       !行番号 = i
>       .Update
>       .MoveNext
>     Next
>   End With
>   Me.Parent.受注明細.Requery '※6
>   Me.Recordset.AbsolutePosition = Pos - 1 '※7
Me.Parent.受注明細.Requery ←きれいに並び替えが

出来なかったので追加しましたが、2〜3レコードではうまくいきますが
それ以上だとフォームを閉じないと並び替えが出来ません???
クエリーは通っているはずなのに??

ここでクリップボードを呼び出しクリップボードを空に
又は、小さなデータを入れてアクセスくんが動けるようにしたいのですが
まったく、分かりません Clipboard=””なんてコマンドありませんか

> End Sub


いつも わがままな質問で恐縮ですがご教授お願いいたします

[7386] RE:行の挿入が出来ません Name:hatena Date:2017/12/05(火) 10:48
> 少し多いデータを張り付けるとクリップボードが満タンです
>
> 動けなくなっています

レコード件数は何件ぐらいですか。
同じ件数で、手作業で、選択、コピー、貼り付けした場合は、どうなりますか。
手作業でもだめな場合は、選択する件数を減らして、複数回にわけてやるしかないと思います。

> もう一つ .Requery がうまく動いていないのか一度閉じるまで
> きれいに 並び替えが出来ていません

> 出来なかったので追加しましたが、2〜3レコードではうまくいきますが
> それ以上だとフォームを閉じないと並び替えが出来ません???
> クエリーは通っているはずなのに??

こちらのサンプルでは再現できないの、症状が出る条件の説明をしてもらえますか。

> ここでクリップボードを呼び出しクリップボードを空に
> 又は、小さなデータを入れてアクセスくんが動けるようにしたいのですが
> まったく、分かりません Clipboard=””なんてコマンドありませんか

下記をご参考に。

クリップボードとデータのやりとりをする:Excel VBA|即効テクニック|Excel VBAを学ぶならmoug

ちなみに、上記の 「Microsoft Forms 2.0 Object Library」への参照設定ですが、フォームのデザインビューでActive X コントロールの挿入で、「Microsoft Forms 2.0 CheckBox」を配置してから、削除すれば自動で参照設定されます。

[7372] モジュールからのフォームコントロール名(配列)取得について Name:GOYA Date:2017/11/23(木) 10:47 [ 返信 ]
Win7,Access2010を使用しています。

フォーム内で配列を使用し、コントロールの名前は、
ME!["コントロール名" & i]
で取得できますが、これをモジュールで使用したいと考えております。

FORMS![フォーム名]!["コントロール名" & i]等実行してみたのですが、
エラーでコントロール名が取得できません。

何か方法はありますでしょうか。

[7373] 解決:モジュールからのフォームコントロール名(配列)取得 Name:GOYA Date:2017/11/23(木) 11:33
FORMS![フォーム名]("コントロール名" & i)

で解決できました。あらゆる方法を試したつもりでしたが、
抜けておりました。

ありがとうございます。

[7374] RE:モジュールからのフォームコントロール名(配列)取得について Name:hatena Date:2017/11/23(木) 12:08
解決済みということですが、間違いの指摘と、補足説明を。(後から見た人のためにも)

> フォーム内で配列を使用し、コントロールの名前は、
> ME!["コントロール名" & i]
> で取得できますが、

これは、エラーになるのでは。

Me.Controls("コントロール名" & i)

または、.Controls は省略できるので、

Me("コントロール名" & i)

が正しいと思います。


> これをモジュールで使用したいと考えております。

> FORMS![フォーム名]("コントロール名" & i)
>
> で解決できました。

標準モジュールで使いたいということですよね。

Forms![フォーム名] としてしまうとフォームは固定になります。
参照するフォームが固定ならこれでいいのですが、

Me("コントロール名" & i)

Meは自分自身のフォームという意味ですので、
そういう意味で、標準モジュールに記述するのなら、
コードを呼び出しているフォームという意味のCodeContextObject
を使って下記のようになります。

CodeContextObject("コントロール名" & i)


状況に応じて使い分けてください。

[7375] RE:モジュールからのフォームコントロール名(配列)取得について Name:GOYA Date:2017/11/23(木) 12:52
> Me("コントロール名" & i)
>
> が正しいと思います。

失礼しました。上記の通りですね。指摘ありがとうございます。


> Meは自分自身のフォームという意味ですので、
> そういう意味で、標準モジュールに記述するのなら、
> コードを呼び出しているフォームという意味のCodeContextObject
> を使って下記のようになります。
>
> CodeContextObject("コントロール名" & i)

長年ACCESSでの開発を細々と行ってまいりましたが、
いつもFORMS![フォーム名]![コントロール名]で指定しており、
上記の記述は初めて知りました。

また使用してみたいと思います。

ありがとうございました。

[7368] レポートの件数取得(GR毎?) Name:SHIGE Date:2017/11/20(月) 14:43 [ 返信 ]
レポートのGR件数取得について相談します。


ID,Dammy1,Dammmy2....

1,A,001...
2,C,004...
3,A,004...
4,A,001...
5,D,001...

とあった場合に、Dammy1の重複しない件数を取得したいと思っています。
※日本語的に間違えてる気もしますが...

上記の場合は AとCとDで 3件とカウントしたい。

・IDは連番になっており、その通りに並べたい
・Dammy1は文字列型(以降は略)

レポートのFormat時の処理がいいのか、どう取得するのがいいのか現状は何もピンとこないのでヒントでも答えでも頂けると助かります。

[7369] RE:レポートの件数取得(GR毎?)自己解決 Name:SHIGE Date:2017/11/20(月) 16:55
集計クエリを作りdcountで対応しました。

板汚し m(_ _)m

[7370] RE:レポートの件数取得(GR毎?) Name:hatena Date:2017/11/20(月) 18:12
自己解決したようですが、一応き下記で紹介している方法だと集計クエリなしで実現できます。ご参考までに。

フォーム/レポートで重複を排除してカウントする関数 - hatena chips

[7371] RE:レポートの件数取得(GR毎?) Name:SHIGE Date:2017/11/21(火) 11:29
集計クエリが増えたのが何となく嫌でしたので、UniqueCountの考え方を使わせて頂きました m(_ _)m

[7365] クエリ出力時、自動的にフィールドのNullを数値に変換したい Name:鉄血 Date:2017/11/19(日) 21:02 [ 返信 ]
ご無沙汰しています。また詰まりましたのでアドバイスをいただければと思います。


画像のようなテーブル「T_品名」と「T_部署」があり、
2つをもとに選択クエリ「Q_開始」を作りました。
(フィールド「番号」で結合プロパティを作成)
選択クエリ「Q_開始」をデータ元にしてフォーム「F_一覧」があります。


これから部署は増やす予定なので、品名リストから各部署で
必要な品物を任意の場所に保管します。


フォーム「F_一覧」にこれからボタンを複数作り、
それぞれVBAで「品名」「保管場所」を基準に並べ替えができるようにします。


ここで問題が発生しました。注文しない品物は保管場所が「Null」です。
「保管場所」を軸に昇順で並べ替えると、Nullが先に出てしまいます。
そこで「保管場所並替」フィールドを作り、そちらに「保管場所」の数値をそのまま代入、
Nullならば 100(とりあえずの数値です) を代入し、並び替えの基準にしようと考えました。


ただ、そのためにはフォーム「F_一覧」を開いた時点で全ての品物の「保管場所並替」に
数値が振られている必要があります。
★これが「やりたいこと」です。


【やってみた失敗】

@
クエリに式のフィールド「暫定並替」を追加しましたが、計算結果を使っての
並び替えは不可でした。
 ※ちなみに、暫定並替:IIF(場所並替_部署1 IS NULL,100,場所並替_部署1)

A
フィールド「暫定並替」の計算結果を「保管場所」に代入する方法も考えましたが、
クエリを開いた時点での代入ができませんでした。1つ1つ更新する必要がありますので。




以上、ご指導よろしくお願いします。


[7366] RE:クエリ出力時、自動的にフィールドのNullを数値に変換したい Name:kent Date:2017/11/20(月) 10:12
お疲れ様です。
テーブルに追加していませんか?
たとえば、クエリのデザインから、普通に表示したいフィールドを指定しておいて
最後の列に

式1: IIf(IsNull([保管場所]),100)

ではだめですか?

[7367] 解決:RE:クエリ出力時、自動的にフィールドの…… Name:鉄血 Date:2017/11/20(月) 12:07
kentさん、お返事ありがとうございます。
そしてkentさんのアドバイスをもとに解決しました!!

式1: IIf(IsNull([保管場所]),100,[保管場所])

とすることで理想の形をとれました!!


恥ずかしながら独り相撲で難しく考えすぎていました。
でも一人だといつまでも無駄な時間と労力を費やし続けるところでした。

今後も精進します!!ありがとうございました!!

[7362] フォームからの抽出条件で型が一致しません。 Name:あや Date:2017/11/08(水) 15:38 [ 返信 ]
お世話になります。
フォーム「F03_00_レポート作成」にある給与年と社員名のテキストボックスにより、コードにかかれた抽出条件を満たすクエリ「Q20_労働時間」を実行しています。
Q20_労働時間に年月という項目があるのですが、そこには"2017/11"という形なので、フォームの給与年に入力される年4桁からはじまるという条件にしたのですが型が一致しませんという結果になってしまいます。
この場合どこを修正するべきでしょうか?
よろしくお願いいたします



W_key1 = "年月 like [forms]![F03_00_レポート作成]![給与年] & " * "' and 社員名 = '" & W_name & "'"

Cnt_staff = DCount("*", "Q20_労働時間", W_key1)

[7363] RE:フォームからの抽出条件で型が一致しません。 Name:hatena Date:2017/11/09(木) 02:10
W_key1 = "年月 like [forms]![F03_00_レポート作成]![給与年] & " * "' and 社員名 = '" & W_name & "'"

これを下記に修正してください。

W_key1 = "年月 like [forms]![F03_00_レポート作成]![給与年] & '*' and 社員名 = '" & W_name & "'"


VBAコードとSQLコードの違い、VBAコード内でのSQLコードの記述法についての理解が不足しているようです。下記のリンク先を読むことをお勧めします。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips

[7364] RE:フォームからの抽出条件で型が一致しません。 Name:あや Date:2017/11/10(金) 15:02
ありがとうございます!!
やってみます。そして勉強いたします。
助かりました!

[7357] 指定文字から指定文字までの置き換え Name:laa HOME Date:2017/11/02(木) 16:10 [ 返信 ]
win10
access2010

いつもお世話になっています。
いろいろ調べましたが、解決できない事ができてたので、
どなたか教えて頂けませんでしょうか。

やりたい事、
フィールド内のテキストで、
指定文字から指定文字の間を置き換えたい。

例、

あいうえおかきくけこ<あ>ううううええええおおお</あ>かかかききき
くくくくく<あ>けけけここここささ</あ>たたたちちち

上記の場合


あいうえおかきくけこ●●●●●かかかききき
くくくくく●●●●●たたたちちち


いろいろ調べて、

Public Function MyReplace(s, r1 As String, r2 As String, t As String)
Dim a, i As Long, p As Long

  a = Split(s, r1)
  For i = 1 To UBound(a)
    p = InStr(1, a(i), r2, vbBinaryCompare)
    a(i) = Mid(a(i), p + Len(r2))
  Next
  MyReplace = Join(a, t)
End Function


こちらを標準モジュールにいれて

クエリで

置換: MyReplace([フィールド],"<あ>","</あ>","●●●●●")

これで出来ることがわかったのですが、


下記の場合どうしてもうまくいきません


例、

フィールドのテキスト

あいうえお<style type="text/css">
</style>かきくけこ


こちらを上記のモジュールを設定し

クエリで

置換: MyReplace([フィールド],"<style","/style>","●●●●●")


このようにした場合、結果が

あいうえお●●●●●ext/css">
</style>かきくけこ


このようになってしまいました。


どなたか解決策がわかるかたがいましたらご教授お願いできませんでしょうか?
よろしくお願いします。


※私は、かなりの初心者です。 モジュールのコードはほぼ意味が分かりません。

※上記の< はこちらの投稿で禁止なので、全て大文字にしています。

[7358] RE:指定文字から指定文字までの置き換え Name:hatena Date:2017/11/02(木) 17:48
当方でサンプルを作成して、

> あいうえお<style type="text/css">
> </style>かきくけこ

>
> こちらを上記のモジュールを設定し
>
> クエリで
>
> 置換: MyReplace([フィールド],"<style","/style>","●●●●●")

このクエリを試してみましたが、ちゃんと、

あいうえお●●●●●かきくけこ

と正しい結果になりました。

うまくいかない実際のデータを提示してもらえますか。

[7359] RE:指定文字から指定文字までの置き換え Name:laa Date:2017/11/02(木) 18:19
hatena 様
いつも本当にありがとうございます。

例をエラーのフィールドです。

------------------------------------
</table>

<style type=""text/css"">
#rakutenLimitedId_aroundCart font
{
font-size:13px;color:#333;
}
</style>
------------------------------------



------------------------------------
</table>

●●●●●ext/css">
#rakutenLimitedId_aroundCart font
{
font-size:13px;color:#333;
}
</style>
------------------------------------
になります。



その他、実際のアクセスを添付しました。
ご確認いただけますか?

よろしくお願いします。

[7360] RE:指定文字から指定文字までの置き換え Name:hatena Date:2017/11/02(木) 21:43
サンプルファイルを見て、原因が分かりました。

クエリのデザインビューで、フィールドの式をコピーしてエディターに貼り付けて見てください。
/style> の後に改行が2つあります。(下記参照)


式1: MyReplace999([caption],"<style","/style>

","●●●●●")

エディター上でこの改行を削除して、コピーして、クエリの元のフィールド欄に上書きで貼り付けてください。(下記の1行をコピーして貼り付けてもOK)

式1: MyReplace999([caption],"<style","/style>","●●●●●")

これで正常に表示されます。

クエリのフィールド欄では、改行が表示されないので、改行があっても分からないので注意が必要です。

[7361] RE:指定文字から指定文字までの置き換え Name:laa Date:2017/11/04(土) 10:06
hatena様
お返事が遅れもうしわけございません。

改行のせいだったのですね、
結構前まえから同じ現象で悩まされていたのですが
これで解決できました。

hatena様には、いつも本当に丁寧に相談に乗っていたかけて
大変感謝しています。

ありがとうございました。

[7349] この場合、伝票テーブルの必要性はありますか? Name:しょしんしゃ Date:2017/10/24(火) 02:01 [ 返信 ]
1レコードにつき1売上しかない場合、
つまり、1回の受注で複数の注文があったときのも
それぞれ別個の受注として扱う、といったようなときは
伝票テーブルと詳細テーブルに分ける必要はないと思うのですが
それでも分けたほうがよいのでしょうか?

分けても、伝票テーブルの1レコードに対して紐づく詳細テーブルのレコードは常に1つなので、わけるほうが助長的だと思いますが
アドバイスお願いします

[7350] RE:この場合、伝票テーブルの必要性はありますか? Name:shige Date:2017/10/24(火) 10:17
賛否ありそうですが、個人的な意見では分けますね
将来的に必要になる可能性にもよるんでしょうが。。。

通常は詳細部分がデーターシートや帳票になるのを単票にしといて後で何とかなる設計にすると思います(個人的な意見です)

[7351] RE:この場合、伝票テーブルの必要性はありますか? Name:hatena Date:2017/10/24(火) 13:34
そちらの業務実態がまったく分からないので、あくまで、自分の経験からの推測ですが、

> つまり、1回の受注で複数の注文があったときのも
> それぞれ別個の受注として扱う、いったようなときは
> 伝票テーブルと詳細テーブルに分ける必要はないと思うのですが

どのような伝票が分かりませんが(受注伝票、請求伝票・・?)
その伝票が、それぞれ別個の受注として扱う仕様なら、伝票テーブルとして分ける必用はないと思います。
ただ、「1回の受注で複数の注文があったとき」に入力する場合、
受注テーブルと受注明細テーブルに分けてないと、同じデータ(受注日付、顧客情報など)を何度も入力することになるので面倒ではありませんか。
「1回の受注で複数の注文」がありうるなら、受注テーブルと受注明細テーブルは分けた方がいいと思います。
そして、伝票は、受注明細テーブルをソースにして作成すればいいのでしょう。

[7352] RE:この場合、伝票テーブルの必要性はありますか? Name:しょしんしゃ Date:2017/10/24(火) 18:51
何をもって一つの伝票にするか、というところもむずかしいですよねえ
基本的にデータはExcelファイルで送られてくるのをインポートしていく感じなので
入力の手間はありません

例えば取引先、日単位で1つの伝票として扱うとしても
その伝票テーブルを使う機会はあるのかなあ?と思います
請求するときは、全明細を列挙するタイプなので
余計にそう感じてしまいます

[7353] RE:この場合、伝票テーブルの必要性はありますか? Name:hatena Date:2017/10/24(火) 19:17
入力がExcelファイルからのインポートなら、
伝票テーブルはなくてもいいですね。

レポートで必用に応じてグループ化すればいいだけですので。

[7356] RE:この場合、伝票テーブルの必要性はありますか? Name:やま Date:2017/10/27(金) 05:59
厳密にいえば、
伝票テーブルがないぶん、各明細にそれぞれ日付と取引先などの基本情報が
入力されるので、動作は遅くなるのでしょうか?
人間が認識できない差ですかね?

もしかしたら
テーブル数自体やアクセスするテーブルの数が減るので
逆に速くなるんでしょうか

[7354] 1つのレコードに対して複数の支払い先がある場合 Name:やま Date:2017/10/24(火) 22:26 [ 返信 ]
業務を請け負ったら、売上Tにレコードを追加します
このとき、複数の下請け業者に再委託することがあるのですが
どのような構造にしたらよいでしょうか?

伝票Tと明細Tがあり、明細Tに下請けフィールドを作成し、そこに入力すればよいのですが、1つの明細に対して、複数の業者に委託することもあるので
どうしていいかわかりません

[7355] RE:1つのレコードに対して複数の支払い先がある場合 Name:hatena Date:2017/10/25(水) 02:16
下請けT を作成して、明細T と 一対多の関係になるように設計すればどうでしょうか。

具体的な設計は、伝票Tと明細Tのフィールド構成が不明ですので、回答は控えます。

とりあえず、下請けT を作成にトライしてみてください。

[7341] コンボボックスでの日付検索 Name:rise Date:2017/10/17(火) 11:53 [ 返信 ]
いつもお世話になっております

月間日報履歴というフォームがあります。請求日で1ヶ月間表示しているのですが私はクエリで毎月変更するので
 フィールド名 請求日  >=#2017/08/28# And <#2017/09/30#
いいのですが、Runtimeで配布している社員にはできません。

なので、月間日報履歴に年と月のコンボボックスで表示できるようにしたいです。日付の期間検索はできるのですが年と月に分かれてしまうとつまづいてしまいます。

フィールド名 日報NO オートナンバー
       請求日 日付/数値型
       会社名 テキスト型
       

よろしくお願いします。

[7345] RE:コンボボックスでの日付検索 Name:hatena Date:2017/10/17(火) 21:54
フォーム名は、月間日報履歴

コンボボックス名を、

cb年
cb月

とします。

請求日の抽出条件欄に下記のように設定します。

>=DateSerial([Forms]![月間日報履歴]![cb年],[Forms]![月間日報履歴]![cb月],1) AND <DateSerial([Forms]![月間日報履歴]![cb年],[Forms]![月間日報履歴]![cb月]+1,1)

コンボボックスの更新後処理で再クエリを実行するようにします。

これで、指定した月が抽出されます。

[7346] RE:コンボボックスでの日付検索 Name:rise Date:2017/10/19(木) 16:02
早速の返信ありがとうございます。

試してみた所クエリからは問題なくできるのですが、フォームからだとエラー3071 式が正しく入力されていないか複雑すぎるため評価できません・・・・となりました。

コンボボックスの設定が悪いのでしょうか??

よろしくお願いします。

[7348] RE:コンボボックスでの日付検索 Name:hatena Date:2017/10/19(木) 17:52
コンボボックスの既定値を設定しておいたらどうでしょうか。

cb年 の既定値は、

=Year(Date())

cb年 の既定値は、

=Month(Date())

[7337] ご教授お願いします。 Name:ダメ五郎 Date:2017/10/13(金) 17:57 [ 返信 ]
こんにちは、お世話になります。

ある配列変数を扱っていて、おかしな現象が起きたので
以下のような、テストコードを作ってイミディエイトウィンドウで
実行してみたら、同じ現象がおきたのですが、試していただけますでしょうか。

Function gts()
Dim goio() As Long
Dim z As Byte
ReDim goio(1 To 12)
z = 4
For n = 1 To 12
goio(n) = z * 1000000
Debug.Print goio(z)

Next n
End Function

要素数12個の配列変数ですが、このコードは問題なく4000000という数値
が並びます。
次に1000000の箇所を10000に替えて再度実行してみるとエラーが出ます。

私のパソコンだけなのでしょうか?
それともコーディングがどこかおかしいのでしょうか?
初心者ではありませんが、専門家でもありません。

お手数おかけしますが、よろしくお願い致します。
バージョンはAccess2010です。

[7338] RE:ご教授お願いします。 Name:ダメ五郎 Date:2017/10/13(金) 18:00
失礼しました。

コード8行目訂正です。

goio(z) ☓



goio(n) ○


よろしくお願いします。

[7339] RE:ご教授お願いします。 Name:ダメ五郎 Date:2017/10/13(金) 18:26
何度もすみません。
半分自己解決です。

変数zもlongにすれば、できました。

配列変数に合わせる必要があったということでしょうか。
しかし1000000だと通るというのも理解できません。

zに入る数値は大きくても20程度なのでバイト型で十分なんですが、
ひとまず動くようにはなりました。

お騒がせしました。

[7344] RE:ご教授お願いします。 Name:hatena Date:2017/10/17(火) 21:46
最初の質問のコードで n の宣言がないのでそれを追加した下記のコードで解説します。

Function gts()
  Dim goio() As Long
  Dim z As Byte
  Dim n As Long
  
  ReDim goio(1 To 12)
  z = 4
  For n = 1 To 12
    goio(n) = z * 10000
    Debug.Print goio(z)

  Next n
End Function

これは、オーバーフローエラーが発生します。


VBAでは、演算結果の型は、式に含まれる一番大きい型になります。
例えば、

Byte型 * Byte型 の結果は Byte型

Byte型 * Integer型 の結果は Integer型

Byte型 * Long型 の結果は Long型

というようになります。

また、式中で数値を記述するときは、その数値が含まれる範囲内の最小の型になります。

1000000 と記述するとこれはLong型になりますが、
10000 と記述するとInteger型(-32,768〜32,767)になります。

4 * 1000000 は 4000000 となり、Long型の範囲内なのでエラーにはなりません。
4 * 10000 は 40000 となり、Integer型の範囲(-32,768〜32,767)を超えますので、オーバーフローエラーになります。

イミディエイトウィンドウで下記のように記述してEnterキーを押してみてください。

?4 * 10000

「オーバーフローしました」となります。
下記のようにすればエラーにならずに、正しい結果が表示されます。

?4 * Clong(10000)

または、

?CLong(4) * 10000

片方をLong型にすれば結果もLong型になるので範囲をオーバーしません。

> 変数zもlongにすれば、できました。

という理由はこれで理解できますね。

変数z をByte型のままにしたいなら、

goio(n) = z * CLong(10000)

とすればエラーになりません。

[7347] RE:ご教授お願いします。 Name:ダメ五郎 Date:2017/10/19(木) 16:37
ご回答ありがとうございます。

>VBAでは、演算結果の型は、式に含まれる一倍大きい型になります。
こちらも、

>また、式中で数値を記述するときは、その数値が含まれる範囲内の最小の型になります。
こちらも知りませんでした。

勉強不足でした。お時間いただき、すみません。
とても分かりやすい解説で理解できました。

ありがとうございました。

[7342] 複数クエリのSQLを一括で編集したい Name:hayashi MAIL Date:2017/10/17(火) 16:56 [ 返信 ]
OS ウィンドウズ10  MS ACCESS2016 を使用。

いつも勉強させていただいています。
現在、あるデータベースを作成しているのですがそのデータベースの中にクエリがおよそ900個ほどあります。
その900個は抽出条件が違うだけで他の計算式は全く同じです。

質問はこの計算式が間違っていた場合です。現在は900個のクエリをひとつずつデザインビューで開き直した計算式をコピペしています。
900個という数もありますが、このファイルが2つある場合があります。
(もちろん中身はほぼ同じだが独立したファイルです)

この作業が今後も出てくる可能性があるので、何とか簡単にすませられたらと思い質問させていただきました。
質問が伝わりにくいと思いますが何か教えて頂ける事があれば幸いです。

Avg(IIf([アウト累計]=0,0,[補台売上]/[アウト累計]))

IIf([アウト平均]=0,0,[台売平均]/[アウト平均])
に約900個を一括で?変更したいです。

[7343] RE:複数クエリのSQLを一括で編集したい Name:hatena Date:2017/10/17(火) 21:11
> 現在、あるデータベースを作成しているのですがそのデータベースの中にクエリがおよそ900個ほどあります。
> その900個は抽出条件が違うだけで他の計算式は全く同じです。
>
> 質問はこの計算式が間違っていた場合です。現在は900個のクエリをひとつずつデザインビューで開き直した計算式をコピペしています。

抽出条件を外したクエリを一つ作成します。

そのクエリを元にクエリを作成して、そこで抽出条件を設定します。
この抽出条件を設定したクエリを900個作成します。

計算式が変更になったときは、最初のクエリの計算式を変更するだけですみます。


あと、900の抽出条件があるということですが、パラメータクエリを利用すれば少なくできる可能性があると思います。一度、調べてみて検討されることをお薦めします。

[7340] マルチユーザで使用する場合の設定 Name:chichinpuipui Date:2017/10/16(月) 23:15 [ 返信 ]
お世話になります。
マルチユーザ3-4名程度でACCESSツールを使用させる予定です。
その際、データバッティングの際、後にアクセスしたユーザに現在他のユーザが使用しているため旨のメッセージを表示させたいと思っております。

ファイルのオプションで以下の設定を行いましたが果たして以下の設定で正しいのか不安です。
また、レコードが他のユーザが使用有無を判断するプログラムはありますでしょうか。

わたくしの検索スキルが低く見つけられないのかもしれません。
初歩的な質問ばかりで恐縮ですがどうぞご教授ください。

・共有モード
・編集済みレコード
・レコードレベルでロックして開く
をONに設定するところまでネットで調べ分かりました。
ただ、
・編集済みレコード
・レコードレベルでロックして開く
の違いが分かりません。
双方とも編集中のレコードについてはロックする設定だと思います。
また、
・レコードレベルでロックして開く
をONにしてもSQLでの更新は無効とのことでした。

よろしくお願いいたします。

[7333] Access2016 「サブフォーム間のスクロールを同期させる方法」 Name:Bb Date:2017/10/05(木) 16:47 [ 返信 ]
Windows10(64bit) / Access2016

いつも参考にさせていただいております。

「サブフォーム間のスクロールを同期させる方法」
http://hatenachips.blog34.fc2.com/?no=497

でサブフォーム間の連携をとるフォームの参考にさせていただいて
いたのですが、最新のAccess2016では連動しないようで、
ちょっと困惑しています。
(データシート型のサブフォームにすればよいのでしょうが)

APIまで使っての方法ですのでトリッキーなのですが、
出来れば現行のままで使用したいところですが、
何か方法ありますでしょうか?

[7334] RE:Access2016 「サブフォーム間のスクロールを同期させる方法」 Name:hatena Date:2017/10/05(木) 17:42
当方の環境(Windows10(64bit) / Access2016)では一応スクロールが同期しています。
(ただし、最終レコードが表示されると同期しないですが。)

[7336] RE:Access2016 「サブフォーム間のスクロールを同期させる方法」 Name:Bb Date:2017/10/07(土) 17:08
お手間を取らせてしまい申し訳ありません。
そうですか、再現できませんでしたか。こちらの二台のPCで現象が同一だったので、てっきりAccessのバージョンアップのせいかとにらんでおりましたが。

(※Windows64 / Office2016 バージョン1708 bulid 8431.2094で確認)

何か違うのが要因かもしれませんね…こちらでもう一度調べてみたいと思います…。

ありがとうございました。


1件〜15件(全902件)  1345678910       <RSS>    【管理者へ連絡


無料レンタル掲示板・日記・ブログ Progoo