Modifica di un foglio di calcolo utilizzando una macro VB
Domanda
Ho due fogli di calcolo...quando uno viene modificato in un certo modo voglio eseguire una macro che modifichi il secondo in modo appropriato.Ho già isolato l'evento su cui devo agire (la modifica di qualsiasi cella in una determinata colonna), non riesco proprio a trovare informazioni concrete sull'accesso e sulla modifica di un altro foglio di calcolo (questo foglio di calcolo si trova su una LAN diversa condividi anche...l'utente ha accesso a entrambi, tuttavia).
Qualsiasi aiuto sarebbe grande.I riferimenti su come eseguire questa operazione o qualcosa di simile sono validi quanto esempi di codice concreti.
Soluzione
In Excel, probabilmente scriveresti semplicemente il codice per aprire l'altro foglio di lavoro, modificarlo e quindi salvare i dati.
Vedere questo tutorial per maggiori informazioni.
Dovrò modificare il mio VBA più tardi, quindi fai finta che questo sia uno pseudocodice, ma dovrebbe assomigliare a qualcosa del tipo:
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
Altri suggerimenti
Puoi aprire un foglio di calcolo in una singola riga:
Workbooks.Open FileName:="\\the\share\file.xls"
e fare riferimento ad essa come cartella di lavoro attiva:
Range("A1").value = "New value"
Dopo aver giocato con questo per un po', ho scoperto che lo pseudo-codice di Michael era il più vicino, ma ecco come ho fatto:
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open "\\owghome1\bennejm$\testing.xls"
xl.Sheets("Sheet1").Select
Quindi, manipola il foglio...forse così:
xl.Cells(x, y).Value = "Some text"
Quando hai finito, usa queste righe per finire:
xl.Workbooks.Close
xl.Quit
Se sono state apportate modifiche, all'utente verrà richiesto di salvare il file prima che venga chiuso.Potrebbe esserci un modo per salvare automaticamente, ma in realtà è meglio, quindi lo lascio così com'è.
Grazie per tutto l'aiuto!
Copia quanto segue nel tuo ThisWorkbook
oggetto da monitorare per cambiamenti specifici.In questo caso quando si aumenta un valore numerico su un altro valore numerico.
NB:dovrai sostituire Workbook-SheetChange
E Workbook-SheetSelectionChange
con un trattino basso.Ex: Workbook_SheetChange
E Workbook_SheetSelectionChange
il carattere di sottolineatura viene sfuggito nel codice 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 desideri modificare un'altra cartella di lavoro in base a questa, penserei prima di verificare se la cartella di lavoro è già aperta...o, ancora meglio, progettare una soluzione in grado di raggruppare tutte le modifiche ed eseguirle contemporaneamente.Cambiare continuamente un altro foglio di calcolo in base all'ascolto di questo potrebbe essere doloroso.