Modificar una hoja de cálculo usando una macro VB
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.
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.