Modificando uma planilha usando uma macro VB
Pergunta
tenho duas planilhas...quando um é modificado de uma certa maneira, quero executar uma macro que modifique o segundo de maneira apropriada.Já isolei o evento no qual preciso agir (a modificação de qualquer célula em uma determinada coluna), mas não consigo encontrar nenhuma informação concreta sobre como acessar e modificar outra planilha (esta planilha está localizada em uma LAN diferente compartilhe também...o usuário tem acesso a ambos).
Qualquer ajuda seria ótimo.Referências sobre como fazer isso ou algo semelhante são tão boas quanto exemplos de código concretos.
Solução
No Excel, você provavelmente apenas escreveria o código para abrir a outra planilha, modificá-la e salvar os dados.
Ver este tutorial para mais informações.
Terei que editar meu VBA mais tarde, então finja que é pseudocódigo, mas deve ser algo como:
Dim xl: Set xl = CreateObject("Excel.Application")
xl.Open "\\the\share\file.xls"
Dim ws: Set ws = xl.Worksheets(1)
ws.Cells(0,1).Value = "New Value"
ws.Save
xl.Quit constSilent
Outras dicas
Você pode abrir uma planilha em uma única linha:
Workbooks.Open FileName:="\\the\share\file.xls"
e consulte-o como a pasta de trabalho ativa:
Range("A1").value = "New value"
Depois de brincar um pouco com isso, descobri que o pseudocódigo de Michael era o mais próximo, mas eis como fiz:
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open "\\owghome1\bennejm$\testing.xls"
xl.Sheets("Sheet1").Select
Então, manipule a folha...talvez assim:
xl.Cells(x, y).Value = "Some text"
Quando terminar, use estas linhas para finalizar:
xl.Workbooks.Close
xl.Quit
Se alterações foram feitas, o usuário será solicitado a salvar o arquivo antes de fechá-lo.Pode haver uma maneira de salvar automaticamente, mas na verdade é melhor, então estou deixando como está.
Obrigado por toda a ajuda!
Copie o seguinte em seu ThisWorkbook
objeto para observar mudanças específicas.Neste caso, quando você aumenta um valor numérico para outro valor numérico.
Observação:você terá que substituir Workbook-SheetChange
e Workbook-SheetSelectionChange
com um sublinhado.Ex: Workbook_SheetChange
e Workbook_SheetSelectionChange
o sublinhado escapa no código Markdown.
Option Explicit
Dim varPreviousValue As Variant ' required for IsThisMyChange() . This should be made more unique since it's in the global space.
Private Sub Workbook-SheetChange(ByVal Sh As Object, ByVal Target As Range)
' required for IsThisMyChange()
IsThisMyChange Sh, Target
End Sub
Private Sub Workbook-SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
' This implements and awful way of accessing the previous value via a global.
' not pretty but required for IsThisMyChange()
varPreviousValue = Target.Cells(1, 1).Value ' NB: This is used so that if a Merged set of cells if referenced only the first cell is used
End Sub
Private Sub IsThisMyChange(Sh As Object, Target As Range)
Dim isMyChange As Boolean
Dim dblValue As Double
Dim dblPreviousValue As Double
isMyChange = False
' Simple catch all. If either number cant be expressed as doubles, then exit.
On Error GoTo ErrorHandler
dblValue = CDbl(Target.Value)
dblPreviousValue = CDbl(varPreviousValue)
On Error GoTo 0 ' This turns off "On Error" statements in VBA.
If dblValue > dblPreviousValue Then
isMyChange = True
End If
If isMyChange Then
MsgBox ("You've increased the value of " & Target.Address)
End If
' end of normal execution
Exit Sub
ErrorHandler:
' Do nothing much.
Exit Sub
End Sub
Se você deseja alterar outra pasta de trabalho com base nisso, pensaria em verificar primeiro se a pasta de trabalho já está aberta ...ou melhor ainda, projete uma solução que possa agrupar todas as suas alterações e executá-las de uma só vez.Alterar continuamente outra planilha com base em você ouvindo esta pode ser doloroso.