3

データベースにかなりの負荷をかけている Excel スプレッドシートがいくつかあります (総勘定元帳テーブルに対して 100 以上のクエリが実行されています... うわー!)。現在のシートのみを更新する (SHIFT+F9) ことは、一部のスプレッドシートで役立ちますが、選択したセルだけを更新する方法が必要でした。ThisWorkbook オブジェクトに配置された次のコードを思いつきました。

Dim currentSelection As String

Private Sub Workbook_Open()
    Application.OnKey "+^{F9}", "ThisWorkbook.RecalculateSelection"
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    currentSelection = Target.Address
End Sub

Private Sub RecalculateSelection()
    Range(currentSelection).Calculate
End Sub

できれば、XLAファイルに保存してExcelアドインとして読み込むなど、移植性を高めたいと考えています。これは私が使用している方法で可能ですか?これを達成するためのより良い方法はありますか?

4

3 に答える 3

4

以下を使用できるはずです。

Public Sub RecalculateSelection()
    Dim rng As Range
    Set rng = Application.Selection
    rng.Calculate
End Sub

ユーザーが範囲を選択していない可能性があるため (たとえば、チャートを選択した可能性があるため)、'Set rng' 行の周りに何らかのエラー処理を配置する必要があります。

アプリケーション オブジェクトを使用すると、Workbook_SheetSelectionChange イベントをキャプチャする必要がなくなります。

于 2009-12-17T13:16:34.043 に答える
4

上記の受け入れられた回答の方法を使用している場合は、最初にそれを確認する必要があります...

If Not Selection Is Nothing Then
  If TypeName(Application.Selection) = "Range" Then 
  Dim Rng As Range 
  Set Rng = Application.Selection 
  Rng.Calculate 
 End If 
End If 

また、シートとシート名のコンテキスト メニューに追加することもできます。それを行う必要がある 2 つのコマンドバーの名前は... "Cell" と "Ply" です。

于 2010-01-04T22:40:41.430 に答える
2

現在選択されているセルを再計算し、それらに依存するセルを無視する場合は、 http: //www.decisionmodels.com/downloads.htm からダウンロード可能な RangeCalc アドインを使用できます。

于 2009-12-17T12:49:56.783 に答える