Access VBA 質問スレ Part2
Access の VBA に関する質問スレです 質問テンプレ(雛形)は用意しませんが、OSとAccessのバージョンぐらいは必ず書きましょう 前回のスレッド Access VBA 質問スレ Part1 https://mevius.5ch.net/test/read.cgi/tech/1328536426/ >>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 に接続できる つまりワカラン これかな? https://codezine.jp/article/detail/1627 https://codezine.jp/article/detail/1628 https://codezine.jp/article/detail/1629 記事中においてJavaでSQLを生成している部分はVBAで書けるだろうけれど、 他のRDBMSで使えるSQLの全てがAccessでも使えるわけじゃないから その辺をうまく置き換えたりVBAで補ったりする必要はあると思う 各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) みたいなやり方かなあなんて思っているのですがどれもエラーになっちゃいました 参考になるページでもご教示いただければ幸いでございます >>534 http://officetanaka.net/excel/vba/file/file01.htm を参考にしてください。 Sub Sample1 set mybook=myexel.Workbooks.Open "C:\Users\sanae\Desktop\vba\Book1.xlsx" x=mybook.worksheets(1).range("A 3") X の値をテーブルに書き込む End Sub myexelはクリエイトオブジェクトで作ったエクセルオブジェクトね あと変数は適当に定義しておいてね。 >>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 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる