Access VBA 質問スレ Part1

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2012/02/06(月) 22:53:46.88
AccessのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとAccessのバージョンは必ず書きましょう。

★2 AccessのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 AccessのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★5 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

関連スレ
Excel VBA 質問スレ Part23
http://toro.2ch.net/test/read.cgi/tech/1327763113/l50
0449デフォルトの名無しさん
垢版 |
2015/10/24(土) 20:02:10.36ID:pancXijC
>>447
MySQLに接続して閲覧側はウェブでAccess側は入出力側で実現。
でも、MSはAccessはいずれ亡くすと思うよ。年々需要が減ってる
0452デフォルトの名無しさん
垢版 |
2015/10/26(月) 20:56:01.66ID:GrJVc3nW
フォームやレポートの作成が簡単で助かってるんだけど、Accessに匹敵するほどお手軽簡単な開発環境あるのですか?
0456デフォルトの名無しさん
垢版 |
2015/10/27(火) 09:01:30.38ID:NzV7E0Ep
どっちもどっちだろうな。
バックエンドにもよるだろうけど、いつも使ってる方とか得意な方で開発するだろ。
指定があるときはそれに従うだけだから比べなくていい。
FileMakerはiPadなんかで使えるっていうのがウリみたいだけど。
0459デフォルトの名無しさん
垢版 |
2015/10/28(水) 22:29:42.64ID:mlOdASO2
結局のところAccessが担当してた部分ってETLツールに置き換えられてきてるってことかな?入力は除いてだけど。
0460デフォルトの名無しさん
垢版 |
2015/10/29(木) 10:20:50.66ID:olmk/SiV
何が結局のところだよ
ETL言いたいだけちゃうんかと
そもそもAccessでビッグデータなんか扱えくぇrちゅいおpsdfg
0463デフォルトの名無しさん
垢版 |
2015/10/29(木) 23:50:41.92ID:+ZsDxL5P
>>460
人それぞれだと思うが、おいらの使い方ならビックじゃないデータでもETLは結構いい選択肢だと思たあるよ
定形業務にはいいんじゃないか?
0464デフォルトの名無しさん
垢版 |
2015/10/30(金) 15:53:29.13ID:ijicNSnW
あるレポートが、あるクエリを元に作成されていて、そのクエリのレコード毎に、レポートをPDF出力し、出力先はまた別のクエリのフルパス文字内との元クエリデータとの一致で決めたいのですが、ご教示いただけないでしょうか?
0466デフォルトの名無しさん
垢版 |
2015/10/30(金) 19:35:33.54ID:Y9M2GM2T
>>465
レポートをレコード毎にPDF出力して、クエリにあるパスに保存するところ
0468デフォルトの名無しさん
垢版 |
2015/10/31(土) 03:08:21.25ID:CVsb3S4r
>>466
「MS-Accessのレポートをページ毎にPDF化する」でググって一番上のページ
そこみて、わからないとこは自分で勉強してくれ
0469デフォルトの名無しさん
垢版 |
2015/11/01(日) 03:17:03.71ID:MNp+RCAH
>>466
あのさ、ここはお前の願望を叶えるスレじゃないの。
わからない所を聞く為のスレなわけ。

お前のそれは1機能まるごと作ってここにコード貼れって命令してるに過ぎない。自分でコードもはらずにね。
0470デフォルトの名無しさん
垢版 |
2015/11/04(水) 20:19:18.57ID:jMb6JFTC
VBAでSELECT文を作って、Formに渡してRequeryして結果を表示しています。
テキストボックスに表示するテキストデータが途中で切れているという現象がおきました。
別のフォームで同じデータを同じようにテキストボックスに表示させると、全部のデータがきちんと表示されます。
スクロールとかではありません。文字列がぶつっ!と切れて途中までしか表示されないのです。

