プロパティーシートから直接Functinをcallするときに=Function()と書きますね。
これをvbaで設定できますか?
モジュールプロパティーのCreateEvetnPorcからは当然ながらできません。
どのオブジェクトのメソッドならできますかね?それとも不可能でイベントプロシジャーでcall Functionと書くしか方法がないのでしょうか?
順位が1位から20位までのデータがあったとして、
SQLを使用して、下位3件のデータを上位から取得(18位、19位、20位の順)するにはどうすればよいですか?
select * from (select top 3 * from テーブル名 order by 順位 desc) order by 順位 asc
>>6
ありがとうございます。これです。これがやりたかったんです。本当にありがとうございます! 業務用mdbを眺めていたら,モジュールレベルでPublic宣言とGlobal宣言が混在している.
このPGはアホなのかな?
テーブル定義いじるやつはマゾだがデータ更新なら普通だろ
そういえばGlobalって余り使わないけど
publicとどういう差が有るのかは知らないなぁ
会社のPCがようやく7から10に切り替わり、
ついでにofficeが2010から2016になった。
そしたら・・・・・・
Accessのシステムが壊滅状態(;_;)
一番シンプルなところで、DateTimePickerがない・・・。
Access2016で日付フィールドとリンクしてない状態で、カレンダー使うのどしたらいいの・・・
2010と互換性を維持したまま
>>14
情シス「VBのランタイム入れません。よくわからないから。」
(;_;) >>12
カレンダー用のOCXだかDLLだかを持ってきて入れれば動くはずけど
ライセンス的にどうだか知らない
>>14
そもそもそのコンポーネントが今のACCESSに無くなってるから
2016をクリーンインストールしてれば参照設定できない
2010とかランタイム版あったはずだから、2016入れた後からインストールできるなら
それ入れれば行ける気がする
試して報告してくれ そもそもAccessって、サポートあるの?
あるとしたら、SA結んだら何回までオッケーただしおま環は知らんみたいな?
Accessの謎の異常終了は、永久に治らないの??
microsoftはしかたなくaccessを続けているだけで
microsoftは多分本気でやる気はないよ
本気ならとっくに2G制限も越えているだろうしネットワーク処理機能搭載くらいしている
microsoftが本気ならファイルメーカーがやってる感じくらいの機能搭載や改良はしてる筈
office製品の一部だから止められないだけで
本格的な改修とかは無いと思っていた方が良い
絶対無いとは思わないけど
今ある範囲でやれる内容をこなす程度で期待とかはしないほうが良いと思う
元々別会社が作っていた物を会社ごと買収してaccessって名前にして出した?
みたいな経緯だったと思う
確かwikipediaとかに書いてあったと思う
だからなんつーか
microsoftも余り思い入れが無いというか本気で無いというか
そういう感じの所が有るのは仕方が無いのよ
寧ろここまで続いている方が驚き
近年他のアプリケーションの値段が上がっている中でaccessは値上げもたいしてしないし(はっきり確認したわけではないが)
vb6.0が終わったのに比べて
良くaccessはこんなに続くなぁとは思う
vb6.0とaccessvbaなんて殆ど同じなのになんでvb6.0止めたんだろうと思うくらい
64bit版は出すのに本格改修なんかはするつもりないみたいだし
いったい何処まで続くのかある意味解らなくなってきた
他のアプリケーションが大きく変わったり無くなっている中で
これだけ変わらず(細かい点を除けば)長く続くのはかなり珍しい気がする
言語仕様がほとんど変わらないおかげで20年前のシステムが今も使えている
開発コストと保守コスト考えたらAccessは素晴らしいよ
ローカルでランダムアクセスできるAccessは気楽でいい
excel vbaとaccess vba
どっちの方が実用的ですか?
T_商品というテーブルを用意し、そこには次の内容が入っており、
商品 材料1 材料2 材料3
卵かけご飯 卵 米
お好み焼き 小麦 卵 豚肉
ショートケーキ 卵 小麦 苺
アップルパイ りんご 小麦 牛乳
フォームに、材料A、材料Bのテキストボックスを置き、
検索ボタンを押すと、材料AかつBを含む商品が検索されるというVBAの記述に苦慮しています。
単独の材料であれば、VBAにSQLを組み込み、
SELECT * FROM 商品テーブル WHERE 材料1 = ' & 材料A & ' OR 材料2 = ' & 材料A & ' OR 材料3 = ' & 材料A & ' ;
こんな感じでできるのですが、材料が2つ以上になるとどうすればよいか見当がつかなくなりました。
アドバイスいただけませんでしょうか?
>>29
1がAかB
かつ
2がAかB
かつ
3がAかB
じゃないかな…眠くて間違ってる気もする…
あと、候補がおおすぎないなら、テキストボックスはコンボかな…(フォーム起動遅くなるなど副作用もあったりするのでこの案は無視して可)
おやすみなさい… >>29
悪いことは言わんから、まずテーブル設計見直せ 馬鹿の次の質問
材料4を追加した時にはどうすれぱよいでしょうか?
>>15
Visual Studio ExpressでDLL作れ >>29
そのテ―ブルはちょっと…
商品のテーブルと材料のテーブルで結合じゃね? accessは大昔にやってて今は持ってすらいないけど
該当行をdynasetで取り出した後
該当fieldから値を取り出して
if分で有るか調べれば出来たりしないか?
いくらでも増やしていいぞ
SELECT * FROM 商品テーブル
WHERE (材料1 = ' & 材料A & ' OR 材料2 = ' & 材料A & ' OR 材料3 = ' & 材料A & ')
AND ("" = ' & 材料B & ' OR 材料1 = ' & 材料B & ' OR 材料2 = ' & 材料B & ' OR 材料3 = ' & 材料B & ')
AND ("" = ' & 材料C & ' OR 材料1 = ' & 材料C & ' OR 材料2 = ' & 材料C & ' OR 材料3 = ' & 材料C & ');
だから、材料フィールドを横に並べるのは作りが悪いだろ。
フィールド1個にして縦に並べるべきじゃね?
設計の問題だろ。
できるできないの問題じゃない。
なんで使い勝手の悪いもんをわざわざ作らなきゃならんのよ。
取り敢えず動かすなら、
材料1〜4をカンマで連結した文字列の中に、AとB両方ある
と書けば人間にはわかりやすい
まぁリレーショナルデータベースだから設計を変えるべきだけど
access使うような所なんて零細なんだから
そんなリファクタリングだのテストファーストだのモダンだのオブジェクト指向だのも関係無いような人材しか居ないんだから
vbaベタベタというのでやるしかない
みたいな感じなんだろう
その人がそれしか出来ないならvbaベタベタしか方法が無かったりする
この人がそうなのかは知らないけど
普通の設計にしたとして
countが3以上の〜、とかやるのが正しいの?
なんか不安なんだが
なんでcountなんて話になってるの?
商品テ―ブルと材料テーブルで結合するなら、商品テーブルには材料IDのフィールドが1つしかないんだから、材料IDのフィールドに材料AのIDと材料BのIDを持つ商品を検索するだけだよ。
一つの材料IDフィールドに2つの材料IDをカンマ区切りで入れるのが正解なの?
リレーショナル全否定?
リレーショナルデータベースを前提にするならどんな設計が一番使い勝手がよいんだろうかね
>>46
商品テーブル、材料テーブル、商品の材料テーブルを作って、こんな感じで
SELECT [商品] FROM 商品の材料
WHERE 材料 IN (Form!材料A, Form!材料B, Form!材料C)
GROUP BY [商品]
HAVING Count([商品]) >= Form!条件数;
材料A,B,CそれぞれのサブクエリをJIONするよりは速い気がする >>49
うん、基本的に同じ考えだ。
以下の書き込みをしようとしてたが、放置してた。
>>47
何を言ってるんだ?
俺はカンマ区切りなんて言ってないぞ。
リレーショナルが分かってるなら>>29みたいにゃならんだろうよ。
卵かけご飯の材料1の卵と材料2の米は、材料1を米、材料2を卵と取り替えちゃいかんのか?
そんなこと無いだろ。
こういう同じ種別の物を別フィールドにすると管理出来なくなるだろ。
商品 材料
卵かけご飯のID 卵のID
卵かけご飯のID 米のID
お好み焼きのID 小麦のID
お好み焼きのID 卵のID
お好み焼きのID 豚肉のID
ショートケーキのID 卵のID
ショ−トケーキのID 小麦のID
ショートケーキのID 苺のID
アップルパイのID りんごのID
アップルパイのID 小麦のID
アップルパイのID 牛乳のID
こういう風にして商品マスタ、材料マスタ、商品作成の3テーブルにする。
しかし、商品、材料どっちのテーブルの場合もそうだが他に管理したい情報がないならそれぞれマスタテーブルやめてIDの所を商品名や材料名にしてテーブル減らしても良い。
その場合は最小1テ―ブルになる。
なお、>>46は商品マスタをやめて2テーブルにした場合だ。 仕様が解らないからアレだけど
そのhaving countだと同じ材料が複数行登録されていた場合に
フォームに設定した別々な材料で検索した時に検索しても且つ条件にならないんじゃないかな?
同じ材料を登録できないように作ってあれば問題無いと思うけど
その辺どうなんだろうか?
まぁ作りと要求次第だと思うけど
的外れだったらごめんよ
ちょっと気になったんで
複数列の場合に連結してから文字列検索で探すというのは
sqlが長く複雑になり難いかもしれないね
何にしても実現の仕方は色々有るね
その人の技量や置かれている状況次第だろうね
最初に不安だと書いているように私もCountは邪道だと思ってるんですよね
「なんでcountなんて話になってるんだ」と怒られる程度には
それで、いろいろな方法がある中で「王道」をご指導いただけないんでしょうか?
>>51
基本的に、テーブルには誤りのあるデータは登録しない
逆に言うと、読み出したデータに誤りがあるかもしれないなら、全ての読み出し処理の後に全項目の妥当性チェックが必要になる 製品テーブルと素材テーブルと連結用テーブルの三つつくる
あとIDいらんから消して
idいらないのではってこと時々あるよね。
性別項目なんて"男"、"女"って直接入れてエエやんて思う。
>>54
id使わないなら 1テーブルでええんとちゃう? >>55
性別はboolでいい
ただしオカマちゃんなどに対応するため
Bool 肉体の性別
Bool 精神の性別
Bool 改造後の性別
Bool 住民基本台帳の性別
Bool 一般公開する性別
Bool セキュリティで保護された性別
などのフィールドを用意するのがベスト オカマでも、男専、バイ、女専と分けないとトイレで掘られるリスクが
Excel VBA質問スレが最後までいって終わったので、次スレ検索したらここが出てきた
Excel VBA質問スレの新スレはないのか?
Excel VBA質問スレでもAccessの話が話題に出るので、ここと統合してもいいんじゃね?
VBAメインの話だろ
>>29がダメな理由、データベースがわからない人にどう説明したら良いんだろ。
ウチの会社も、みんなこうやって作りたがるんだよな。
商品 1月売上 2月売上 3月売上 4月売上 ・・・ 難しいだろうね
リレーショナルデータベースにおける正規化って
コンピューター的な都合でテーブルを分けてる
でも実際には依頼伝票と明細というものは
人間の感覚的には一体として扱う方が感覚的に自然だからそういう風になってしまう
何の為にリレーショナルで正規化をするのか?
というのをデータの不整合が起きないようにを集中化させる為である事を教えるしかないけど
コンピューターがどういう風に処理をすると
効率的だったり安全だったりするか
を理解しておかないと難しい
表計算の延長や通常の感覚のままだと無理だと思う
大げさに言うと
コンピューターサイエンスの知識が必要
って事になる思う
accessはリレーショナルな所を活用して効率化しているから結構難しい面が有る
どうしても無理なら
桐
でも使うという手も有るw
>>54
横槍ど素人でごめん。
連結用テーブルってのは>>50みたいなのでおkってことですか?
最近ACCESS初めて同じようなことしようと思ってます。 >>65
そそ。
あそこに並んでる表を入れておくのが連結テーブル
あれがなぜ必要かはわかると思うので略
商品、材料テーブルの内容から、自ずと連結テーブルも必要になり、そういうテーブル構成になることは別に特殊なことではありません >>66
ありがとうございます。
実際は、製品のそれぞれの材料をどれくらい使ったかを管理する必要があるのですが、その場合、
製品テーブル
材料テーブル
製品と材料の連結テーブル
連結テーブルと使用量の入力用テーブルが必要になるイメージですかね?
VBAスレでしたね。テーブルの作り方はここではないのはわかってるのですが、何かこのあたりのテーブルやフォームの作成のヒントになる書籍とかあれば教えていただけませんか? excelとaccessはアプリケーションとして随分違うから分けた方が良い
excelの方が進みが速いし
access相談系ってここ以外に案外質問スレが見当たらないし(自分が知らないだけで実際には有るかも知れないけど)
分量で分けるなら
excel
access,word,outlook,その他?
みたいに二つに分けた方が良い
excelは利用している人の数が段違いだろうし
上の質問みたいに
材料1,材料2,...
みたいにするのはaccessでは合い難いけど
excelでは割とそういう風に使うから
違いは大きい
それにexcelvbaの方は見てないけど
accessとexcel勢で何か悶着有ったみたいだし
基本は分けた方が良い
>>63
Excelに慣れて表を想像するから。
DBはリレーションを想像すべきで表を想像すべきじゃない。
>>64
リレーションに慣れてれば自然に正規化しようとするようになる。 >>68
まず、製品、材料、連結テーブルの中で使用量を格納できる(格納するのがふさわしいか)のはどのテーブルかを考える。
ふさわしいテーブルがなければ新テーブルを追加するが、使用量は連結テーブルに格納すればいいのではと理論建てて考えられるようになりましょう。
書籍は近所に大きめの書店があれば、自分の好みで選びましょう。図が多いとかカラフルなのが見やすいとか。
初級本は2、3回見ればあまり出番なくなると思いますが、どんなことができるのかとか効率よく知るのに有効です。
他は、逆引きとか、テクニック本とかがいろいろな処理を書く上で有効で、長く役立ってくれるでしょう。 >>63
データベースに限ったことではないが、最小限の入力(手間)で最大限の結果(伝票だけでなく売上集計や分析など)を得ることが目標。
平たく言えば、楽(効率アップ)しようと思わない人、そのために努力しようと思わない人には伝わらない。
オレは説得するのは諦めた。残業代増やしたい奴ばっかりだから 構造ならSQLとかDBのアンチパターン解説本
>>65
他にも連結用テーブルはプライマリをフィールド二つの複合にして
それぞれに元テーブルとの外部キーつくること 馬鹿でも仕事をしなきゃならない
そういう人は材料1,材料2,...でやれるなら
それでやってもらうしかない
頭いい奴だけで後は生活保護で構わない
とかで良いなら話は別だけど?
その辺を理解出来ないアホが多くて困る
正規化を理解しないでaccess使っている人間と種類的には同じ
自分がやれる事が一番と思って他を考えていない
32bitのAccess2016を使っています。
いままではinteger型で済むものはlong型にしてはいけない。メモリーの無駄遣いと思ってきました。
しかし、ベンチマークをとるとlong型の方が速いという主張を頻繁に見るようになりました。
数字は全部long型にした方がいいのでしょうかね?
>>77
昔々はそうだった
しかし、今はあり余るメモリをたらふく使って、高速にとか、プログラム書きやすくとかになってる。
(もちろん限度ってものはある)
昔は8bitや 16bit CPUだから、長い桁は時間かかった。今は 64bitなので、それ以下に収まれば充分高速。
(数億回ループするのは稀なので、あるなら都度ベンチ取ってロジックなど決めるといい)
SIMDにより多く詰め込めるとかもあるけど、VBAでは多分使われてないから気にしなくていい
わざわざ longに直す必要はない。これからは気にせず long使っていい >>78
でも、longに直したくなりますよねw
標準モジュールは一括置換→保存で問題ありませんでしたが、
フォームでやってみたら、すぐにメモリー不足やら、フォーム破損が生じてしまいましたw 実験用のコピーだよ。
楽しく実験するのがプログラミング上達の近道だと思うんだよね。
>>81
実験は大切。失敗もベンチ取るのも身になる。
実験ソースや結果も Accessのテーブルに分類して残しとくんだぞ
(オレは、ソースはモジュールに置いて、コメントに結果を書いてたりもする。もちろん他言語などはテーブルやプロジェクトにしてなど)
カンペ作ったときみたいに忘れないもんだが、将来の追試や数値が役に立つ(まれに) >>81
後付けの言い訳乙
実験するよう連中はこんなところで質問なんかせんわ >>83
Access界隈っこういう人が多い気がするなあ。
実験用コピーじゃなかったら真っ青になってるだろうなw 新人の頃は良く失敗した
数値フィールドをテキスト型で定義したり
データ、システム分離しなくてmdb破損させたり
手元の最新版壊して顧客PCまで最新版取りに戻ったり
:
>>85
オレも最初の頃壊れ(し)まくって、Accessなんて使いもんにならんやんと思った
dbだから、排他とかできるんだし、別々のフォーム触るなら、皆で開発できるやろと 1つの共有mdbで開発やってたw
規模によるけどシステム分離はわざわざしないな
分離するのは、sqlserverとかにするときだけだ システム分離ってなんですか?
私もファイルが壊れてばかりで困ってます。
>>87
データベースでデ−タをどうこうする部分と、デ−タそのものを分離するということでしょ。
テーブルとクエリやフォーム、レポートを別ファイルにするという意味だと思う。 >>87
>>88
テーブルとそれ以外に分けることです。
それ以外の方にはリンクテーブルを置いておけば、同じように処理できます。
複数人で同時にテーブル読み書きするときは定番のやり方です。
(一人でしか使わないなら、わざわざ分ける必要はありません)
テーブルの方はファイルサーバに、その他は各ローカルに置いて使います。
もう少し細かく言うと、ワークテーブルはそれ以外の方に含みます。 >>89
横からすんみません。
一人でしか使わない場合もフォームのコントロールを弄くるのが好きな人は分離した方が良いと思います。
コマンドボタンの位置を変更しただけでフォームが消えてしまったことが何度もありますから、
一人で使用する場合もカスタマイズ好きならデーターは分離した方がいいと思います。 >>89
ネットワークが遅い場合は、定数テーブルもローカルにとか、その辺は臨機応変に。 >>90
最近は個人的な作成しかしなくなったので教えて下さい。
そのファイルはmdb、accdbどちらですか?
(拡張子が変わって壊れにくくなったかとか、何が変わってどう影響するか細かくは調べてないです)
そのdbファイルはローカル/ファイルサーバどちらに置いてましたか?
ここ数年はツール的な小さなものを、accdbをローカルで作成してますが、壊れた経験はないです。
1つのフォーム内で、各処理をフレームで分けてあり、フレーム内にはテキストボックスやボタンなどがあります。
フレーム単位で、あっちやこっちに頻繁に移動はしてます。
(それでも、過去の壊れてた経験から、数日に一回最適化とバックアップはとってます) >>92
mdbです。dbファイルもmdbでローカルです。
フロントエンド?(と言っていいのかしら?)が巨大で、100MBくらいあります。
業務用ソフトで中身は使用されていないゴミ変数やゴミプロシジャーが大量にあります。空のプロシジャーもある上に、それをcallしている謎のプロシジャーもあります。
str型の変数なのに、タイプするのが面倒くさかったのか、var型で宣言されている変数がこれまた大量にあります。 >>93
ありがとうございます。
今でもmdbで作り込みが大きいのは壊れやすいんですね。
以前は、新mdbに全部インポートして、リフレッシュ(ゴミ除去)とかやってました。
(最適化より小さくなるから、何か効果はあるんじゃないかと思って。)
accdbに全部インポートして、参照設定修正という方法もあるけど、業務用だと完全に同じ動きするかと問われると保証できないので、難しいだろうし。
時間やお金出るなら(これからも使い続けるなら)、機能(部署)ごとに分割とか、accdbに徐々に移行(プロシージャ修正整理)とかやっていきたいところですね。 Accessはフロントエンドに使う
DBはMySQLでも良い
一度に大量で複雑な更新をすると落ちやすかった印象は有るかなぁ
Accessは何たって帳票の作成が超簡単!
これがあるから離れなれない。
LibreOfficeやOpenOfficeにも帳票作成ツールはあるけど、
Accessほど使い易くはないのが、移行できずにいる大きな要因の一つなのは間違いない。
Office365でアプリアイコンが刷新されたがAccessは変わらない悲しみ
access2016使ってて2013のランタイム入れたらaccessが使えなくなってびびったわ
あわててシステムの復元して直ったけど
サブフォームのソースオブジェクトに、SQLを直接記入することはできないのでしょうか?
SQL文というものがそもそもオブジェクトでないから記入できないのでしょうか?
Formのオープン時にそのサブフォームのおソースを放り込めばできる
あとはメインフォーム上でサブフォームをいぢるイベント時に書くとか 例えばボタン押した時など
サブフォームはソース無し にしてるけど、自分は そこへ放り込むやり方だと出来てる
id 部門 販売品目
1 A りんご
2 A バナナ
3 A りんご
4 B バナナ
5 B ぶどう
6 B ぶどう
というテーブルから、
部署と販売品目が同じレコード数
(Aかつりんご、Aかつバナナ、Bかつバナナ、Bかつぶどう の数)をカウントしたいのですがうまくいきません。
販売品目単独では
SELECT 販売品目,Count(id)
FROM テーブル名
GROUP BY 販売品目
のようにすれば思うようにいくのですが、複数条件になると思うようにいきません。
お知恵を貸していただけないでしょうか。
SELECT 部門, 販売品目, Count(ID) AS IDカウント
FROM テーブル1
GROUP BY 部門, 販売品目
HAVING (((部門)="A") AND ((販売品目)="りんご")
OR ((部門)="A") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="ぶどう")) ;
もしくは
SELECT 部門, 販売品目, Count(ID) AS IDのカウント
FROM (
SELECT * FROM テーブル1 WHERE (((部門)="A") AND ((販売品目)="りんご")
OR ((部門)="A") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="ぶどう"))
) GROUP BY 部門, 販売品目
//シンプルにこれでもできたけどwhereの位置とか括弧とか間違えてない?
select 部門, 販売品目, count(ID) as カウント
from テーブル1
where (((部門)="A") AND ((販売品目)="りんご")
OR ((部門)="A") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="ぶどう"))
group by 部門, 販売品目
>>106
ありごとうごぞいます。
説明が不十分でした。
たしかにそのとうり記述すればできるのですが、部門や販売品目が増えていった場合に、全組合せを書き出さないでやる方法はないものかと考えております。 まだ説明不足かと
組み合わせを指定しないと絞り込みはできないし
クエリビルダーでちゃちゃっと作った最小形が>>106
絞り込み条件のテーブルを他に作ってリレーションとる方法もあるけど >>105
要件定義すらまともに書けない馬鹿だからSQLの基本もわかっていないのかね?
どこにも部署なんてないのだが Ruby なら、
require 'csv'
str = <<"EOT"
id 部門 販売品目
1 A りんご
2 A バナナ
3 A りんご
4 B バナナ
5 B ぶどう
6 B ぶどう
EOT
# 空白区切りで、ヘッダー有り
options = { :headers => true, :col_sep => " " }
# Hash.new で、初期値は、{ }
hash = CSV.parse( str, options ).each_with_object( Hash.new { |h,k| h[ k ] = { } } ) do | row, hash |
dep = row[ '部門' ] # department
item = row[ '販売品目' ]
if hash.dig( dep, item ) # Ruby 2.3 から
hash[ dep ][ item ] += 1
else
hash[ dep ][ item ] = 1
end
end
p hash
#=> {"A"=>{"りんご"=>2, "バナナ"=>1}, "B"=>{"バナナ"=>1, "ぶどう"=>2}}
AccessならGurupByしたクエリを名前を付けて保存しておくのが正解
サブクエ遅いから
普通に部門販売品目でソートしてから
dynasetからvbaでカウントしたら駄目なの?
sql文を捏ね繰り回すよりその方が簡単な気がするけど?
どうしてもsql文でやりたいなら
他のsql系統のスレで聞いたほうが良いと思う
accessはsqlとvbaを組み合わせて使えるので
込み入り難いからやり易い面が有る
自分は割りとそういうやり方をしてしまう
けど他のリレーショナルデータベースはsqlを駆使しないといけない場面が多いだろうから
その手の方面の人の方がsql文に詳しい人が多いと思う
sql文の質問をしても構わないと自分は思うけど一応vbaスレなんで
他のリレーショナルデータベースはもっとましな言語で使うんだよ
""とclearcontentsの違いが明らかになったな
俺なら
SELECT [部門] & [果実] AS 式1, Count("HOGE") AS DUMMY
FROM テーブル1
GROUP BY [部門] & [果実];
普通の関数を使ったSQLがコンパイルエラーで通らなくなるのは、ずっとあるバグなの?
文字列中に含まれるスペースをなくした列同士を比較したいだけなのに
DBに上げる前のデータ加工はExcelとPowerBIについてくるPowerQueryで完結させる
DB自体は何でも良い
Accessはフロントエンド
こういう感じの運用が一番融通が利いて楽
>>123
通ってたのが通らなくなったなら参照設定確認が最初の一歩 >>127
プロパティシートからでも省略できると思うよ
標準で使える関数でも省略できるから スレチですまん。
俺はVBAをやってるが上司から言われました。(うちの部署、10名のうち、VBAを作れる人は二人だけ、、、)
AIが集計をしてくれるからEXCELは必要ない時代が来るねと言ってた。
反論出来る?
高度なAIにVBAとか集計なんかやらせちゃ駄目だ。他に何もできない俺たちがやらなきゃな
>>131の者です。
EXCELとACCESSを間違えた、、、。
すみません。 >>131
〉AIが集計をしてくれるからACCESSは必要ない時代が来るねと言ってた。
来ませんけど、未来のことなので証明はできません
なので、その理由を何かをしないことに最大限反論に活用するのが最も有効です
私がプログラムを始めた数十年前から、「コンピュータが発達したらプログラマーはいらなくなる」と言われていましたが、今でも慢性的に不足してますし、更には小学校(?)からプログラムを教えると
ちなみに自社でai使うことになっても、おそらく数百万円かかって、大して使い物にならないでしょう
ITに詳しくない人は、知識もないのに夢見過ぎです
複数データを組み合わせてサクッと結果求めたり、そこそこのアプリ(特にレポート活用)作るなら、今でもACCESSは最良の選択の一つだと思ってます。2.0くらいから今までそこかしこで使いまくってます Access2010
印刷プレビューのリボンで「PDFまたはXPS」を押した際に出てくる
「PDFまたはXPS形式で発行」のダイアログを出すVBAコード教えてください。
とりあえず自分でマクロの記録でそれらの操作をなぞって
それでできたブツを思う存分手直しして
そこで発生した問題を質問した方がいいかもな
Access遣いはおばーちゃんやおじーちゃん多いから
「イチからかよ」って思われると、誰も面倒がって答えたがらない
Windows10、Office365のAccess16なんだけど、レポートプレビュー画面にボタンでもおいて、そこにイベントプロシジャーを設定したいんだけど、どうするのかな?
Access2003では簡単にできたんだけど、リボンがでてきたAccess2007以降出来なくなった気がするんだけど、どうなんだろう?
>>140
ちょっと2003でそれをやるコード上げてみ >>142
確か、カスタムメニューだったか、カスタムボタンを設定して、それにイベントプロシジャーを設定していた気がする。
アクセスキーを設定してプレビューを印刷して、プレビュー画面を閉じて、特定のフォームを起動して、特定のボタンやらテキストボックスにフォーカスを与えるとかやっていた気がする。
あれは実に便利だった。
Windows7が動いているPCが物置にあった気がするから確かめてみる。 会社で役割柄ツールを作ることになりまして、アクセスに入門しました
xlsxをインポート、それと同時にテーブルを作成するVBAは組めたのですが、同時にレコードが勝手にソートされてしまい、元データとレコードの順番が異なってしまうという問題に直面しています。
この場合、テーブル作成と同時にオートナンバーを設定するようにしたいのですが、docmd〜acimportdelimでは定義付けができません。
何か方法はありますでしょうか
インポートするxlsxは毎回ファイル名が異なる想定なので、保存したインポートを使うのは極力避けたいです
>>145
そうですよね…
最終手段としてはそれを考えています >>146
最終手段というか、RDBの行の順序に意味を持たしちゃ行けないと言う基本理念 おはようございました
新型コロナでACCESSどころでは無いですね
jetbeensのDataGripってアクセスでも使えるの?
全然ネットにもあがっていないけれど、Access2019の最新版で、DAOでレコードセットを作成して操作しようとすると
Accesが落ちるっていう現象を経験している人っていませんか?
32ビット版も64ビット版も同じ。
そうでなくて、今まで動いていたのに最新のビルドになったら突然落ちるようになった。
前のビルと番号に戻したら動くのよ。
ADOでレコードセットを作成したときはどのビルド番号でも問題なし。
Application.SetOptionの引数一覧が知りたいのですが、誰か知りませんか
ヘルプデスクがスキルアップするため、プログラミング経験積むのにAccessVBAって合ってますか?
まずヘルプデスクという職場でプログラミング経験積めるの?
合ってるかどうかはわからんけど、それはありだな。
DBとPG、両方の知識が増える。
お前らどうやって勉強したの?
おいらADO勉強したいけどどの本読んでいいかわからないから勉強できてない。
覚えるなら実務が一番早いと思いますが
独学なら簡単なものを作ってみると良いですよ
持ち物リストとか
>>161
Google。
本で勉強したのは20年前かな。 最近のAccessは条件付き書式の条件数が3つまでという制限がなくなったと聞いて、vbaで4つ条件を書いたら、怒られた。
条件数の上限の件はどうなっているの?
>>166
こんなことがかいてありましたね。
>>参考Access2010以降は、条件付き書式を3つ以上追加することができます。Access2007では、3つまでです。
もしかしたら、メニューからなら可能でVBAでは不可能なのかもしれませんね。そうだとしたら変な仕様ですね。 不可能とみるか、未対応と思うか 人それぞれ
クレバーなら文句を付けてるヒマ有ったら今できるベストな対応をして次に進んでる
おお、AccessとかVBAを勉強し始めた頃を思い出しますね。
ネットで誰かが質問すると必ず上から目線で罵詈雑言だったなあ。
知恵袋とかも酷かったなあ。
>そうだとしたら変な仕様ですね。
これが無かったら小言書かなかったけどな MS相手にどっちが上から目線なんだか
かてて加えて減らず口叩かれるとは いやはや
チラとWeb巡ったら難問袋小路問題で以前からあった疑問なのは判った
条件付き書式をVBAで制御するときに注意すること でググれば一番上に出てくるであろうサイトでは
2013をベースに「・・・すること」とか断言してるが、どうなんだ?
hatena さんのサイトでは別問題として画面がチラつくと仰ってる
そのサイトの途中にあるリンク先 ↓ (アドレス貼ると書き込みできないから省略
YU-TANG さんは既にアーカイブでしか見られないしVerも古いが
3つしかできないのを工夫で5つまで可能にしてる(らしい 詳細は未チェック)
そのサイトの最下段にあるリンク先 ↓ (ry
で、そこから誘導されたこちらもアーカイブなLebans 氏のサンプル(らしい 詳細は未チェック)
帳票フォームをサブクラス化して 云々 悪魔の技とYU-TANGさんは大絶賛してる
驚くことにアーカイブだがファイル落とせる
自分では必要に迫られたこと無かったから無頓着だったが、なるほどね みなさん悪戦苦闘してるんですね
accessは質問者に小言を言う人が多い印象。
いわゆるIT土方が多いからかねえ。
余談だけど世間に流通している商品のVBAを覗くとひどいコードの多さに驚く。そういうコードを書く人が質問者相手にがストレス発散してる気がするなあ。
ACCESSは後継者が少ないから先輩面したくても出来ないって人が多いのでは。
私も後輩が欲しい。育成では無く先輩面目的で(だからダメなんだろうね)。
Access2016を使っています
VBAを使いcsvファイルを取り込もうとしているのですが取り込み先のファイルの名前全てにピリオドが入っており、例1333.T.csv ピリオドが邪魔でファイル名を指定してもうまく取り込めません
何か良いアイデアはないでしょうか?
>>173
私はファイル選択、コピー、インポート、コピーしたファイルの削除、と言う手順でデータを取り込んでます。 >>174
ありがとうございます
ファイル名は規則性があるのでLeft Mid Rightを使ってドットをスルーして取り込みをするやり方を探してみます
>>175
こちらはファイルコピーをしてドットのない名前に変換してからインポートといった感じでしょうか初心者すぎてまだ色々理解できていないですが道筋がみえましたありがとうございます ACCESS365?でadoの話。
昨日、テーブルメンテナンス用にプログラム書いて、テストでupdateメソッド行をコメントアウトして実行したのにレコードが更新されて焦った。幸い意図した通りの更新が出来たので問題は無かったのだが、こんな事有る?
通常ではあり得ない動作ですから
accdbが破損しているか
思い違いしているか
じゃないですかねぇ
だよね、自分の事じゃなければ私もそう思う。明後日に追試してみます。
>>180
これか、ありがとう。
だとしたらupdateメソッド要らなくね?よく分からんが。 レコード移動しないけど変更を保存したいときに必要だろう
ACCESSのSQLでビット比較ってどうすればいいですか
(value & 0x10) == 0x10 みたいに特定のビットが立ってるか比較したいのですが
できるかわかりませんが、
(value and &H10) = &H10
だとダメですか?
そっか、SQLのAND演算子になっちゃうのか… &も文字列の結合演算子とみなされちゃうのかな?
&H10のビット限定なら、
(value \ 16) MOD 2
でいけそうですが、他にもパターンがあるでしょうから…
何より分かりにくいですねw
整数除算(\)で該当のビット位置を一番右にずらして、MODでそのビットを取り出します
16 じゃなくて &H10 と書く方が取り出すビットと一緒で分かりやすいですね(うまくゆくかはわかりませんが)
(value \ &H10) MOD 2
連投すみません
188案は value が long型だとして、値が負数のとき正しい結果にならないことがあります
ごめんなさい
>>188-191
親切にありがとうございます。
\とか使えるのは知りませんでした。
試してみます Windows10、Access365です。
Excelファイル上のデータに対して、ADOでアクセスして、データを取り込んでいるのですが、時間がかかります。
時間を短縮する方法はないでしょうか。
データは1ヶ月分9万件程度ですが、Accessのテーブルに取り込むのに、7分程度かかります。
テーブルのレコードの追加は、データ1件1件に対して、ADOのAddNewメソッド、Updateメソッドで追加しています。
試しに手動でAccessのインポート機能を使用して1ヶ月分のデータを取り込んでみたのですが、時間はかからなかったのですが、F20、F21など、空白の列まで要求されました。
そのためこの手段はあまり良くないと思っています。
レコードセットを一気にInsertする方法とかないでしょうか。
よろしくお願いします。
一件一件Updateするんじゃなくて、UpdateBatchでバッチ更新してみるとか
>>196
ありがとうございます
試しに1行をInsertしてみたところ、3分程度で処理できました。
ただ、.AddNewの方も、同じデータで3分-7分のくらいで処理できたので、思ったよりも処理速度は改善しませんでした。
あと、Nullだけのレコードが入ってしまうことも難点でした。
取り込みたいデータを取り込めたのと、列が30列くらいあり書き換えに時間がかかるので、一旦は今のままでいこうと思います。
ただ、今後も同じようなデータの取り込みがありそうです。
他に効率的なデータ入れ込み方法がありましたら、お教えいただけると幸いです。 >>198
ループ中の AddNew を SQL の INSERT に置き換えたのでしょうか?
インポート対象(9万件程度)を1度の INSERT で行います
Null レコードは Where で除外可能かと思います
現実的なのは SQL 直発行かインポート機能の2択かと思います
インポート機能も定義を固めれば使い物になります
効率というのは人によって変わります
普段からコードに触れている人なら VBA からの SQL 発行が効率的
コードは書かないが Access を使い慣れている人ならインポート機能やクエリ定義が効率的
両者の方法とも取り込み実行時間はほぼ同じです >199
いえ、INSERT SELECTからの列指定をして一気に入れ込みました。実験的に1列のみを。
インポート機能とSQLでの処理は速度が違う気がするのですが本当でしょうか?
テーブルへの書き込み方が根本的に異なるような気がします。
DoCmd.TransferSpreadsheet はぜひ使えるようになっておきたいですね。
エラーがよくわからないので今まで使っていませんでした。
>>200
全体で1トランザクションになるようにトランザクション張るか
UpdateBatchで更新するか試してみてくれ >>199
もう一度SQLでやってみたところ、インポートと同じ時間で処理できました。
ありがとうございます
>>201
UpdateBatchでは処理時間に違いがありませんでした
レコードセットへの書き込みに時間がかかっているのかもしれません。
ありがとうございます ウチの社内の情報システムの制限でwindowsカメラアプリが制限されてるんだけど、VBAで無理矢理動かせないだろうか、、、
いろいろ検索してみても古い情報しかなくて、、
64bit版でも出来るようなプログラムの見本とか有れば助かる。
>>206
少し言い方が悪かったかな。
端末でWEB会議してるから、カメラを使うのは問題無いんだけど、静止画を撮るソフトが入っていないもんで、静止画を撮ってDBと紐づけたいってなると、できなくて。
小規模グループでAccess使ってるから、システムに相談しても本気でかけあってくれなくて、、
それだったらVBAでどうにかならないかと思って。 >>209
もめでとう!
資格は財産!
凄いなスタンダードは >>210
ありがとう。マイナー資格のせいか、
テキストは悪評にも関わらず他に選択肢ないし、
そのテキストもアプリもやたら高いけど、
一発合格のために全部ちゃんと買ったわー。 VB自体マイナーよりなのがね。。。
参考書の著者は名のある人(武藤玄さん?)だから安心でしょ
「課題テーブル」 の項目「ファイル:添付ファイル型(拡張子は.xlsx)」をSQLで取得して(1)、
そのファイル名を変更して保存(2)しようと思っています。
(2)の処理は問題ないのですが、肝心な(1)の処理が分かりません
SQLだと以下のような感じかと思うですが、これだと、「ファイル」の名称も取得すらできないようです。
なにかしらヒントをいただけないでしょうか。
検索にヒットするようなキーワードでもかまいません。
よろしくお願いいたします。
"SELECT ファイル FROM 課題テーブル where ID = 1" (件数は1件)
ファイルを取り出したいのか、ファイル名を変えたいだけなのか、何がしたいのかがわからない。
ファイルをSELECTするとファイルが出てくるというのは奇妙な発想だな
>>214
ファイルを取り出したいんだけど、
SQLでなくクエリーでやるべきなの?
先日Access始めたから見様見真似。
添付ファイルを取得すれば、renameして保存するところはわかるんだけど。 エクセルファイルはAccessには入ってないだろ
フォルダから取り出すのか?
Accessのテーブルの添付ファイル型の項目に入っている
そのアドレスをエクセルで開いてリネーム保存すればいいじゃん
Dim MyExcel As New Excel.Application
とか使って
>>221
それ使ってるんですけど添付ファイル型ってchar型とかと同じように扱えれるんですかね、
よろしければもう少しヒントを。 ファイルをディスクのどこかに保存するのは、SaveToFile メソッドですかね?
なんか使えそうに思うけどいかがですか?
そんな新しいAccessなんて持ってないから知らん
ありがとうございます。
少しヒントが得られたかも。
明日試してみます。
添付ファイル型データのデータとファイル名取得が出来たので
参考に記載します。ありがとうございました。
http://www.proton.jp/main/windows/access-vba.html
(参考URL)添付ファイル型フィールドのファイルを開くには
コーディング抜粋
----------------------------------------------------------------
Dim SQL, fileName As String
Dim DB As DAO.Database
Dim RS,RS2 As DAO.Recordset
Set DB = CurrentDb
'なお、下記「フアイル」は「.xlsx」形式のデータ
SQL = "SELECT ファイル FROM テストテーブル where ID = 1 ; "
Set RS = DB.OpenRecordset(SQL)
'「ファイル」データ取得
Set RS2 = RS.Fields(0).Value
'「ファイル」データファイル名称取得
fileName = RS2.Fields("FileName").Value
------------------------------------------------------------------------------------ それ、SQLとRSは無駄にVariantになってないか?
OLEオブジェクト型はどうやってSQL(select 文)で抽出するの?
select文は普通に列名とテーブル指定するだけじゃないのか?
そっからどうやってデータ取得するかはどうやってDBアクセスしてるかによるんじゃね
とりあえずDAOかADOかとバージョンぐらい書け
>>228
ファイルを取得したいと言っていたのに、ファイル内のデータでよかったのか? VBSでmdbに接続してaddnewしてupdateするだけの簡単なスクリプトの挙動がおかしい。
sub や Functionにして callすると成功するくせに、subじゃなくて素のスクリプトだと何もしない。
ちなみに読込みはどっちでも成功する。
なぜ、addnewのときだけ、プロシジャーである必要があるのだろうか?
vbseditがおかしいらしい。
適当なディレクトリに保存して実行したら素のスクリプトでも成功した。
わけわらん。
SELECT文でOLE型のファイル(拡張子.docx)を読み込んで保存しようとしています。
処理を行ったところ、「ファイル『temp.xls』は内容に問題があるため、開けませんでした。」という
メッセージが出ますが、「開いて修復」すれば元のファイルと同じに見えるので
SELECT文で項目だして、書き出すまである程度できているようなんですが、
どこがおかしいのでしょうか、ご意見をいただけたら幸いです。
参考サイト
https://www.moug.net/tech/acvba/0080032.html
画像を読み込む(GetChunkメソッド)
ソース一部抜粋
'OLE型用変数
Dim bytFile() As Byte
Dim nFileNo As Integer
Dim nSize As Long
Dim olename As String
Set DB = CurrentDb
'項目「OLE型データテスト」抽出のSELECT文の実行
Set rs = DB.OpenRecordset(sqlText)
nSize = rs.Fields("OLE型データテスト").FieldSize
bytFile() = rs.Fields("OLE型データテスト").GetChunk(0, nSize)
nFileNo = FreeFile
Open "C:\Users\testuser\Documents\test.docx" For Binary As #nFileNo
Put #nFileNo, , bytImage()
Close #nFileNo VBS って、まだシステムで使えるのか?
保守されてる?
bytImage() の中身は docx に直接上書き保存できるものなのか?
>>236
Windows 10そのものがまだ使っています。 AccessからOracleに接続して、テーブル定義を取得しようとした場合、Currentdbにリンクテーブル作成してtabledefで取得するしかないですかね?
>>239
そんな訳ないだろ
お前の頭には無理ってだけだ >>240
どうやってやっているんですか?
そんなに人に偉そうにいうくらいならお詳しいんですよね? >>241
だからお前みたいな馬鹿には無理ってだけだ わからないんだろ?
教えられないのに質問スレでマウント取って
かっこいいね!
馬鹿が聞き出そうとして必死だな
元の質問が、
「しかないですかね?」
だから、
「他にある。馬鹿にはわからないだけ」
これで完結
クライアントPC複数台にコピーしてあるaccdbの更新を自動化したいのですが、上手い方法が有ったらアドバイス下さい。
今は、終了時に更新版があればコピー専用のaccdbを開く、という方法です。
時々コピーに失敗したり、更新後の起動が出来なかったり、なんかスマートに出来ません。
それぞれのPCに共有サーバーでクライアント各々に1つのものを使ってもらえば?
>>247 コメントありがとうございます。
共有フォルダに置いたテーブルだけのバックエンドや、データベースサーバーにテーブルがあり、フロントエンドにリンクして使ってます。
各クライアントのフロントエンドを更新したいのです。
フロントエンドを共有フォルダに置いて皆んなで使うと壊れやすい、50台のクライアント全て閉じてもらわないと更新できないなどの問題があり、現在のかたちで運用しています。 基本的には別ブログラム(Accessでなくてもいい)で上書きしてもらうしかないけど
タスクに登録して再起動してもらうとか
さがせばそれ用のツールとかありそうだけどな
>>250
WSHで一日一回各クライアントで実行する例があったんですが、やってる事は同じなのです。なんかスマートな方法無いのかなあ。
もう少し探してみます。お騒がせしました。 他フォームや親フォームのコマンドを実行する時,
Call Forms!フォーム名.ボタン_Click
だと動かないのに,
With Forms!フォーム名
.ボタン_Click
End With
にすると動くのは私だけ?
スレ汚しすみません、やり直し。
他フォームや親フォームのコマンドを実行する時,
Call Forms!フォーム名.ボタン_Click
だと動かないのに,
With Forms!フォーム名
Call .ボタン_Click
End With
にすると動くのは私だけ?
レポートのテキストボックスが関数を呼び出すことがあるんだけど、それを検索する方法はないですかね?
VBEをいくら検索しても、ある特定のFunctionをCallしているのがなんなのかさっぱりわからなくて途方に暮れた後にレポートのテキストボックスと気づいたときの疲労感は凄かった。
スマートに一発検索する方法ありますか?
どうも、ないようなので、for eachループを回して全部テキストにしました。
レポートの全部のコントロールを書き出したら24MBになりました。
コントロールから直接Callするのはお行儀が良くないですね。
DoCmd.PrintOut
同じコードなのに、一方ではちゃんと複数枚印刷して、もう一方では常に1枚しか印刷できない。
ググると似たトラブルが見つかる。バグなんだろうか?ご存じの方いますか?
Access365 Windows10です。
Excel上からVBAでDAOにてAccessのクエリのレコードセットを取得しています。
Access上のクエリで表示されるレコード数と、Excel VBA DAOから取得したクエリのレコードセットのレコードの数が異なり、原因がわかりません。
それぞれのレコード一覧を出力してみると、あるフィールド(IIf(・・・,”対象外”, “督促対象”)としている部分) の値が、Access上のクエリでは「対象外」、Excelから取得したレコードセットでは「督促対象」となっているため、抽出条件が誤認識されてレコード数が異なることに気がつきました。
クエリの他の抽出条件にワイルドカード等を使っていないと思います。
クエリをDAOで取得した場合に、違いが生まれる原因を推測できる方はいらっしゃいませんでしょうか? 回避策があればお教えいただけると助かります。
>>259
Accessのテーブルを、Excelからのリンクテーブルにしているものがあるのですが、クエリを開いている状態で、ExcelからDAOでレコードセットを取得すると、テーブルにしているExcelファイルが自動で開かれます。
その状態で取得したレコードセットの内容がおかしいことに気がつきました。
なぜレコードセットの値が異なるのかは、不明なのですが、テーブルにしているブックが開かれているとエラーを出力するようにして、回避しました。 基本的なことで申し訳ないんだけど
https://www.helpforest.com/access/amv_vba/ac080004.htm
に書いてある開いてるファイルのバックアップとるコードで
strNameCopy = Left(strNameMoto, Len(strNameMoto) - 6) & "_" & Format(Now, "yymmdd") & ".accdb"
ってのがあるんですが Left(strNameMoto, Len(strNameMoto) - 6) の意味がわかりません。なぜ -6 なんでしょうか?
それと、
Format(Now, "yymmdd") だと 210404 になりますが”yy_mmdd_hhmm” としました
ここを 21_0404_17h15m とするにはどうしたらいいですか?
hやmの入れ方がわかりません メッセージボックスは自動で閉じないしWSHもmessageboxtimeoutAもうまくできませんでした
通知の代わりに小さいフォームを0.5秒ほど表示させて閉じたいのですが、どのように記述したらいいですか?
>>262
-6は元ファイル名の".accdb"を取り除いてると予想。
"yy_mmdd_hh""h""nn""m"""で良いかな。
うまく行かない場合はグーグル先生に聞いてみて。 >>263
ちっさいフォームをダイヤログ形式で作成して、タイマーを500m秒に、タイマーイベントで
DoCmd.Close acForm, me.Name
だとどうかな。 >>264
取り除かないと拡張子が2つになってしまうからですね
そうしないと拡張子が2つついてしまうんですね レポートの詳細の一番下に線引くのってどうやるの?
フィールドや仕切り線だと線の真ん中が指定位置にくるようで、線の太さ分はみ出てしまう
詳細の最終行終わりにだけ線を引く方法が有るのか、知らんかった。
私はグループフッタの上に線を配置します。
>>269
VBAでEOFでVisible=trueにする >>271
図形の移動ってこう書くらしいんだけど
Sub TopAndLeftSamp1()
Dim Sh As Shape
For Each Sh In ActiveSheet.Shapes
Sh.Top = Range("B2").Top
Sh.Left = Range("B2").Left
Next Sh
End Sub
それはどう書くんですか?
太い線でもはみ出ないように一番下にくるんですか?
>>270
終わりにだけ、じゃなくて仕切り線を詳細の高さの最後に、はみ出ないようにおきたいということです >>272
それExcelじゃん
Accessのレポートの話じゃ無いの? >>273
ホントだ
ネット検索してコピペしたから間違えた
ACCESSでも似たようなので線書いたことあるんだけど
マウスで一番下にやってもラインの真ん中が一番下にくるみたいで、下半分がかけてしまう >>269
LINEで描けば自由自在
斜め線も描けるから試してみ
(あまり出番はないけど) ACCESSに将来はあるんだろうか
ライバルになるファイルメーカーもコロコロ社名変わってあやしいしもはや大規模事業者に焦点をあててるっぽい
mysqlとWeb系でつくるのがスタンダードになりつつあるの?
軽く勉強しようとしたけどVBA程度の知識じゃわけわからんかったというか何を勉強すればいいのかもよくわからん
sqlにhtml とcssも覚えなきゃならなくて
レポートとかどうやってつくるのかわからんし印刷関係はブラウザに依存するらしい
上記でGUIやレポートまでつくれるのかすらわからない
>>277
将来は分かりませんが代わりのツールは少ないですね
Officeは最低10年間はサポートされるのでスグには無くならないでしょう
たまにweb系の話が出るのはデスクトップアプリかブラウザアプリかの話ですよね
個人的にAccessの代わりにweb系というのは少し飛躍している様にも思えますが
どの基盤を使うかは用途や運用保守のし易さによって決めるものですのでその人次第です Access全盛期と違って、開発環境やDBが無償で提供されているし
htmlをテキスト出力するだけできれいなレポートも作れる
UIを自分でいじりながらデータ入力していくような人種にはいいんだが希少種だろう
>>277
Accessはデータベースと言うより帳票ツールだよ
FileMakerはデータベースとしての機能が充実してるがFileMaker使うぐらいならMySQL、PostgreSQLで代替えが効く
どっちかと言うとFileMakerがライセンス料金の高さも有って残らないと思う FileMakerより(MySQL or PostgreSQL)+Accessで安くデータベース&クライアントシステムを作れると思う
データベース部分よりもACCESSのフォームやレポートをつくる機能が貧弱なんだよね
>>282
MySQL or PostgreSQLに以降するのってどの規模になってから?
エクセルの延長線で使うレベルだとACCESSのままでいいですよね? ファイルメーカーはフォームやレポートの機能がリッチなの?
ファイルメーカーが良いかもよ。
>>284
リッチどころじゃないよ
ACCESSがwin95
FMは10 >>283
>>Excelの延長線上
Access mdbはある一定容量で破綻するからね
Excelで収まってるレベルでもMySQL Community EditionやPostgreSQLに移行した方が無料で使える訳だし
Excel,Access自体ライセンス必要だしライセンスフリーで使えるなら、それに越した事無い FileMakerのメリットはWebサービス公開がし易いって所だよな
そういう使い方するにしてもLAMPとか使う方が安く簡単にWebサービス開始出来る
>>285
ファイルメーカーの45日無料評価版をインストールして少しいじってみました.
いまさら移行を考える程のメリットは感じられませんでしたが,確かにUIはシンプルで使いやすそうでした. >>289
>>いまさら移行を考える程のメリットは感じられませんでしたが,確かにUIはシンプルで使いやすそうでした.
それでライセンス料金は高い
あまりメリットが無い >>287
PostgreSQL使うとして一度設定してればACCESS使う感覚でレポートやクエリをつくれるんですか? >>291
フロントエンドはAccess利用する
PostgreSQL固有のUIツールは無い >>292
ACCESSをフロントエンドで使う場合、という意味でした >>294
PostgreSQLのテーブルにAccessからLinkはるだけ
そこでクエリー駆使しながらFormやレポート作れる
FileMakerより安く作れる >>293
桐の価格を調べてきました
40台で使用するために1,115,400でした
機能がどうとか以前のお話しでした >>292
Accessの外部DBなら親和性の高いSQL Serverが多数だとは思います
Expressなら無料でライセンスも商用OKです
機能面もAccessで扱うDBサイズならお釣りが来ます
あえてPostgreSQLを推す理由を教えて欲しいです
無料以外のメリットはありますか? >>298
Access案件でLinuxサーバー導入はかなりのレアケースだと思います
Linuxに明るい個人ならそれでも良いですが
一般的な企業では運用リスクと保守費用の面から現実的ではないのです
Access案件でその様な提案をしたらほぼ蹴られてしまいます
技術蓄積についてもAccess+PostgreSQLよりAccess+SQL Serverの方が遥かに多いです
そもそもこのスレに相談に来ている方はLinuxサーバーを前提に話していないと思いますよ >>Access案件でLinuxサーバー導入はかなりのレアケースだと思います
Linuxに明るい個人ならそれでも良いですが
>>一般的な企業では運用リスクと保守費用の面から現実的ではないのです
Access案件でその様な提案をしたらほぼ蹴られてしまいます
.NET COREとか提案したら蹴られるのか?
.NET CORE案件も相当数出てるよ
LinuxサーバーでDB,APサーバー運用するのは今や常套手段でしょ
>>技術蓄積についてもAccess+PostgreSQLよりAccess+SQL Serverの方が遥かに多いです
Windows製品ゆえ多いってだけだと思うよ
>>そもそもこのスレに相談に来ている方はLinuxサーバーを前提に話していないと思いますよ
Accessフロントエンドにした場合、サーバー側がWindowsサーバーしか前提としか無い、てのは狭量以外の何物でも無いと思うよ
Access案件でのサーバーなんて、(是非は別として)テキトーなPCの共有フォルダでのaccdb(mdb)の共有で賄ってるだけなんて珍しくも無かろう
中小企業にWindowsサーバー提案するってコストかかって仕方ない
CALの価格を知らないのかな?
中小企業ほどLinux導入し易いのに
>>301
適当なサーバーだから無償のLinuxで十分 >>300
.NET COREを挙げられてますが、Access案件での話です
Linuxサーバー自体は否定しません
実際Access外案件では昔より増えました
単純にAccessの外部DBにPostgreSQLを推す無料以外のメリットが知りたかっただけです
Linuxサーバーという予想外でしたが
長い間Access開発にも携わっており現実はほぼWindowsなんです
確かにAccessの機能自体は様々なデータソースが扱えますから
その意味では狭量と言われてしまっても仕方ありませんね >>304
CAL払える企業なら問題は何も無いよ
現実はCALで苦しんでる中小企業が多い
そこを見越して提案出来るかだと思う サーバーも含めて無料で構築したいだけなのにな
Windowsサーバー使ってCAL払い続けるなんて皆金持ってるんだなw
コピー中のExcelのデータをACCESSにいれるときは、テーブル自体を表示させないとペーストできませんか?
>>307
インポートが簡単です。
コピペは知らん、すまん。 >>310
ExcelデータのインポートをAccessから実行すれば良い クリップボードのデータを貼り付けるなら手作業をなぞってテーブル開いて新規レコードに位置付けしてペーストすれば良さそう。クリップボード操作するapiサンプルコードが何処かにあったような、すまんまた明日。
試してないよ?
Excelで貼り付けたいテーブルと同じレイアウトのデータをコピーしてある状態で
DoCmd.GoToRecord,,acNewRec
DoCmd.RunCommand acCmdPaste
すると張り付いたりしないかな。
OLEオブジェクトって手動じゃないと挿入できないの?
VBAでの挿入を試みているんだけど、似て非なるオブジェクトが作られてしまう。プロパティの数が少し少ない変なオブジェクトが作られて困ってる。
とりあえずレポートにオブジェクトをつくるのはCreateReportControl メソッドを使えばできるんだけど、リンク親フィールド、リンク子フィールド、値集合ソース、値集合タイプがないオブジェクトが作られる。
そのうえ、OLEタイプが読み取り専用だからOLEの設定が出来ない。
どうしたらいいのかな?
>>320
手動なら非連結オブジェクトフレームを挿入するとオブジェクトの種類のダイアログが出てくるので、そこで種類を選びますね。
この作業をVBAでやっておけばいいということですね。
ちょっと読んでみますね。 ACCESSで在庫管理や備品管理作っても出先でみることができません(Androidスマホなので)
みなさんどうしていますか?
Webシステムを組むほど大きいわけでもないので予算もありません
適宜レポートを作っておきExcelやPDFにしてクラウドにいれとくとかですか?
>>325
リモートデスクトップとかTeamViewerでWindowsにログインかな? >>325
データベース更新後にEXCEL作ってクラウドに保管するのを自動化すれば充分な気がしますね。 そもそも、Windows 用のアプリはパソコン用だから、インターネットで使えない。
それに、文字コードも違うから読めない
インターネット用の表計算アプリを使えば?
ストアでMDBを検索したら見れそうなやついっぱいあるやん
>>325
Webアクセスする目的ならAccessよりFileMakerになるよ
そこまでするならデータベースをMySQLかPostgreSQLに移行してVB.NETでアプリ作る方が良いけどね クエリーが上手く作動して、ニコニコしながら、sqlビューへ切り替えてコピーして、VBEでペースト。
余計なカッコを取り除いてdebug.printに打ち出すと結果が違うことがある。
なにが原因なのかなあ?いまはADOでやってるけど、DAOならうまくいくもんかなあ?
クエリーのSQLとADOのクエリーが仕様が違うのかなあ?
同じMS謹製だからANSIとかなんとか気にしなくていいのかと思っていたけど、違うのかな?
>>332
ファイルメーカーからハードル上がりすぎだろ >>334
FileMakerはライセンス料高いからね
Visual Studio習得してアプリ作れるならその方が良い
Webサーバーは必要だけどね >>335
VB.netでwebサーバとか完全にもう別物ですやん >>336
高いライセンス払う余裕有ればFileMakerで良いよ
現実は高いライセンス料払いたく無い企業が多いからね
FileMakerが普及しないのもこれが原因 だからって一から自分でつくるってのは飛躍してない?
家建てるときにどこのメーカーがいいですか?
に対して自分で建てろといってるようなもん
>>339
自分で作れ、とは言って無いよ
ソフトウェアハウスの手を借りれば良い >>341
馬鹿には無理なのだから他人に金を出して頼むしかないだろ
馬鹿のくせに金を出さずに人にやってもらおうとか、ゆとりか? >>341
ランニングコストってのが有ってだな、、
FileMakerだとライセンス1回切りじゃ無いから >>343
ソフトウェアハウスでも保守料かかるだろ
基本的には自分で改変できないし Web化って時点でファイルメーカー選ぶしか無い様な、、
外部からアクセスするしないが重要
外から見たいだけなら、リモートデスクトップでいいんじゃなかろうか
ACCESSで在庫更新したあとOneDriveフォルダにEXCELエクスポートします。
あとはスマホでもタブレットでも参照可能です。
>>345
「Web化って時点でファイルメーカー選ぶしか無い」
なぜこういう嘘を書くのか。それとも本当にそう思っているならそんな頭の弱い人は書かなきゃいいのに。 >>352
とっくの昔にお亡くなりになったような記憶が… ちょっと前までGoogleでデータベース・サービス持ってたのにいつの間にかなくなっちゃたな。
最近VBAよりGASが面白くなってきたので手を出そうと思ってたのに。
やはり無料じゃGoogleも厳しいか。
レポートやフォーム作るときに、拡大できないの致命的だよね
win標準の拡大ではぼやぼやで目がたえりれない
エクセルあたりでは普通に拡大できるのになあ
これだけでファイルメーカーに乗り換えようと思ったりしてよ
馬鹿がファイルメーカー、ファイルメーカーとしつこく繰り返しているから絶対に使わない
FM→ACCESSときたけど
レイアウトつくるのはびっくするくらい大変
そして頑張っても前時代的なのになってしまう
金額の問題だけで以降したんだけどね
ACCESSは365についてるから無料みたいなもの
FMは約6万
サブスクは5ユーザ からのみで年¥96,000
というびっくりプライス
>>361
フィールドの位置とか外部ソフトでできるの? ACCESSでA4に収まるように8ptくらいのフィールド配置してたら目が痛くなって具合が悪くなったな
>>363
ノートだとそうなんかな…
自作のときはずっと9ptがデフォだけど何ともないな…
拡大鏡でも使った方が楽な気がする 右側のプロパティって時間小さすぎるよな
レイアウト配置よりこっちをでかくできるようにしてほしい
あれもうちょっとどうかならないんだろうか
一日使うにはストレスがすごすぎる
ユーの眼球レベルにあった
でかくて低解像度のモニター使え
共有ファイルとして使う場合
処理がバッティングすると、待ち?っぽい動きするんだけど、この待ち時間を短くとか長くとか設定できない?
5年ほど前に作った製品ラベルのレポートを修整しようとしたら、老眼は進んでるわ液晶の解像度は上がってるわ、マウスカーソルの移動量を増やしてるわで大変だった。デザインビューの拡大出来るようになると良いですね。
ファイルメーカーの体験版使ったらACCESSに戻れなくなってしまった
ACCESSになんかメリットある?
馬鹿がファイルメーカー、ファイルメーカーとしつこく繰り返しているから絶対に使わない
>>375
コストかな。
田舎の工場で低価格な電子部品作ってる。30台くらいのパソコンで使うからファイルメーカーなんてコストは現実的ではないんです。 ファイルメーカーとAccessは得意分野が全然違うのでは?
>>380
ACCESSでうまくいかずもやもやするたびに体験版つかってみて
ライセンス料なんかが不安でACCESSにもどるってのを繰り返してる
ACCESSが現代的なGUIになってくれて
ある程度はコード書かなくてもできるよえになればいいんだが え!?ひとりでも最低
じゅじゅじゅじゅじゅうまんえーん!?
ちなみにキントーンもこの商法みたいだな
ACCESSはUIがクソなのと共有がほぼできない、ちょっとしたことでもコード書かなきゃならない、その代わりに激安ってことなんだろうな
逆にそこらを改善するのはこんくらい金とらなきゃできないことなのかもしれん FileMake使いのやつって
Access使いを見付けると必ず攻撃してくるよね
なんで不況に熱心なのかな
馬鹿
↓
FileMakerはコード書かなくていい(キリっ)
いくらなんでも高すぎる
あれって全社員にipadもたせてリアルタイムでデータ共有するような大企業向けだろ
とはいえほかにACCESSしか選択肢がなくてACCESSは手間がかかり過ぎるが
ACCESSは実質開発が停止してるからな
Web公開手段を再度実装したらFileMakerなんて駆逐出来るのに
>>373
それ元がボケてるんやな
ディスプレイ買い換えるしかないな
うちは拡大してもクッキリやで >>389
んなことないだろEIZOのFLEX Scanだし
ぼやけるって言葉の認識だと思うが
ベクターとラスターの拡大みたいなこと
拡大鏡だと単純拡大だからガタガタのぼやぼや
スマホの拡大縮小だとおかしくならないよね?
ソフトに標準で拡大縮小が実装されているならそれと同じできれいに拡大できる
ACCESSはないから拡大鏡つかうことにかるから汚いしつかいにくい >>390
〉拡大鏡だと単純拡大だからガタガタのぼやぼや
単純拡大だからガタガタになるので正しい
しかしぼやぼやにはならない
頭(目?)悪そうだなこいつ 文字が
こうなるのをボヤボヤといってるんだと思う
MSゴシック使ってるやつはわからないかもしれないが
アンチエイリアス入ったフォントで拡大鏡使うとボヤボヤになるよ
getobjectでVBSからmdbへ接続してACCESSのモジュールを書き換えているんだけど、プロシジャーをチマチマ書き換えるのが面倒になってきたので、
既存モジュールの全行を削除してからModule.AddFromFile メソッドで新モジュールを一括して書き換えた。
mdbを保存する段になって「ファイルの共有ロック数が制限を超えています」と怒られた。
たしか、コミットトランスするんだよなあ、と資料を読んでみたが、それが出来るオブジェクトが存在しない。
一体どうしたらいいのかな?
>>394
Microsoft 365 for businessを使用してます。
ACCESSはしょっちゅう壊れるからVBSで出来ることはVBSでやりたいですね。 >>395
そんな面倒なことw
2.0使いはじめた頃は間違った使い方してたのもあって壊しまくったが、ここんとこ壊れたことなどないぞ >>396
フォームのコマンドボタンの位置をほんの少しずらしただけで壊れこともあるし、最適化で壊れたこともある。
最近もどっかの記事でそのような記述を見たような気がする。
VBSはコードを見るのも書くのもサクサクだからお気に入りだよ。重たいACCESSを開かなくていいのは気が楽だよ。
でも、関数がVBAと少し仕様が違うとか面倒なことがあるのが玉に瑕だなあ。 >>393
mdbからaccdbにすると壊れ難くなる気がします。 >>398
面白そうですね。参照設定を変更するくらいで出来そうですね。だめなら宣言文にDAO.を加えれば出来そうな気がします。
今はほぼ全ての改造をVBS経由で行えそうだから、それで行き詰まったらやってみます。 >>393
共有ロック数って言ってるんだから
VBSからmdbへ接続が何度も繰り返してるか間違ってるんじゃね プロシージャーを書き換えるプロシージャーを書くのって面白い?
>>400
共有ロックの問題はMaxLocksPerFileを増やしたらあっさり解決しました。
>>401
手作業でプロシジャーを変更していたときより遙かに楽になりましたし。仕事が楽になる過程は面白いです。
なによりもAccessと違ってサクサク動くのがVBSの最大の魅力です。 一括でモジュールを書き換えるのすら面倒になったのでLoadFromTxtに切り替えた。
これならフォームやレポートも丸ごと移植可能だわ。
オフィス365でデーターを保存したときにウインドウの上のバーの箇所のタイトルに
「ファイル名+保存しました・・」って表示になるけど、
これ出さないように出来ないのかな?
ウインドウのタイトルが変わるとRPAが誤作動をおこすので
いらない機能をつけるなよといつも思います。
>>404
誤爆でした。ここAccessなんですね。。 そのVBAを操作する人間の操作を代行させるのがRPAなんやで
レポートを変数「i」回だけ複数印刷しようとして、
PrintCountやFormatCountを使ったのですが、
「i」とPrintCount・FormatCountが一致しません。
PrintCountやFormatCountって、
ページ変更・ヘッダー・フッターなどでも、カウントが増えますか?
アルゴリズムそのものが間違いでしょうか?
[タイプ]が勝手に[タイプ]になってしまう。
[ ]で囲んでるのに。なんぞこれ。
あれ、今日は勝手に半角に戻らない。
再起動するだけで良かったのかも。
独り言スマンね。
解決済みという事ですが
名称の勝手変換は[名前の自動修正]を有効にしていると起きます
初心者向けの親切機能ですが、オブジェクト名などを細かく定義している場合には逆に足枷になります
名称変更時に自動トレースしきれずバグを生み出したりします
ご参考までに
いや、再発しました。
名前の自動修正、調べてみます。
Windows11+ACCESS365の環境で発生してます。
タイプ(半角)と入力しても行を移るとタイプ(全角)になっちゃう。[ ]でくくっても駄目。
Windows10+ACCESS365では[ ]でくくると勝手に全角にはならないので、Win11Betaのせいっぽいです。
アプリの修復試してみて、駄目ならWin11Betaのフィードバックに上げます。
どっかに全角のタイプってオブジェクトがある(あった)んだろな
そういえばWIN10でNLSのバージョン変わって全角半角の判断がおかしくなる問題があったな
ちょっと試したWin10の詳細バージョン書いてくれ
Win11のNLSってどうなってるんだろ
すみません、見逃してた。
Windows10の21H1ですね。
NSLがなんの事かわかんないですが、確かに前にも経験したトラブルの様な気がします。
明後日スタンダード試験だけどやばい模擬問題正答5割だわ
外部からaccessの特定のレポートを開く方法ある?
外部って?
普通にCOMで操作すれば良いんじゃねえのか
パススルークエリのパラメータをaccess外から設定する機能教えてください。
>>425
データベースに
ドライバなしでvbaで接続する方法ってないの? レコードが存在しない場合に INSERTを動作させようとしてます
FROMが無いと、演算子がありません、となるため
ダミーの FROM を入れましたが(Oracle でいうところの dual)
レコードが追加されません
INSERT INTO t_table(id, name)
SELECT 1, "name"
FROM dummy
WHERE NOT EXISTS(
SELECT * FROM t_table WHERE(id = 1)
);
Access の INSERT での FROM や WHEREに、何か制限などありますでしょうか?
直接の返答じゃないけど、SQL一発書きじゃなきゃだめなの?
事前にレコード数チェックして分岐じゃだめなの?
UPDATE と組み合わせて、SQL一発を考えてます
無理であれば、おっしゃるように分岐かなと
ちょっと気になったので手元で実験してみたけど、dummyテーブルが存在して空ではないときには
(多分)431の想定どおりの挙動をしていると思う
バッドノウハウ臭いので、おとなしく事前チェックして分岐かなぁ
まぁAccessのSQLって変だよね
access はupdateいっぱつで初挿入もできたはず
しゅきーのヌルを上書きする感じで
>>435
さすがにそんなことはないと思うが、ちょっとサンプルコード書いてみてくれ >>436
選択クエリは更新できる
UPDATE TableA RIGHT JOIN TableB ON TableA.ID = TableB.ID
SET TableA.ID = [TableB]![ID], TableA.Data1 = [TableB]![Data1], TableA.Data2 = [TableB]![Data2]; >>431
values (1, "name")
じゃ駄目なの >>438
単純にinsertするだけならそれでいいんだけど、existsを使って条件付けようとしてるのでvaluesは使えない(エラーになる) それ自分でDUALという名称でテーブルを作って1レコード入れておけば出来るよ。
OracleのDUALも実体はそんな感じだったと思う。
>>437
更新はできるけど、存在しない行を更新しようとしたとして
その行を新規追加することなんてないだろ...
と思ったけど、追加されるのか
ACCESS無茶苦茶しやがるな
リンクテーブルに対してでも追加しやがる
SQL ServerだってFromでJoinしてUPDATEできるけど、
さすがに行が追加されることなんてないぞ
エラーの原因が分からない? >>441
Access的には「更新可能クエリ」はテーブルと同等の扱いなのだろう >>444
Viewが実テーブルとほぼ同じ扱いってのは別に問題じゃない
UPDATE文でテーブルの行数が変わるのが無茶苦茶なんだよ SELECT * FROM TableA RIGHT JOIN TableB ON TableA.ID = TableB.ID
これの更新だから行数は変わっていない
>>431
SQL一発では出来ないよ
残念だが
DOループで回す事になる もうちょっと俺を信用してもええんやないかと思ったが
出来たんならええか
データベースに対し、レポートを外部データの取込で追加するのですが、
この操作をGUIでなくコマンドで行う事は出来ますでしょうか。
>>452
返信ありがとう
やっぱ基本はDBごと差し替えになるんですね・・・
最新を管理しないといけないということですか >>450
レコード入れずに試してみてました
あとで確認してみます >>451
access起動コマンドラインオプションに
/x マクロ名
で自動実行可能
向きが逆だけどオブジェクトのコピーでレポートをコピー出来る >>451
DoCmd.TransferDatabase acImport >>440,450
ありがとうございます、確認しました
dummy テーブルにレコードを入れて動作しました
INSERT INTO t_table(id, name)
SELECT 1, "name"
FROM dummy
WHERE NOT EXISTS(
SELECT * FROM t_table WHERE(id = 1)
); VBAって、サポート切れてんの?
企業とかこれから、多数のツールどうすんだろうね。
サポート気にするような部署でvbaを採用するだろうか?
VBAって単独の製品じゃないんだが
そもそもVBAがサポート切れってどこの情報だ?
OneDriveにコードをバックアップして直接開いたところ
こういった線が付きました
Office2016 Proなのですが設定等でVBエディターでも表示できますでしょうか
またお恥ずかしながらこの線の一般的な名称も教えて頂けませんでしょうか >>461
何で開いたのかは知らんけど、AccessとかのVBAエディタには、そういった今どきの便利な機能は無いかと
一般名称かどうかはしらんけど、VSCodeとかの設定では Indent Guide でひっかかるんじゃないかな >>462
ありがとうございます
名称のほうぐぐってみまして、確かにVS関連の情報が多く出てきました
大変便利ゆえに残念です! Microsoft 365 Access Runtime ダウンロードリンクが動作してないのですが
ダウンロードできた方おられます??
アクセス2010でVBA内でエクセルのブックを操作するためにブック選択ダイアログを開こうとしています.ブックが存在するフォルダーはc:\x\y内にあります.
それでChDirでGetOpenFilename実行時に開くフォルダーをc:\x\yにしたいのですが,規定のドキュメントフォルダーが開きます.
Debug.Print CurDirは"C:\x\y"を返しますので,システムが認識するカレントフォルダーが"C:\x\y"に変わっているのは確認済みです.GetOpenFilenameが開くフォルダーをGetOpenFilenameに変更できないことが問題です.
sub test
ChDir "C:\x\y"
Debug.Print CurDir
Set exApp = CreateObject("Excel.Application")
ChDir "C:\x\y"
Debug.Print CurDir
res = exApp.GetOpenFilename("Csv Files (*.csv), *.csv")
end sub
ところがエクセルのVBA内でtest2を実行するとフォルダーc:\x\yが開きます.
sub test2
ChDir "C:\x\y"
res=aplication.GetOpenFilename("Csv Files (*.csv), *.csv")
end sub
アクセスのVBAのから操作するとうまくいきません.解決策はないでしょうか?
間違えました。
GetOpenFilenameが開くフォルダーをGetOpenFilenameに→
GetOpenFilenameが開くフォルダーをc:\x\yに
https://hironimo.com/prog/excel/vba-excel-open/#:~:text=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E9%96%8B%E3%81%8F%E3%81%AB%E3%81%AF,%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A7%E9%96%8B%E3%81%8D%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82
WorkBooks.Open >>468
GetOpenFilenameでダイアログが立ち上がったときのフォルダーをc:\x\yにしたいという意味です。 >>470
ありがとうございました.
FileDialogだとカレントフォルダーで開いてくれました. >>472
ありがとうございます。この説明はとても親切ですね。よくわかりました >>466
Excel.ApplicationのDefaultFilePathを設定していったん終了したら、
次からそこで開くっぽいぞ
Set exApp = CreateObject("Excel.Application")
exApp.DefaultFilePath = "C:\x\y"
exApp.Quit
Set exApp = CreateObject("Excel.Application")
res = exApp.GetOpenFilename("Csv Files (*.csv), *.csv")
こんな感じか
実行したらエクセルのオプション変わっちまったww
デフォルト何だっけな 初歩的な質問でお恥ずかしいのですが教えて下さい
面倒な計算や処理をして値を返す関数Aがあった場合
その戻り値を判定したい場合
If A = 1 or A = 2 then
と記述するとaccessは 2回処理することになるのでしょうか
それでしたら仮に変数(V)を用意して、一旦
V = A
のように格納してから
If V = 1 or V = 2 then
と記述したほうが処理的には一回で済むという解釈になりますでしょうか
すみませんがご教示頂けたらと思います
すみません、試してわかりました。
後者は一回で済みました。
質問することでその後すぐ簡単な確認方法を思いつくことがよくあります
お恥ずかしい。スレ汚し失礼しました;
ちょっと違う話だけど、VBAにもOrElseやAndAlsoが欲しいなと思うときはある
SQLの勉強をさいきんはじめました
動的SQLによる数独の超高速解法
というのを読みました
動的にSQLを生成するため
・一つはJDBCを使う方法
・もう一つはストアド・プロシージャを用いた方法
云々って書いてあります
これらって、アクセスのSQLでもできそうなものでしょうか?
(過去に話題として出てたらごめんなさい)
できそうならやってみようかと
茨の道ならあきらめます
2つとも分からんけど、VBAが使える環境なら動的SQLは可能なはず
SQLとは、使用人から経営者になることだ
今まで自分で作業してたのをしなくてよくなる
使用人に、「こういうのを出してくれ」と
言うだけでよい
数独についてであれば、今まで
総当りするプログラムとか
条件判定とかを自分で考えていたが
SQLならそうしたものは自分で考えなくてよい
勝手に総当りして勝手に判定してくれる
・・・ということが書いてありました
これって、既存のプログラムの要件を
SQLで表現できれば中身は考えなくてよい
ってことですよね けっこうおもしろいかも
経営しなくてもお金が稼げるSQLがどこかに書いてあると良いのに。
>>479
JDBC Driver で Access MDB に接続できる
つまりワカラン 各DBで使えるSQL構文一覧表
(ROLLUPは jet使えない oracleはokとか)
のページが昔あったのに
今見たら見あたらなかったわ
総あたりする場合、SQLはどうやって
候補を管理してるんだろ?
ふつうにメモリ上に持ってたら
メモリが足りないような
数字の書かれたパネルがあります
このパネルのマスをいくつか
ぬりつぶし、残った数字の積が、
たて・横のどの列も12になるように
してください
2523
6257
5262
2334
これぐらいの規模の問題で
練習したほうがいいかも
ぬりつぶしは1に置き換える
動的SQLっていうから
DBエンジンにSQL投げる
↓
その結果を受けて自分を書き換えて
再度新しいSQL投げる
↓
望む結果になるまで繰り返す
みたいな話を期待したら
拍子抜けだった
>>487
SELECT 解答
FROM すべてのあり得る盤面
WHERE 今回の条件
だから
まず盤面を1行にして
2523625752622334
と表す
すべてのあり得る盤面は
2523625752622334
2523625752622331
2523625752622314
2523625752622311
〜
1111111111111111
だけどこれをどうSQL文の中で
表現すればいいのかわからん VBAのコード内の文字を置換するプログラムをVBAで行うことはできるでしょうか?
置換の組合せが複数あるので一つずつCtrl+Hで操作すると間違いそうなので,
置換前文字列と置換後文字列の配列を書いて,それを順に実行するようにしたいのです.
自分のコード内に当該置換文字列をがでてくるので,その回避も考えないといけないですが
よろしくお願いします
ACCESSにもApplication.VBEがあるっぽいから、エクセルとかと同じようにできるんじゃね
そもそもコード内をそうそう置換するって状況がよくわからんがな
>>494
オブジェクト名を修正すると,名前の自動修正機能で,オブジェクト間の整合性は保たれます.
例えば,Aクエリー内でBテーブルを使用していて,Bの名前をCに変更するとA内のBテーブル名もCに自動的に修正されます.
ところが,コード内でオブジェクト名を引数に使用している場合(DoCmd.OpenQuery()やQeryDef()など)は,自動的に修正されないので
コード内の文字置換で修正するしかありません.
オブジェクト名をより統一的にしたいとか,あるルールで短くしたいなどの事情です.
でも本当にコードを使ってコード内の文字置換できますか?
「エクセルとかと同じようにできる」とのことですが,エクセルのVBAでできる方法を知りません. >>494がApplication.VBEってヒント出してくれてるのに自分で調べる気は無いの? >>496
いままでApplication.VBEとVBAの違いをしりませんでした.
Application.VBEで検索して,オブジェクトであることをしりました.
できそうな気がしてきました.
調べます >>497
お前みたいな馬鹿は、方法自体間違えていると思うよ >>498
正しい方法言ってみな。
言えなきゃ超バカ決定。 やっぱり馬鹿だったか
馬鹿に馬鹿と指摘すると怒りだす
>>494,>>496
497ですが、
Application.VBE.ActiveVBProject.VBComponents(i).codemodule.ReplaceLine(j,"修正後コード文字列")
を使ってできました。 名前は文字列だろ!
VBAの提供するオブジェクトは大抵コレクションで管理されているだろ!
お前の作ったオブジェクトも管理できるようにしろ!
初歩だぞ初歩!
>>507
人のこと馬鹿、馬鹿ってほんとにうるさい奴だな
今回のアプリは俺しか使わずオブジェクト名変更も今回限りが確定しているんで、
オブジェクト名をデータ化できるCreateQueryDefなどを使う手間を省いてクエリデザイナーを使っているだけ。
そういう事情も含めて「もういいよ」と書いたんだけど、読み取れんわな。
お前は実生活で他人の事情を汲み取る力が弱くて他人から避けられてるだろう。
実生活では流石に馬鹿と面罵しないとは思うが態度にはでてると思うよ。
エクセルVBAのようにワッチョイ付きならNG登録するんだが。 味噌も糞もいるのがこういう掲示板の特徴
それが面白ければ来るし退屈なら来ない
文句言うのはカッコ悪い
アプリケーションタイトルについて質問です。
今使ってるmdbのタイトルが2種類あって、「Access」のものと「ファイル名:データベース-フルパス-Access」のものがあります。
全部後者のタイトルにしたいのですが、設定の仕方がわかりません。
ヤフー知恵袋の「Accessのタイトルバーにファイル名を表示させることはできますか。
Excelでは表示されるのですがAccessでは”Access”としか表示されず少し不便なので、、」
を読むと何の設定もしなくても後者のようになると書いている人がいます。
どうしたらそうなるのでしょうか?
後者のやつは別にAppTitleとかで設定していませんので不思議です。
>>518
いろいろ試したけど、結論は超簡単。
ファイル→オプション→現在のデータバース→アプリケーションオプション→ドキュメントウィンドオプション→タブ付ドキュメントをon
これでファイル名とパス名が表示されて複数のmdbを起動しても混乱しなくなりました。 OS:win10
Ver:365 16.0
フォルダの中に複数のExcelファイルがあります
accessで全てのエクセルの同一セルの文字をテーブルにまとめたいのです
Accecc vba エクセルの特定のセル
などで検索してみましたが解決に至っていません
どうかお力添えお願いします
何がしたいかと、どこまで出来て何がわからないのか詳しくかけ
>>520
Excelシート全てインポートすればクエリー加工出来ると思うが、、 ネ申エクセルからデータを拾いたいとかそんな話じゃね?
CreateObject("Excel.Application")
使って対象ファイル開いて、そっからさきはExcel VBAの範疇やろ
なんだ
Accessでテーブル化したい、のでは無いのか?
何やりたいのか分からんな
「AccessVBAからexcelファイルのセル参照ってどうやるの?」ていう質問でしょ
質問には答えられるけど
答えるとまた次の質問が来るのが予測出来るからまんどくせ
>>521-523
なにをやりないか再度確認してコード見直していたら不具合点見つかって前進しました…
>>525
やりたいのはこれで30個程度のエクセルがあって全てフォームは統一されています
a3とb4とw30の値をテーブルにズドンと引っ張りたいのです
もうちょっと頑張ってみます
遅くなってごめんなさい ACCESS VBA EXCEL CELLでクグルと沢山出て来ますね。
ACCESSからEXCEL開いて操作できると便利です、頑張ってください。
>>529
CreateObject("Excel.Application")でエクセルを操作できるようにする
対象とするシートからa3とb4とw30の値を取得して変数 X Y Z に格納する
変数 X Y Z の値をAccess のテーブルに追加する
この二つの処理を全てのシートにループで行う
釣りが終わったExcel オブジェクトを閉じる
Access のオブジェクトの閉じる
これでいけるんじゃね? >>531-532
ありがとうございます
こう書くとすごくわかりやすいですね
テーブル追加やLOOPは調べて書き方を学べそうなのでやってみます! たびたびすみません
ばしっとフォルダ内のファイル名を取得することはできました
>CreateObject("Excel.Application")でエクセルを操作できるようにする
これの意味がようやくわかりました ありがとうございます
C:\Users\sanae\Desktop\vba\Book1.xlsx というExcelファイルのa3を変数に入れようとしているのですが
ぐぐったところファイルパスをつける書きかたが参考にできるページがみあたらず詰まっています
(このあたりにファイルパスとかシートとかを指定して)range(3.1) みたいなやり方かなあなんて思っているのですがどれもエラーになっちゃいました
参考になるページでもご教示いただければ幸いでございます
>>535
おおお
できてきました とても進みました
・フォルダを指定してファイル名を取得
・変数XYZに特定のセルの値を取得
・ すみませんCTRL+エンターで送信になってしまいました
・フォルダを指定してファイル名を取得
・指定したシートから変数XYZに特定のセルの値を取得
・XYZの値をテーブルに追加
超進みました
後は指定したシート名を持たないファイルに遭遇した時にどんなエラーになるのかが気になりますので
近々時間みつけて頑張ろうと思います
ありがとうございました!超ハッピー!
VBAでやらなくてもテーブルimportで出来るやろ
無駄な努力だな
>>539
ブック数が多いから VBA でやりたいんじゃないの?
インポートでできる量だったら手でコピペの方が早いだろ 対象のExcelファイルが固定なのか、頻繁に入れ替わるかどうかにもよるわな
どなたか教えてください。
売掛金消し込みのマクロを作成しています。VBAでソルバーを自動化したいと思っています。
目的セル、制約条件の参照セルの開始行が40行ごとに下がっていき、指定値は数値ではなく、セルを指定したいです。
とりあえず、全部の変数をvariant型にしてますが、なかなか上手くいきません。
こんな奴が作るプログラムで金勘定とか笑えるわ
己を知らないって馬鹿の特徴なんだよな
>>542
Access VBAスレでExcelの質問するなよ EXCELで記録したVBAをACCESSで実行するとEXCELはXlmxにしなくても良いからじゃないの?
ソルバーは使い方わからんのでなんにも言えなくてスマン。
>>546
Excel VBAスレみればなにがあったのか分かるよ 昨日アホな質問した541です。
accessスレにexcel VBAについて投稿してしまい、すみませんでした。
VBA初心者なので、よくわからずに投稿してしまいました。
>>551
それだけ焦ってたんでしょ。Excel VBA で反応がなければ藁をもすがる気持ちで アクセス VBA で聞いたんじゃない。
広い気持ちで x VBA初心者
o 5ch初心者
o パソコン初心者
o コミュ障入門者(上級)
DoCmd.OpenReport "レポート名", acViewPreview
DoCmd.PrintOut acPrintAll, , , acHigh, 枚数
新規レポートにラベルを貼っただけものだと希望どおりの枚数が印刷される.
しかし,別のレポートだと常に1枚しか印刷されない.
ネットでも同じ報告を確認した.バグ説もある.
皆さんはどうですか?やっぱりバグですかね?
解決した.
デコンパイルとコンパクトしたらいつの間にか設定した枚数が印刷されるようになった.
accessはマジで面倒くさいなあ.
デコンパイルとコンパクトの待ち時間をを返して欲しいよ
デコンパイル、昔は割と鉄板の解決方法だったんだけどね
それでだめなら新規作成して全モジュールインポートとかもあったな
最近は必要性が減ったけど、まだたまにはあるんだな
コンパクトだけでも良かったのかも知れないが,習慣で両方やることにしている
ついいましがたも.Docmd.OpenReportのOpenArgsがレポートに渡らなくて困っていたが,コンパクトをしたら作動した.
終了時にコンパクトするオプションがあるくらいだから頻繁にやるべきなんだろうね.
コード書いているときは非常に頻繁に破損するからね.
あれはデータ領域を圧縮するのが主で、コード部分にはあまり影響しなかった気がするが
最近のアクセスでコードが破損するのはだいぶ減ったと思うが
VBEからコンパイルするだけで解決してたんじゃないか?
くわしいことはわからないが,挙動不審が治ることがあるんだよねえ
とにかく,試行錯誤していると必ずと言っていいほど,壊れるよねえ.
メモリーが不足していますとか出始めると,その日のうちに全フォーム消失とか起こるからなあ.
試行錯誤の過程のほとんどを貯め込むからな 設定で「終了時に最適化」で、都度終了を心掛けるか
大幅な改修の度にコンパイルのクセを付けるか ファイルサイズに気を付けて、「こんなサイズのはずは無い」ってな時は要注意
で、それは、お道具の使い方が雑、間違ってるってだけで、すぐAccessのせいにする連中はお里が知れる ってこと
下のコードでmdbのディレクトリが表示されると思いきや、
ディレクトリ Documents
フルパス C:\Users\MyName\Documents
が表示された。vbsならscriptの存在するディレクトリだからmdbの存在するディレクトリが表示されると思ったのに、違う。
このことを説明してある資料ありますかね?
Sub test()
Dim fso
Dim objfolder
Set fso = CreateObject("Scripting.FileSystemObject")
Set objfolder = fso.GetFolder(".")
Debug.Print "ディレクトリ", objfolder.Name
Debug.Print "フルパス", objfolder.Path
End Sub
>>562
mdb/accdbファイルの場所が欲しいのなら
CurrentProject.Path
を使おう
CurDir$や>>562の例なんかで返されるカレントディレクトリはファイルダイアログとかで開いたフォルダになるっぽい
その辺の仕様に関する資料は知らんけど そもそも、
>vbsならscriptの存在するディレクトリ
が間違ってる気がするが
カレントディレクトリの概念って最近は説明されてるの見ないなぁ
GetFolder(".")が返してるのはカレントディレクトリ(からの相対パスで自分自身)
カレントディレクトリはACCESS.EXEの場所や.MDBファイルの場所とは別に存在する
まあMDB開くときはそこをカレントにする場合が多いけどな
つねに一致してるとは限らん
>>564
> そもそも、
> >vbsならscriptの存在するディレクトリ
> が間違ってる気がするが
VBSで稼働していたスクリプトをVBAに移植している際に気づいたので、正しいと思います。
スクリプトを任意のフォルダにコピーしてそのフォルダ内のファイルを一括処理するのに使っていましたので。 いやだから、scriptの存在するディレクトリじゃなくて、
カレントディレクトリが表示されてるって話なんだがな
たまたまそれが同じだっただけだ
ここ理解しないと思ったディレクトリが表示されない理由が理解できないぞ
>>565
そのスクリプトをショートカットにして、
作業フォルダを変えて動かしてみたい カレントディレクトリみたいな、あやふやなものを使ってはいけない。
これが使えるのは、絶対に変化しない場合だけ
起動時に、特定のフォルダを指定するとか、
あらかじめ定数などに保存しておく
例えばデスクトップに、以下のショートカットを作ると、
WSL2 で、Ubuntu 18.04 を起動して、
その /home/ユーザー名/test ディレクトリを、VSCode で開く
リンク先
C:\Windows\System32\wsl.exe code .
作業フォルダ
\\wsl$\Ubuntu-18.04\home\ユーザー名\test
もはやAccess VBAとは関係ない話になってるし、元質問者は聞く耳持たないみたいだから
これ以上続ける意味無いよ
>>574
なぜ「fsoを使うと」なにが、「当たり前」なんだい? 7月12日のWindows Updateを実施した端末で軒並み「要求されたタイプ ライブラリまたはウィザードは VBA プロジェクトではありません。」
というエラーが出てAccessで作ったものが起動できない症状が出てるんだけど、何か知ってる?
ちなみにAccess Runtimeを再インストールすると直る。修復ではダメ。
>>576 書き忘れたけど手元で問題が発生しているのはAccess Runtime 2013 32bitの端末。
OSはWin8.1とWin10の両方で発生してる。 うちの環境とほぼ同じですね、まだ発生してないけど明日あたり起きるのかな。
runtimeの入れ直しですね、了解っす。
>>576
特定した。
KB5002121を入れると症状が発生する。
Access Runtimeを再インストールしても再度Windows Updateを実施すると元に戻るから
KB5002121をブロックしないとダメだ。 迷惑な話ですねえ。
MSのプログラマーがアホなのは今に始まったことじゃないけど
昔EXCELのVBAで似たような話が合った気がするな
その時はテンポラリディレクトリの掃除したら起動するようになったはずだから
いちど試してみては
MSは自社製品のテスト駆動開発すらしてない
テストが面倒になるとサポート打ち切り
Formを変数にSetするとき下の二つのやり方のどちらが速いか試したら、結構まちまちなんですよね。
後者はEarly Bindingだと思うんだけど、ループさせると前者が速いことも結構あって不思議だ。
だれかこのあたりの事情をご存じの方いますか?
Dim F As Form
Set F = Forms!FormName
Dim F As Form_FormName
Set F = Forms!FormName
>>584
runtime版でそれ出たな、試行錯誤でruntime2016からruntime365に変えたら動いたw事がある。 >>585
あってるかどうかは知らんが
!は実行時に列挙する気がするんだが
後者は型チェックと変換が入るから後者のほうが遅いと思う
前者も入るかもしれんが、そうなるとForm型とForm_FormName型でどっちのキャストが早いかで
結局やっぱり後者が遅い気がする
どっちにしたってFは型指定されているので事前バインドだが、
それが差に出るのはFのメンバーを使うときだぜ
まあ、なんにしても誤差レベルだと思うが PC画面のスクショを撮って、印刷させたいのですが
とっかかりすら分からない初心者です
検索しても該当サイトはなかったので
よろしければご教授願いたいです
>>589
Windows標準の切り取り&スケッチを使えばできます
ACCESSからコントロールしたいのですか? >>590
はい、ExcelかAccessでとのことで、
今後の勉強含めAccessに挑んでいます。
不特定多数が使用する環境で
(リテラシーが低い人も混在)
ボタン一つで全画面スクショ印刷と
アクティブウィンドウのみスクショ印刷
の2通りできるようにしたいです
(スクショしたデータは印刷後削除される仕様にしたい)
今のところ全画面スクショはできたのですが
アクティブウィンドウと
その後の印刷と削除で、つまづいてます。
ド初心者なので、見当違いな質問をしていたら
申し訳ありません API経由で[PrtSc](全画面)、[Alt]+[PrtSc](アクティブウィンドウのみ)を押せばクリップボードに画面キャプチャができるだろうから
それをレポート上のImageに突っ込んで印刷すればいいんじゃないのかな?
試してないから実際にできるかは知らんけど
>>592
ありがとうございます
土日に試してみます! サーバーから検索したいのに上手くいかない
どこか修正するとこありますか?
Private Sub CommandButton1_Click()
Const BASE_PATH = "\\L\設計\図面"Dim myPath As String, myName As String
Dim FSO As Object, oFolder As Object, oSubFolder As Object, oFile As Object
On Error Resume Next
If TextBox1.Value = ""Then Exit Sub
ListBox1.Clear
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(BASE_PATH)
For Each oSubFolder In oFolder.SubFolders
For Each oFile In oSubFolder.Files
If LCase(oFile.Name) Like LCase(TextBox1.Value) &"*.pdf"Then
Debug.Print oFile.Path
myPath = oFile.ParentFolder &"\"myName = oFile.Name
ListBox1.AddItem myName
ListBox1.List(ListBox1.ListCount - 1, 1) = myPath
End If
Next
Next
Set FSO = Nothing
End Sub
何がどううまくいかないんだ?
On Error Resume Next外して、エラー内容かけ
知らんけど、コマンドプロンプトで取得した方が速いと思うぞ。
表形式にしたフォーム上の一行一行に対して、そのレコードのID.pdfが指定のフォルダにあれば○、無ければ空白って文字を連結したテキストボックスに入れたいんだけど。
Dir使って判定させるところまでは出来たけど、vbaを実行させるタイミングの問題なのかな?
詳細セクションの描画時選んだら代入出来ませんって出た。
試しに詳細セクションダブルクリックだと該当レコードだけは入ったけど。。
一括で全レコード対象にする方法あるんでしょうか。。?
データシートビューのソースの段階でクエリ使ってる?
〇や(空白)を入力するフィールドは確保されてる?
元のソースにpdfファイルがあるか無いかを画面上で比較しながらひとつずつ入力するつもり?
仮のテーブル作ってフォルダ内のpdfのファイル名をDir使ってそのテーブルに代入すれば
簡単に元のソースにも反映出来ると思うけど どうしてもデータシートビューで比較しながら入れたい?
pdfが入ってるフォルダ内がしょっちゅう追加・変更・削除がある場合だとしても、仮のテーブル使っとけば
都度最新の状況での比較が可能だと思えるし、不足してるからpdf作らなきゃ、の指針にも成るような気がする
でも、元のソースに〇のフィールド作っちゃうと、pdf削除されても〇のまま消えない可能性もあるから対策必要か
つまり、一括で全レコード対象にするなら、Dir結果をcsvなりtxtなりに落とし込んで、それと元ソースで更新クエリがいちばん早い
>>599
ありがとうございます
一旦別のテーブルなりCSVなりにファイル一覧作ってみる事にします!
思い付きもしませんでした