Microsoft Access 掲示板

VBSでのaccess 起動について

13 コメント
views
4 フォロー

はじめまして。

hatenaさんのVBSからフロントエンドのアップデートを使わせて頂いております。とても助かっています。
今回普段使用しているものとは別にもう一つ別のaccessを同じようにVBSから起動とアップデートさせようと思い、作成しました。
ですが、実際起動するのは、最初に開いたaccess がアクティブの時だけです。
他のソフトを開いていると、起動しません。

元々accessがアクティブでないと起動しないのでしょうか?

色々調べてもなかなか答えが見つからず、質問させて頂きます。

宜しくお願い致します。

作成accessは2003
使用pcはWindows7 32bitと64bit混在
今年度中にWindows10 64bitへ入れ替え予定

私のpcはWindows7 32bitです。

まゆ
作成: 2020/07/14 (火) 15:56:21
通報 ...
1

状況がよく分かりませんが、

前に作成したVBSでデータベースファイルを開いて、それが開いた状態で、
新規に作成したVBSで別のデータベースファイルを開こうとしている、という状況でしょうか。
そして、前に開いたデータベースファイルがアクティブの時だけしか、別のデータベースファイルが開かないということでしょうか。

他のソフトを開いていると、起動しません。

このソフトは特定のソフトでしょうか。それともどのソフトを開いていても起動しないのでしょうか。

元々accessがアクティブでないと起動しないのでしょうか?

そんなことはないはずです。現に、前に作成したVBSではaccessがアクティブでなくても開きますよね。

2

おはようございます。
説明不足ですみません。
全くその通りです。

IEやメールソフトなどを開いたり、
accessをタスクバーにしまうと、
別のaccessは起動しません。
タスクマネージャー上に表示されない状態です。
そして元々開いていたaccessも操作できなくなります。
タスクマネージャーから元々のaccessを最大化すると再度表示され、使用できます(最小化では表示されません)
そこで一旦元々のaccessを終了し、再度どちらかのVBSを使用して起動すると、最大化して起動しますが、最小化すると極小サイズになります。そこから以前使用していたサイズに戻しました。そのまま別のVBSから別のaccessを起動もできました。
原因がわからず色々テストしてみたのですが、続けて2つのVBSを使用して別々のaccessを起動する事はできます。また単体でも、もちろん起動します。

大変申し訳ありませんが、ご教授お願い致します。

3

2つのVBSで異なるデータベースファイルを開くという運用がしたことがなかったので、簡単なデータベースファイルを2つ、それぞれようのVBAを作成して、実験してみました。

一つ目のデータベースファイルをVBSから開いて、別のアプリをアクティブにしてから、2つ目のデータベースファイルをVBSから開いても特に問題なく起動できました。

現状の2つのVBSファイルの名前とコードを提示してもらえますか。原因がわかるかも知れません。

4

一つのデータベースファイルをタスクバーに最小化すると、症状がでるのを確認しました。

ちょっと解決策はわかりませんね。

複数起動したい場合は、VBSではなく、VB.Net か Accdb で同様の機能を作成する方向で検討したほうかいいかもしれません。

5

テスト等、色々ありがとうございます。
お手数をおかけして、すみません。
やはりタスクバーに入れるとダメなんですね…
社内で基幹システムの補助ソフトとして、accessを使用しています。
その為なのか、会社は新しいaccessを購入してくれないようです。それで2003を使用している状態です。
書くのを忘れてましたが、基本的に私のpc以外はランタイム環境です。

VB.Net…勉強してみます。ソフトが入っていないかもしれませんが、visual studio communityからダウンロードしてみます(色々あって少々戸惑いながらやっていますが)

6

2003なら、MDBファイルを作成してそこから、DAOで更新テーブルをチェックして更新があったら FileCopy、Shell関数でMDBファイルを開いて、自分自身を閉じる、というVBAコードを起動時フォームに記述するという設計にするのが簡単かと。

7

ありがとうございます。

元々私の作り方がいけなかったのか、
元データがあるmdbが2種類あります。
それはデータ量が多かったので、一定の期間で区切ったものです。比較的最近のものが①、過去のものが②とします。
元データ①の片方には毎月数万件追加されます。
フロントエンドのmdbは、社員IDでログインすると、データ追加時に所属拠点の分の一定テーブルデータをコピーしてくるようにしています。
期間外の過去の時は②からコピーしています。
ただし、年度更新の時や何か機能を追加した時はVBAを書き換えて、空のフロントエンドmdbを置いて、access自体をしてコピーさせています。
ここで使っているVBSをmdbで、という事ですよね?VBSを2個使用していたので、起動用のmdbも2個で、32bitと64bitは気にしなくてもいい、という事でましょうか?

