Excel VBA seleção recalculada
Pergunta
Eu tenho algumas planilhas do Excel que estão atingindo bastante o banco de dados (mais de 100 consultas contra a tabela geral do livro ... caramba!). Refrescante apenas a folha em que estou (Shift+F9) é útil em algumas planilhas, mas eu queria uma maneira de atualizar apenas as células selecionadas. Eu criei o código a seguir, colocado no objeto Thatworkbook:
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
Se possível, gostaria de torná -lo mais portátil, como armazená -lo em um arquivo XLA e carregá -lo como um adicional do Excel. Isso é possível com o método que estou usando? Existe uma maneira melhor de conseguir isso?
Solução
Você deve poder usar o seguinte:
Public Sub RecalculateSelection()
Dim rng As Range
Set rng = Application.Selection
rng.Calculate
End Sub
Você deve colocar algum manuseio de erros em torno da linha 'Set RNG', pois o usuário pode não ter selecionado um intervalo (por exemplo, eles podem ter selecionado um gráfico).
Ao usar o objeto de aplicativo, você não precisa capturar o evento de manual de trabalho_sheetselectionChange.
Outras dicas
Se você estiver usando o método da resposta aceita acima, você deve primeiro verificar isso ...
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
Além disso, você pode adicioná -lo aos menus do contexto da folha e do lençol. O nome das duas barras de comando que você precisa fazer isso é ... "célula" e "dobra"
Se você deseja apenas recalcular as células selecionadas atualmente, ignorando as células que dependem deles, você pode usar meu addin RangeCalc, download dehttp://www.decisionmodels.com/downloads.htm