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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top