この現象の原因とかわかる人いますでしょうか?
0473デフォルトの名無しさん
垢版 |
2015/11/05(木) 19:21:36.55ID:zgwRgbI3
>>471,>>472
表示ができているテキストボックスと同じプロパティです。
でも、1000件データのうち、1つだけ200文字くらいの文字列なんですが、100文字くらいの
ところでブツッ!って切れてるんです。
他のデータで同じくらいのサイズの文字列は問題なく表示されています。
SQLが悪いのかと思って、Debug.PrintしてSQLを取り出して、クエリを実行してみると、ちゃんと文字列が全部表示されています。
文字コードかなんかでしょうか?
でも、同じ文字列を別のフォームにあるテキストボックスで表示可能なんです。(ToT)
0475デフォルトの名無しさん
垢版 |
2015/11/05(木) 19:44:01.06ID:zgwRgbI3
SQLは、違います。
あぁ・・・・その実験やってなかった・・・。
やってから報告します・・・。
0476デフォルトの名無しさん
垢版 |
2015/11/05(木) 19:53:07.35ID:tNVJsXcL
VBAの文字列はヌル文字ではターミネートされない
改行とか入って、見えなくなってるだけとかじゃないのか
0477デフォルトの名無しさん
垢版 |
2015/11/06(金) 09:46:24.95ID:rpsHbqpr
union

