2016-12-14 10 views
1

私はすぐに公開できる便利なExcel VBAアドインを作った。私には1つの問題しかありません。アドインが実行されるたびにアドインをチェックして、古いバージョンを使用しているかどうかをユーザーに通知します。Excelアドイン、いつ更新をチェックしますか?

インターネットエクスプローラの自動化を使用して私のウェブサイトでアップデートをチェックする公開サブを書いています。手動で実行するとうまくいきます。

私の問題は、CheckForUpdate()サブと呼ぶべきですか?私はWorkbook_Open()に入れてみましたが、私が見つけた問題は、時間がかかりすぎると、Excelが正しく読み込まれないようにすることです。

アドイン作成者が更新を確認する標準的な方法はありますか? Workbook_Open()にコードがあると、Excelでワークブックが読み込まれないのはなぜですか?

ありがとうございます!

:ここに私のコード全体があります。これがアドインブックに追加され、アドインがアクティブになっている場合、Excelファイルを開くことができません。

Private Sub Workbook_Open() 
    Call CheckForUpdate 
End Sub 

Public Sub CheckForUpdate() 
    Dim ie As Object 
    Set ie = CreateObject("internetexplorer.application") 
    ie.Visible = False 
    ie.navigate "https://example.com/checkforupdate" 

    Do While ie.readystate <> 4: DoEvents: Loop 

    Set HTML = ie.document 
    If HTML.DocumentElement.innerHTML = "update is available" Then 
     MsgBox "An update is ready. Go get it!" 
    Else 
     MsgBox "no update" 
    End If 

    Set ie = Nothing 
End Sub 

更新:私は今、3台のコンピュータ上でテストしてみました。そのうち2つにExcel 2013があり、問題が発生します。 1つにはExcel 2016があり、問題はありません。私はすべてのExcelバージョンをサポートしたいので、まだ解決策が必要です。

+0

ユーザーがインターネットに接続していないときに、更新チェッカーが正常に終了することを願っています。 – YowE3K

+0

'CheckForUpdate()'コードを表示します。最も長い時間を要するコードはどれですか?別のプロセスでチェックインするか、または非同期モードでXHRを使用してチェックインする必要があります。 – omegastripes

+1

もし 'Workbook_Open()'に干渉しているのであれば、 'Application.OnTime'を使用してブックがロードされてから10〜15秒間スケジュールするのはどうですか? – Comintern

答えて

3

私はあなたのコードを実行し、Excel 2013で問題を再現しました。他のバージョンではテストしませんでした。

ワークブックが表示される前にコードが実行されていると、問題が発生します。私はそれがIEの部分ともっと関係していると思います。

Application.OnTime Now + TimeValue("00:00:15"), "CheckForUpdate"を使ってみました。その問題は、ユーザーがブックを開く前にExcelを起動してタイマーを待つと、まったく同じ問題が発生することです。私は、非同期VBScriptが全く同じ問題を抱えていることを示唆している人は、はるかに複雑な方法で疑わしい。

だから、簡単に行こう。 Workbook_Open()よりもコードを配置する場所を求めました。ここに一つ。

私のために働いたことは次のとおりです。

新しいアドインプロジェクトを開始します。 CheckForUpdates関数を新しいモジュールに追加します。 ThisWorkbookに次のコードを追加します。

Private WithEvents App As Application 

Private Sub App_WorkbookActivate(ByVal Wb As Workbook) 
    CheckForUpdate 
End Sub 

Private Sub Workbook_Open() 
    Set App = Application 
End Sub 

このコードでは、ブックをアクティブにすると、更新手順が実行されます。そこに問題はないようです。

それが機能するかどうか教えてください。がんばろう。

関連する問題