ちなみに以前はフロントエンドのmdbをいちいち配布していたのですが、どうにも差し替えを忘れる方がいて、強制コピーしてくるように、こちらのVBSにたどり着いた次第です。

会社のpcからはこの掲示板に繋がらないので、ファイルを送れません(自分の携帯から見ています)見て頂く事も出来ないので、うまく伝わればいいのですが…長々とすみません。

8

現状のデータベースファイルはフロントエンド(アプリケーション)とバックエンド(データ)に分割しているということですよね。
で、データ量が多いので、バックエンドを最近のものと過去のものに分割している。

通常はフロントエンドに最近のバックエンドからデータをコピーして運用している。場合によっては過去のバックエンドからコピーしてくる。

そのような運用ならフロントエンドは一つでいいと思いますが、なぜ、2つ同時に開く必要があるのでしょうか。

9

内容が中途半端で申し訳ありません。
バックエンド2つを同時に開く事はありません。

今回2個目に作成したVBSは、先程のとは別のものです。
こちらはバックエンド一つ、フロントエンドの運用です。

先程書いた1つ目(フロントエンド+バックエンド2つ)の起動用のmdbと2つ目(フロントエンド+バックエンド)の起動用のmdbをそれぞれ作成する、またmdbで起動であれば、bit数の問題もクリアできる、という理解であっていますでしょうか?

何度も申し訳ありません。

10

そういうことです。
mdbなら32ビットでも64ビットでも問題ないと思います。
ただ、実際にやったことはないので何か想定外の問題があるかも知れません。
とりあえずやってみてはどうでしょうか。

11

こんばんは。
起動.mdb作成してみました。
autoexecでverのチェック、アップデートなどはうまくいきました。

そこで問題があったのですが、
MSACCESS.EXEのパスが一定ではなく、
もちろん私と同じフォルダ名の人以外は動きませんでした…
各pcのMSACCESS.EXEのパスを取得して、起動できるのでしょうか?
下記がshellの部分です。

strAPPT = "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE"
  strDBPT = "C:\ACCESSCSV\依頼書_2課.mdb"
  
  Shell strAPPT & " " & strDBPT, vbNormalFocus
12

こんにちは。

'''
strAPPT = SysCmd(acSysCmdAccessDir) & "\MSACCESS.EXE"
’’’

と書き換えて、今のところ32bit、64bit共に問題なく起動できています。

来週pcの入れ替えが始まるので、Windows10で最終テストしてみます。

とりあえず、お知らせまで。

13
まゆ 2020/07/20 (月) 22:59:24 81a37@8e412

こんばんは。

本日Windows10でのテストが無事終了しました。
VBSで起動する事ばかり考えていたので、mdbでの起動を教えて頂き、大変助かりました。
ありがとうございました🙇‍♂️

起動のコードも載せておきます。
かなり独学で書いていますので、もっとスマートな書き方があれば、お時間ある時にご教授頂けると幸いです。

Function VERCHECK()

Dim DB1 As DAO.Database
Dim DB2 As DAO.Database
Dim RS1 As DAO.Recordset
Dim RS2 As DAO.Recordset
Dim strAPPT As String
Dim strDBPT As String

 DoCmd.OpenForm "F_起動"


 Set DB1 = DBEngine.Workspaces(0).OpenDatabase("共有サーバの◯◯.mdb")
 
 Set RS1 = DB1.OpenRecordset("T_VERINFO")

 Set DB2 = DBEngine.Workspaces(0).OpenDatabase("C:各pc用の◯◯.mdb")

 Set RS2 = DB2.OpenRecordset("T_VERINFO")
 
  If RS1("Ver") > RS2("Ver") Then
  
   If MsgBox("新しいバージョンがあります。アップデートしますか。", vbYesNo) = vbYes Then
 
   RS1.Close
   RS2.Close
   DB1.Close
   DB2.Close
   
 Set RS1 = Nothing
 Set RS2 = Nothing
 Set DB1 = Nothing
 Set DB2 = Nothing
 
     FileCopy "共有サーバの◯◯.mdb", "C:\各pc用の◯◯.mdb" 
 
   End If
   
  End If
  
 
 
  strAPPT = SysCmd(acSysCmdAccessDir) & "\MSACCESS.EXE"
  strDBPT = "C:\各pc用の◯◯.mdb"
  
 
  Shell strAPPT & " " & strDBPT, vbNormalFocus
 
 Application.Quit
 

End Function


  Shell strAPPT & " " & strDBPT, vbNormalFocus
 
 Application.Quit
 

End Function

本当にありがとうございました。