Private Sub EXCEL出力_Click()
Dim intRow As Integer
Dim intCell As Integer
Dim xls As Object
'Excelオブジェクトを生成
Set xls = CreateObject("Excel.Application")
With xls
'画面の再描画を抑止
.ScreenUpdating = False
'既存のブックを開く
.Workbooks.Open ("C:\Users\xxx\Documents\Access_expo_excel\請求書.xlsx")
'各レコードをExcelに出力
With .Workbooks("請求書.xlsx").WorkSheets(1)
.Cells(15, 2).Value = Me!お名前
.Cells(16, 2).Value = Me!〒
.Cells(17, 2).Value = Me!ご住所
.Cells(18, 2).Value = Me!お電話番号
.Cells(19, 2).Value = Me!メールアドレス
.Cells(20, 2).Value = Me!車名
End With
'画面の再描画を元に戻す
.ScreenUpdating = True
'Excelを可視状態にする
.Visible = True
End With
Set xls = Nothing
End Sub
ACCESS(SQL)のANDとORにも優先順位がありANDが優先されます。
例えば元コードで男性の伊藤さんを探そうとなった場合、漢字指定だと 氏名='伊藤' OR フリガナ='伊藤' AND 性別='*男*'
は 氏名='伊藤' OR (フリガナ='伊藤' AND 性別='*男*')
と同じとなります。その他の検索項目はフリガナで抽出できた場合にしか影響しないということですね。
提示した修正はこれを (氏名='伊藤' OR フリガナ='伊藤') AND 性別='*男*'
となるようにするものです。
フォームにレコードは表示されていません。
If Rst.EOF Then
MsgBox "レコードがありません。"
Exit Sub
Else
Rst.MoveFirst
End If
上記を記載しても同じエラーになります。
いつも大変お世話になっております。
漢字フリガナ検索も無事思うように動作するようになり、大変助かっております。
追加の質問をさせて頂きたく、送信いたしました。
検索結果データがない場合、
メッセージボックスで「検索データはありません」等の表示をさせる方法はないでしょうか?
どうぞよろしくお願いいたします。
フォームにレコードは表示されてますか。レコード件数が0だとそのエラーになりますが。
下記のようにしてみては。
どこまでできていて、どこで躓いているのか提示してください。
あと、下記の情報も提示してください。
テーブル名、フィールド名、データ例
現状の仕様をもう少し詳細かつ明確に提示してもらった方が適切な回答ができると思います。
出ている情報から推測するに、
コンボボックス「CB熊本市保3」で町名を選択する、ということですね。
フォームのレコードソースのテーブルのフィールド構成はどうなっているのでしょうか。
住所は熊本市だけですか。
町名、丁目番地は別になっているのでしょうか。
大江町以外の場合はどうなりますか。
InputBox
で表示されるテキストボックスのところにコンボボックスを使いたいということですかね?1.標準機能にはないので、専用のフォームを作成して(ポップアップに設定しておいて)、
Inputbox
の代わりにOpenform
して閉じるときのイベントで[管轄署]に入力するのが一般的だと思います。2.身内で使うようなものなら
で手抜き実装したりとか
3.大江町以外の[管轄署]がどう使われているのかわかりませんが[大江町用管轄署]コンボボックスを重ねて
visible
のON/OFFでそのフォーム内で処理するとか4.
決まり切っているなら自前で入力された住所を解析してユーザーに入力させないのが一番だと思います。住所だと丁目(番地)を省略されたりハイフンでつないだりと手間もかかりそうですが。
ですよね。といいますか、突然できるようになりました。
hatena様効果でしょうか?
お騒がせしました。ありがとうございました。
フォームのプロパティの「既定のビュー」は「データシート」、「データシートビューの許可」は「はい」になっていますか。
あるいは、フォームのプロパティ設定を無視して、強制的にデータシートビューで開きたい場合は、下記のように記述します。
そんなことはないと思います。
ありがとうございました。おかげさまで、解決しました!
最適化についても全く知らず、元ファイルが35MBもあったのに、最適化で1.4MBになりました。
いつも助けていただいてありがとうございます。また困った時には相談させてくださいm(_ _)m
ファイルみてました。
症状確認できました。
いろいろ、試してみて対処法を発見しました。
四角形コントロールでラベルやテキストボックスを囲んでいますが、その四角形コントロールを選択して、右クリックして[位置]-[最背面へ移動]をクリックしてください。
これで、症状が発生しなくなります。
四角形コントロールが前面にあると、背景スタイルが透明にしてあっても、背面のコントロールの描画になんらかの影響を与えるのだと思われます。
できました!お手数をおかけしますが、よろしくお願いしますm(_ _)m
ファイルのコピーを作成して、そこから、症状のでるフォームとテーブルのみ残して、
テーブルのデータは症状の確認できる最低限の件数のみ残して(10件もあればいいと思います)、最適化修復をして、それをZIPファイルにしたら小さくなりませんか。
ありがとうございます。すみません、どうしても1076KBより小さくなりません。
何かZIPファイルをお送りする方法はありませんでしょうか。
マクロかイベントプロシージャを設定してなくて、ラベルの書式が勝手に変わるという状況が想像つきません。
右のカラムの下の方の「ファイル送信フォーム」から症状の出るファイルを送信してもらえますか。
ファイル内はフォームとレコードソースのテーブルのみの最低限のものにして、ZIPファイルにして送信してください。
ありがとうございます。連結フォームです。
フォームのイベントを確認しましたが、
「タイマ間隔」が「0」、「キーボードイベント取得」が「いいえ」
それ以外は何も設定されていません。
段々濃くなるラベルを1つ消して、新たにラベルを設置してみたのですが、状況は変わりませんでした。
連結フォーム上のラベルですか。
画像で見ると単に太字になっているようですが、だんだん色が濃くなっていくのですか。
フォームのイベントにマクロかイベントプロシージャを設定していますか。
しているなら一度それをすべて削除して試してみてください。(バックアップを取ってから)
それでも再現しますか。
リンク親フィールド、リンク子フィールドで関連付けしてあるということでしょうか。
ならば、
[納入先ID] = Forms![O111受注台帳閲覧]![納入先ID]
でいいと思います。試してみてください。
[C101納入先マスターメイン] を [O111受注台帳閲覧]の[納入先ID]で抽出することになりますが、
メインフォームを抽出すれば、サブフォームもそれに関連するデータに抽出されます。
ありがとうございます。
Forms![C101納入先マスターメイン] と Forms![C101納入先マスターメイン]![C101納入先マスターサブ].Form!
が [得意先ID] で関連付けしてあります。
「フォームを開く」アクションの「Where条件式」の設定ですね。
別のフォームのコントロール値を使ってレコードを制限する場合は下記の構文になります。
[フィールド名] = Forms![フォーム名]![別のフォームのコントロール名]
開きたいフォームはメイン/サブフォーム形式のようですが、メインフォームとサブフォームの関係はどのようになってますか。
メインフォームとサブフォームが「納入先ID」フィールドでリンクされているなら、
[納入先ID] = Forms![O111受注台帳閲覧]![納入先ID]
と設定すればOKです。
そうでないなら、メインフォームとサブフォームの関係がどうなっているか説明してください。
DoCmd.GoToRecord , , acNewRec
でエラーが出るとすると、フォームの「追加の許可」プロパティが「いいえ」になっているとか、
レコードソースのクエリが更新不可になっているか、ではないですか。
新規レコードがないので当然エラーになります。
早速のご回答ありがとうございます!!
おかげさまでできました。
Me!でしたら、コンボボックスの件も Me!車名.Column(1) でクリアできました。
初心者にもわかりやすい解説付きでご教授いただき本当にありがとうございました!
単票フォームで現在表示されているレコードのデータをエクセルへ転記したいということですよね。
なら、わざわざレコードセットを開かなくても(OpenRecordsetしなくても)、フォームのデータをそのまま代入すればいいでしょう。
提示のコードではシートを指定していないのでエラーになると思いますので、それも修正すると下記のようなコードになると思います。
Me!フィールド名 でフォームに表示されているデータを参照できます。
データの持ち方が間違っていると思いますか、
ということなので、そういうことにして、
年に対する元号をクエリで表示させたいということでしょうか。
テーブルを作成して結合するのが一番速いと思います。
年 フィールドにはインデックスを設定しておきます。
クエリで、「年」同士を結合して「元号」を表示させます。
くわしく解説いただきまして、ありがとうございます。
意味も理解できずに使用していまして、全くダメですね。
この掲示板をもっと活用させて頂いて、勉強していきます。
ありがとうございました。😄
無事に行ったようでなによりです。
せっかくなので軽く解説を置いておきます。
演算子には優先順位があります。
3 + 3 * 3 = 12 '・・・18ではない(乗算が優先される)
といったようなものです。
ACCESS(SQL)の
AND
とOR
にも優先順位がありAND
が優先されます。例えば元コードで男性の伊藤さんを探そうとなった場合、漢字指定だと
氏名='伊藤' OR フリガナ='伊藤' AND 性別='*男*'
は
氏名='伊藤' OR (フリガナ='伊藤' AND 性別='*男*')
と同じとなります。その他の検索項目はフリガナで抽出できた場合にしか影響しないということですね。
提示した修正はこれを
(氏名='伊藤' OR フリガナ='伊藤') AND 性別='*男*'
となるようにするものです。
ありがとうございます。
頑張ります!🙋♀️
最初のうちはネットで調べてコピペでもいいと思います。
ただ、そのまま使うのではなくそれぞれの関数やコードの意味を調べて理解するようにするといと思います。
調べても分からなければ、このような掲示板でどんどん質問すればいいでょう。
そのうちにスキルアップしてきます。
詳しく教えて戴きましてありがとうございます。
意味も考えずに使用しているだけでは、全くダメですね。
勉強していきます。
ありがとうございました。
Year(DateAdd("m",-3, [入出庫日])
についてDateAdd で入出庫日の3か月前を取得、
これにより 2019/4/1 ~ 2020/3/31 の日付は、2019/1/1 ~ 2019/12/31 に変換される。
Year で年を取得すると 2019 となる。
IIf(Month([受理年月日])<=3,Year([受理年月日])-1,Year([受理年月日]))
月が3以前だったら年から1をひく、そうでなかったら年をそのまま返す。
つまり、4月から12月のまでの日付はその年を返して、3月以下だったら年から-1する。
どちらにしても結果は同じになります。
hatena様 hiroton様
本日、試したところ無事思うように動きました。
大変勉強になりました。
ありがとうございました。😊
提示されている式をそのままコピーして使っているだけなんですが不思議ですね。
(ちなみに自分のところでは元のコードからエラーになります)
Or
とフリガナ
の間に半角空白が必要です。ありがとうございます。
早速試しに アオキ で検索しようとした所、
実行時エラー‘3075
クエリ式’(氏名 Like “アオキ” Orフリガナ Like”アオキ”)’の構文エラー:演算子がありません。
と、表示され、下記部分が 黄色に反転しています。
Me.Filter = Mid(strfilter, 6)
申し訳ありません、ほぼ見よう見まねですので、どうしよう・・・という感じになっています。
氏名検索のところを
↓
でどうでしょう?
申し訳ありません。
Me.氏名検索 のところで、フリガナ を入力して性別検索であったり 産業検索等の項目をいくつか選択し
抽出をかけると、絞り込みが出来るのですが、
Me.氏名検索 に 漢字で氏名 を入力して同じように項目をいくつか選択し
抽出をかけると、漢字(氏名)のみの絞り込みしか出来ず、その他のいくつか選択した項目の絞り込みが出来ません。
具体的に上げてください。
「何をどうしたらこうなってほしい」のだけれど「何をどうしたらどうなった」というのがなければ書いたとおりに動いているだろうとしか言えません。
エラーが出てコードが途中で止まるという話ではないですよね?
お返事ありがとうございます。
質問は編集できたのですね。申し訳ありません。
Me.参加 はチェックボックスです。
データ登録画面で、参加する しない を チェックボックスで選択してもらい、
検索画面で、チェックが入ったデータのみを抽出しようと思いましたので、
チェックが入っていないものは抽出しない、程度にしか考えていませんでした。
あと、確認ですか、
Me.参加
はチェックボックスでしょうか。チェックボックスとして、チェックが入っているときは、「参加有無」フィールドがTrueを抽出するのだと思いますか、チェックが入ってないときはどうしたいのでしょうか。
質問は後からでも編集できるので、質問のコードを実際のものに修正してください。
お返事ありがとうございます。
すみません、確認すると実際には
strfilter = strfilter & " AND 参加有無 =" & Me.参加
と、記述していました。