質問

データベースにかなり激しくヒットしているExcelスプレッドシートがいくつかあります(総勘定元帳のテーブルに対して100以上のクエリ... Yikes!)。私がオンになっているシート(Shift+F9)だけをリフレッシュすることは、いくつかのスプレッドシートで役立ちますが、選択したセルだけを更新する方法が必要でした。私は次のコードを思いつきました。

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 Addinとしてロードするなど、これをよりポータブルにしたいと思います。これは私が使用している方法で可能ですか?これを達成するためのより良い方法はありますか?

役に立ちましたか?

解決

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

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

ユーザーが範囲を選択していない可能性があるため、「set rng」行の周りにエラー処理を行う必要があります(たとえば、チャートを選択した場合があります)。

アプリケーションオブジェクトを使用して、workbook_sheetselectionchangeイベントをキャプチャする必要はありません。

他のヒント

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

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つのコマンドバーの名前は...「セル」と「プライ」です

現在選択されている細胞を再計算したい場合、それらに依存している細胞を無視している場合は、私のrangecalc addinを使用できます。http://www.decisionmodels.com/downloads.htm

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top