union all
にしたら現象がでなくなりました。
(ヽ´ω`)でもクエリデザインから実行するとunionでも普通に表示されるんだよなぁ、、、
0479デフォルトの名無しさん
垢版 |
2015/11/06(金) 12:39:06.37ID:F7EIvq3A
test
0481デフォルトの名無しさん
垢版 |
2015/11/06(金) 19:16:39.01ID:hUa1dWCf
メモ型あたりでunionの同一行判定でなんかあるかもしれんけど
どう考えても>>480の勘違いの可能性の方か高いと思うぞ

まあACCESSのバージョンもテーブルの種類もSQLもデータをどうやって表示してるかも書かんような奴の話は
聞くだけ無駄かもしれん
0482デフォルトの名無しさん
垢版 |
2015/11/06(金) 19:41:20.27ID:hUa1dWCf
メモ型ってgroup by 出来なかった気がしたのでちょっと調べた
どうも、TEXT型にキャストして判定するみたいだな
なので、255文字目までが同一のメモ型は同一と判定される

distinctで採択されるのがどっちの行かはわからんが
とりあえずメモ型の制限だからメモ型使って値操作するのが悪いと言う結論だな

個人的にはエラーにしてほしいところだし、昔はエラーになってた気がするんだが俺の気のせいだろうか
0483デフォルトの名無しさん
垢版 |
2015/11/06(金) 19:56:07.21ID:hUa1dWCf
あと、unionは単純なSQLとは言えんし
はなからunionしてるSQLとテーブルレイアウト出してればもっと解決早かっただろうに
全く同じ現象出てるって書いてるブログあるぞ
0484デフォルトの名無しさん
垢版 |
2015/11/07(土) 13:41:21.41ID:Lam93S6q
あのっ某所でAccessはフロントエンドのみの製品で
RDB自体はOS標準で使えますぜgff・・・
みたいな内容見たんだけど
本当なんです?
0485デフォルトの名無しさん
垢版 |
2015/11/07(土) 16:11:16.86ID:rKOE1Rwz
yes
0486デフォルトの名無しさん
垢版 |
2015/11/07(土) 17:29:39.50ID:D4Pma+c4
>>484
んだ。
だから、ExcelがあればVBAで組める人がいるなら、ぶっちゃけいらん。
0487デフォルトの名無しさん
垢版 |
2015/11/07(土) 17:54:57.33ID:nFXrQ+Fm
OSに標準でついてるRDBってなんのこと??
0489デフォルトの名無しさん
垢版 |
2015/11/07(土) 19:25:43.69ID:Lam93S6q
ちゅーかVBScriptからもいけるじゃん
後付けコンポーネントってわけでもなさそうだし
Officeいらないのかもしかして
0490デフォルトの名無しさん
垢版 |
2015/11/07(土) 19:37:37.20ID:sBJO9RQ1
SQLサーバのこといってんの?
0491デフォルトの名無しさん
垢版 |
2015/11/07(土) 19:39:42.37ID:Lam93S6q
>>487-488
>Jetデータベースエンジンとは、Microsoft社が開発したリレーショナルデータベースエンジン。Microsoft Access用に開発されたもので、現在ではWindowsに統合され、様々な製品から利用されている。
だそうですよ
0492デフォルトの名無しさん
垢版 |
2015/11/07(土) 19:47:42.23ID:sBJO9RQ1
>>491
トン
jetってAccess買わなくてもつかえるんだ。
ランタイムはしってたけど
0494デフォルトの名無しさん
垢版 |
2015/11/07(土) 22:03:40.43ID:cyCg/fRc
レポートをレコードごとに、pdf出力したく
daoで以下のような感じで書いたんだが。
ファイルのフルパスが書いてある別クエリの中のレコードとレポートの項目が合致するレコードのフルパスにpdfを出力したいんだがどうしたらいいのかわからない。

Do Until rs.EOF
DoCmd.OpenReport 〜
DoCmd.OutputTo acOutputReport, , acFormatPDF, "ファイルパス.pdf"
DoCmd.Close acReport, レポート名
rs.MoveNext
Loop
0498デフォルトの名無しさん
垢版 |
2015/11/08(日) 13:04:28.61ID:iWdr+l4l
で、Accessって
何に使えばいいの?
(´・ω・`)
0499デフォルトの名無しさん
垢版 |
2015/11/08(日) 14:01:11.47ID:LxG8VZT7
>>498
一人で完結する仕事で面倒臭くて外注する予算もなくてなことを
自動化するのに使ってるよ。だから保守も自分でしかできない(笑)
そんな仕事じゃないか?
0500デフォルトの名無しさん
垢版 |
2015/11/08(日) 15:13:38.10ID:QfP+cajQ
社内の統計担当とかそんなポジションの人かな?
社内の簡単な統計ならほんと楽ちん。
Access使えるか使えないかでどえらい作業能力の差が生まれる。
0504sage
垢版 |
2015/11/11(水) 19:27:14.97ID:V8OM9GuG
access2013でフォームからの入力期間の金額を集計してレポート作成をしようとしています。
vbaでリボンにあるレポートボタンを押下した動作と同じコードは存在しますでしょうか。
0510デフォルトの名無しさん
垢版 |
2015/11/12(木) 12:35:52.00ID:pHlRdfiq
普通にフォームと同じソースの「れぽーとほげ」を用意しておいて

DoCmd, OpenReport "れぽーとほげ", acViewPreview
ではダメな理由があるのかな? フォーム上でレポートに応用できるように画面設計
作り込むよりは専用のレポートで別制作しといたほうが何十倍も効率いいだろうにな
0511デフォルトの名無しさん
垢版 |
2015/11/12(木) 12:42:12.51ID:tbcgbggA
>>504
ちょっと出来ない事があるとVBAに頼るのはよくない。
Officeの使い方をもっと勉強してからVBAに手を出すべきだよ。

「パラメータクエリ」と「フォーム」で作ればなんとかなるかな。
というわけで、VBA必要ないので↑の2つのキーワードでggrks
0512511
垢版 |
2015/11/12(木) 12:43:58.58ID:tbcgbggA
パラメータクエリとレポートでも作れるわ。
0513デフォルトの名無しさん
垢版 |
2015/11/12(木) 14:18:08.75ID:Cdboni3Z
フォームからfrom日付-to日付を入力

テーブルから購入日が対象範囲のデータ取得
テーブル構造は
シーケンスno.,氏名,購入品1,購入日1(購入日、購入品は6まで存在)

クロス集計にて月毎の金額を集計

