Pregunta

Tengo dos hojas de cálculo...cuando uno se modifica de cierta manera, quiero ejecutar una macro que modifique el segundo de manera apropiada.Ya aislé el evento sobre el que necesito actuar (la modificación de cualquier celda en una columna en particular), pero parece que no puedo encontrar ninguna información concreta sobre cómo acceder y modificar otra hoja de cálculo (esta hoja de cálculo está ubicada en una LAN diferente). comparte también...aunque el usuario tiene acceso a ambos).

Cualquier ayuda sería genial.Las referencias sobre cómo hacer esto o algo similar son tan buenas como ejemplos de código concretos.

¿Fue útil?

Solución

En Excel, probablemente simplemente escribiría código para abrir la otra hoja de trabajo, modificarla y luego guardar los datos.

Ver este tutorial para más información.

Tendré que editar mi VBA más tarde, así que imagina que esto es un pseudocódigo, pero debería verse así:

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

Otros consejos

Puedes abrir una hoja de cálculo en una sola línea:

Workbooks.Open FileName:="\\the\share\file.xls"

y consúltelo como el libro de trabajo activo:

Range("A1").value = "New value"

Después de jugar con esto por un tiempo, descubrí que el pseudocódigo de Michael era el más cercano, pero así es como lo hice:

Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open "\\owghome1\bennejm$\testing.xls"
xl.Sheets("Sheet1").Select

Luego, manipula la hoja...tal vez así:

xl.Cells(x, y).Value = "Some text"

Cuando haya terminado, use estas líneas para terminar:

xl.Workbooks.Close
xl.Quit

Si se realizaron cambios, se le pedirá al usuario que guarde el archivo antes de cerrarlo.Puede que haya una manera de guardar automáticamente, pero esta es en realidad mejor, así que lo dejaré como está.

¡Gracias por toda la ayuda!

Copia lo siguiente en tu ThisWorkbook objeto para observar cambios específicos.En este caso, cuando aumenta un valor numérico a otro valor numérico.

NÓTESE BIEN:tendrás que reemplazar Workbook-SheetChange y Workbook-SheetSelectionChange con un guión bajo.Ex: Workbook_SheetChange y Workbook_SheetSelectionChange el guión bajo se escapa en el 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

Si desea cambiar otro libro de trabajo basado en esto, primero consideraría verificar si el libro de trabajo ya está abierto...o incluso mejor, diseñar una solución que pueda agrupar todos los cambios y realizarlos a la vez.Cambiar continuamente otra hoja de cálculo basándose en que escuchas esta podría ser doloroso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top