KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

VB/VBAトップへ ▼カッ飛び最後   全レスを表示

  データベースレコードの更新をVBAで

01: 名前:truck 投稿日:2000/08/16(水) 16:13
はじまして。初心者&発投稿です。

いくつもの図形をデータベースとリンクさせているのですが、
その都度データベースレコードの更新やリフレッシュを手動で
行うのが不便で....(全て同じ図形で同じDBテーブルにリンクしています)
VBAで一括に行う方法はないのでしょうか?

どなたか良い方法をご存知の方
がいらっしゃいましたらご教授願います。

02: 名前:管理人投稿日:2000/08/21(月) 17:31
ウィザードを使ってリンクさせているなら、各シェイプのシェイプシートにリンク先とかが記入されているはずです。
それをみてVBAでリフレッシュさせるコマンドを作るのは可能なような気がします。

03: 名前:yohe投稿日:2001/02/23(金) 18:36
私も、今、一括でDBを更新させたいのですが、できません。
この質問をされてから半年近くたっていますが、その後、どうされたか教えてください。
VBAやVBは結構、苦手で困っています。よろしくお願いします。

04: 名前:りょう投稿日:2001/02/27(火) 10:39
う〜ん、私は基本的にウィザードを使わないのでチョットわかりません(^^ゞ
ご存知の方がいらっしゃったらHELPお願いします(^_^;)

05: 名前:ひのとも投稿日:2001/02/27(火) 21:16
はじめまして。
私もウイザードはあまり使っていませんが、ウイザードは特殊な作りを
していますので、ウイザードベースに一括更新するのは難しいかも
しれませんね。
VBAもしkはVBで、ODBCもしくはADOを経由して独自にプログラミング
した方が早いかも・・・
残念ながら、VBプログラマー以外はちょっと厳しいかもしれません。

06: 名前:Rieko投稿日:2001/04/12(木) 10:28
はじめまして。
私は、アドオンを自動で走らせて一括更新を行っています。
リンク付けは全部手動で行っておいて、更新のみを、メニューのツールにある「データベース リフレッシュ」を使用し、自動更新しています。

VBにはフォームを作成し、ボタンを1個配置し、クリックイベントに
@総ページ数を取得する
A最初のページをアクティブにし、アドオンを実行する
BAを繰り返し最後のページまでリフレッシュする
ようなソースを書きました。

現在複数ファイルを一気にリフレッシュしようとしてますが、それはうまくいってません。
ただ、一つのファイル内なら問題なく実行できています。

こんな形ではどうでしょうか?

とんちんかんな答えをしていたらすみません…。

07: 名前:パンチ投稿日:2004/08/09(月) 20:20
上記06より
"アドオンを実行する" そのコードを教えて下さい。

↓149より
> ActiveDocument.Application.Addons(20).Run "データベース 図形のリフレッシュ"

"20" ← 一体どこから取り出されたのでしょうか?
"データベース..." ← に該当するファイル名はどうやって調べればよいのでしょうか?

08: 名前:yoda投稿日:2004/08/10(火) 02:08
>"20" ← 一体どこから取り出されたのでしょうか?
多分、ですが、
Dim ad As Addon
For Each ad In Visio.Addons
Debug.Print ad.Name; ad.Index
Next

09: 名前:パンチ投稿日:2004/08/12(木) 19:00
ありがとうございます。

Application.Addons("DBRS").Run ""

10: 名前:初心者投稿日:2005/07/04(月) 19:09
私もアドオンを自動で走らせて一括更新を行いたいと考えているのですが、
「リフレッシュ」ではなく、「データベースの更新」を実行しようと苦慮しています。

> ActiveDocument.Application.Addons(20).Run "データベース 図形のリフレッシュ"

>Application.Addons("DBRS").Run ""

を改良したいのですが、「データベースの更新」の場合、Addons("****").Run""の
****は何になるのでしょうか?

11: 名前:yoda投稿日:2005/07/04(月) 20:55
DBUS

このマクロで分かります。
Dim ad As Addon
For Each ad In Visio.Addons
Debug.Print ad.Index; ad.NameU; " "; ad.Name
Next

12: 名前:初心者投稿日:2005/07/05(火) 14:10
yodaさん 有り難うございました。
VISIO2003においては更新が可能となりました。

ただ、現在社内においては2000が標準でまだ2003へのVerUPは
されていないのですが、上記構文だと2000では更新出来ませんで
した。

2000では構文等が異なるのでしょうか?

13: 名前:yoda投稿日:2005/07/05(火) 18:07
Addons オブジェットの初出はV4ですから、構文は同じと考えられます。
しかし、NameUの初出は2003ですから、2000では、NameUが取得で
きないかも知れません。とすると、NameUがDBUSで正しいかどうか
わかりません。ということは、Indexを使えばよいということになります。
上のマクロで確認し、もし19なら、....Addons(19).Run となるので
しょうか。

14: 名前:初心者投稿日:2005/07/05(火) 19:54
yodaさん、有り難うございました。

Indexを使えばというアドバイスを頂き、探したところ
「ActiveDocument.Application.Addons(68).Run ""」
で更新する事ができました。

とりあえずこれで対応出来そうです。

15: 名前:Kazu投稿日:2007/07/06(金) 15:42
図面上にある、シェープのカスタムプロパティに
ファイルの更新日のデータを持たせて、
データベースとリンクさせています。
この、データを更新するのに、beforesaveイベントを使い、
イベント発生時の日時をシェイプのcellに書き込み、
データベースの更新をしようとしています。

そこで、

> 「ActiveDocument.Application.Addons(68).Run ""」

を使い、更新しようとしているのですが、
「図形に保存されているリンク情報を読み込めません。データベース
ウィザードを実行し、シェイプを再度リンクして、問題を解決してください。」
とのエラーメッセージが出て更新できません。
(メニューの「データベースの更新」だとエラーも出ず更新できるのですが。)

VISIOのヘルプを調べると、引数として、
「VisioLibMain プロシージャに送られる実行メッセージを伴う
引数構造のフィールド」と記載があります。

この引数を渡せば、エラーが発生しないように思うのですが、
引数の構造をご存知の方がいたら、教えてください。

16: 名前:yoda投稿日:2007/07/08(日) 23:22
存知の方は、多分、そのウイザードを開発したサードパーティの人だけでしょう。
しかし、幸い、適当なプログラムを作れば、Visioからデーターベースに
アクセスすることは、できると思います。たとえば、DAOなどへの参照設定を
すれば、MicroSoft Accessなどへアクセスするプログラムを、つくれるそうです。
その種のプログラムのノウハウは、インターネットで、検索すると、たくさん
出てきます。

17: 名前:visGeek投稿日:2007/07/09(月) 10:56
同じ名前のアドオンを自作し、アドオンを実行したときに渡される
コマンドライン文字列を確認する、というのはどうでしょうか?
詳細な仕様までは分かりませんが、目的は達成できるかもしれません。

18: 名前:yoda投稿日:2007/07/09(月) 17:18
面白いアイデアですね。やってみる価値はありそうです。

19: 名前:Kazu投稿日:2007/07/10(火) 21:49
visGeekさん,yodaさん
ありがとうございます。
自作のアドオンを作成して、試してみます。


VB/VBAトップへ ▲カッ飛び先頭   全レスを表示