レポートに出力

入力する日付によってフィールド数が可変なため、レポートの作成はしていないです。
vbaを使う必要がなく可変レポートが作成出来るならスルーして下さい
0515511
垢版 |
2015/11/12(木) 16:03:58.58ID:tbcgbggA
>>513
テーブルの基本設計からやり直せ。
購入品と購入日が1〜6って無いと思います。
0517511
垢版 |
2015/11/12(木) 16:42:28.68ID:tbcgbggA
>>516
レポート用にテーブル作っちゃうことはできないの?
0518デフォルトの名無しさん
垢版 |
2015/11/12(木) 16:43:56.03ID:m1A4y0ZB
>>516
だからクエリ作れよ。
select id,1 as 区分,氏名,購入日1 as 購入日,購入品1 as 購入品
union
select id,2 as 区分,氏名,購入日2 as 購入日,購入品2 as 購入品
:
select id,6 as 区分,氏名,購入日6 as 購入日,購入品6 as 購入品
で、あとはそれに対して、fromToでフィルタ掛ければいいんでないの?
0522デフォルトの名無しさん
垢版 |
2015/11/13(金) 20:45:36.98ID:7WxIZdrP
複雑になってるクエリが循環参照になってるようなのだが、読み解かずにテーブル作成して逃げようとしたらまたエラーなんとかならんかなー
0524デフォルトの名無しさん
垢版 |
2015/11/13(金) 22:14:56.04ID:fKrJSaVy
vbaでfilecopy(fsoも含む)でリムーバブルディスクにファイルをコピーするとハードウェアの安全な取り外しで
ファイルが使用中とかでできない。まぁ警告のダイアログで続行を押すと取り外せるんだけど、これやると
マイコンピュータからリムーバブルディスクが消えなかったりすることがある。
accessを終了すると普通に取り外せるんだけど、これをなんとかできないかなぁ。
0525デフォルトの名無しさん
垢版 |
2015/11/14(土) 00:03:58.17ID:Q8aVOdfz
>>524
Fsoでやるなら、
宣言で as new ...とかしない、最後にNothing入れとくを徹底したら無くなるんじゃないかな。
0526デフォルトの名無しさん
垢版 |
2015/11/14(土) 00:13:34.12ID:YdrOLc06
カレントフォルダとカレントドライブを明示的に
リムーバブルじゃないとこに設定してやれば行ける見たいな事を聞いたことがある
0527デフォルトの名無しさん
垢版 |
2015/11/14(土) 07:50:49.05ID:ZUqvxiq2
>>524
それ、使用したメソッドがファイル掴んだままで、開放してないからでしょ。ちゃんとプログラミングのイロハ身につけてたらやらない。

使ったら必ず開放する。VBAユーザはなぜか使いっぱなしが多い。
0529524
垢版 |
2015/11/14(土) 10:27:44.88ID:c/SicAL6
>>525、527
Dim objFileSys As Object
Set objFileSys = CreateObject("Scripting.FileSystemObject")
objFileSys.CopyFile 元ファイル, コピー先フォルダ & "\"
Set objFileSys = Nothing
copyfileの部分だけをかいつまんで書くとこんな感じだけど、解放の仕方を教えてくれないか。
リムーバブルディスクにコピーしたファイルは開けるし削除もできるからロックされた感じじゃないんだよね。
安全なハードウェアの取り外しだけがうまくいかないんだよ。
0531524
垢版 |
2015/11/14(土) 12:52:04.15ID:c/SicAL6
>>526、530
ありがとう。この方法で解決した。
ChDrive "c" って1行追加しただけでOKでした。言われないと気付かなかったから助かりました。
他のみなさんもありがとう。
0532デフォルトの名無しさん
垢版 |
2015/12/06(日) 22:14:00.95ID:ZiGqGoDJ
重複した文言の多いcsvファイルの情報を読み込む時に、重複しない文言を蓄えたテーブルと、
文言テーブルのIDだけを入力したテーブルに分けて管理する事で容量を節約しようと思ってるんですが、
人が読める様にIDから元の文言を復元したテーブルを作りたいと思った時、
VBAで文言一つ一つ代入したテーブルを新たに作るしかないですかね?
0533デフォルトの名無しさん
垢版 |
2015/12/07(月) 01:08:03.51ID:D3MoacxB
IDでテーブル結合したview作るなりクエリにすりゃいいんじゃないの
どちらにしろVBAとか関係ないと思う
0536534
垢版 |
2015/12/11(金) 16:06:56.86ID:UbN3V6OX
出来ました。
0537デフォルトの名無しさん
垢版 |
2016/01/04(月) 04:37:40.84ID:KKPx2R3A
mdbファイルのテーブル構造をADO.NET SqlCommandで取り出す方法を知りたいです。(データ定義言語的な取り出し)
DoCmd.TransferDatabase acExportでできるテーブル構造のコピーと同じことを,ADO.NETで,元データなしで実現(テーブル生成)したり
プログラム側が想定するテーブル構造と一致するか確認する処理をテーブル生成→比較とすることで一般化したりしたいのですが
0538デフォルトの名無しさん
垢版 |
2016/01/04(月) 18:57:08.11ID:uh/Y4MEw
ADODBEX
0539デフォルトの名無しさん
垢版 |
2016/01/09(土) 22:01:59.03ID:ytxGXkKI
Accessでプロマネの仕事頼まれたけど断ったわ
もうVisualStudioが無いと何もできない体になってしまった
0541デフォルトの名無しさん
垢版 |
2016/01/11(月) 08:38:46.37ID:grtS6L7L
>>540
そういういかにも日本的で世界で通用しない回答は誰も期待していないし、
君みたいな奴は誰も求めていない。
0543デフォルトの名無しさん
垢版 |
2016/01/14(木) 21:12:26.51ID:RIYdCmvc
テーブルにインポートするとたまに失敗する変なゴミデータが入ったエクセルファイルをVBAでテーブルに登録しようとしてます。1レコード100フィールドほどあるもので、addnewで登録すると100件で20秒ほど掛かってしまいます。
Insertでも23秒でした。
全部で10万件あるのですが、高速登録する方法ないでしょうか?
0544デフォルトの名無しさん
垢版 |
2016/01/14(木) 22:01:16.12ID:fK8eMzuy
>>543
配列で受けると速くなるかもしれない
dim ary as variant
ary = Range("A1").CurrentRegion.value ' 1オリジンの2次元配列
0545デフォルトの名無しさん
垢版 |
2016/01/14(木) 22:04:06.66ID:fK8eMzuy
ゴミは数式やエラー値が混ざってるんだろうから配列にした段階で適当に変換する
dim row, col
for row = lbound(ary(), 1) to ubound(ary(), 1)
for col= lbound(ary(), 2) to ubound(ary(), 2)
if ゴミ?(ary(row, col)) then ary(row, col) = ゴミ処理(ary(row, col))
next
next
この後でテーブル登録する
0546デフォルトの名無しさん
垢版 |
2016/01/14(木) 23:52:25.44ID:SY7xxp+v
>>543
パフォーマンス重視ならレコードセットやExcelオブジェクトは扱わない方が良いですよ
1.インポート定義でインポート
2.リンクテーブルを作って追加クエリ
3.SQL の IN 句使って INSERT
4.OLE DB の Jet か ACE で接続して INSERT
などなど...

ゴミが混ざるならゴミを許容する作業テーブルにインポートしてから後始末をするとか
処理の仕方も色々あると思います、頑張ってください
0547デフォルトの名無しさん
垢版 |
2016/01/14(木) 23:55:58.95ID:SY7xxp+v
書き忘れ
インポート定義は文字列切り詰めなどが起きるかもしれないので
使うなら想定しておいた方が良いです
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況