Ändern einer Tabellenkalkulation mithilfe eines VB-Makros
Frage
Ich habe zwei Tabellenkalkulationen...Wenn eines auf eine bestimmte Weise geändert wird, möchte ich, dass ein Makro ausgeführt wird, das das zweite auf die entsprechende Weise ändert.Ich habe das Ereignis, auf das ich reagieren muss (die Änderung einer Zelle in einer bestimmten Spalte), bereits isoliert. Ich kann einfach keine konkreten Informationen zum Zugriff und zur Änderung einer anderen Tabelle finden (diese Tabelle befindet sich in einem anderen LAN). auch teilen...der Benutzer hat jedoch Zugriff auf beides).
Jede Hilfe wäre großartig.Referenzen dazu oder ähnliches sind ebenso gut wie konkrete Codebeispiele.
Lösung
In Excel würden Sie wahrscheinlich einfach Code schreiben, um das andere Arbeitsblatt zu öffnen, es zu ändern und dann die Daten zu speichern.
Sehen dieses Tutorial Für mehr Information.
Ich muss mein VBA später bearbeiten, also tun Sie so, als wäre es Pseudocode, aber es sollte ungefähr so aussehen:
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
Andere Tipps
Sie können eine Tabelle in einer einzelnen Zeile öffnen:
Workbooks.Open FileName:="\\the\share\file.xls"
und bezeichnen Sie sie als aktive Arbeitsmappe:
Range("A1").value = "New value"
Nachdem ich eine Weile damit herumgespielt hatte, stellte ich fest, dass der Michael-Pseudocode am nächsten kam, aber so habe ich es gemacht:
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open "\\owghome1\bennejm$\testing.xls"
xl.Sheets("Sheet1").Select
Dann manipulieren Sie das Blatt ...vielleicht so:
xl.Cells(x, y).Value = "Some text"
Wenn Sie fertig sind, verwenden Sie zum Abschluss diese Zeilen:
xl.Workbooks.Close
xl.Quit
Wenn Änderungen vorgenommen wurden, wird der Benutzer aufgefordert, die Datei zu speichern, bevor sie geschlossen wird.Es gibt vielleicht eine Möglichkeit, automatisch zu speichern, aber diese Methode ist tatsächlich besser, also lasse ich es so, wie es ist.
Vielen Dank für all die Hilfe!
Kopieren Sie Folgendes in Ihr ThisWorkbook
Objekt, um auf bestimmte Änderungen zu achten.In diesem Fall, wenn Sie einen numerischen Wert auf einen anderen numerischen Wert erhöhen.
Hinweis:Sie müssen ersetzen Workbook-SheetChange
Und Workbook-SheetSelectionChange
mit einem Unterstrich.Ex: Workbook_SheetChange
Und Workbook_SheetSelectionChange
Der Unterstrich wird im Markdown-Code maskiert.
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
Wenn Sie auf dieser Grundlage eine andere Arbeitsmappe ändern möchten, würde ich darüber nachdenken, zuerst zu prüfen, ob die Arbeitsmappe bereits geöffnet ist ...Oder noch besser: Entwerfen Sie eine Lösung, die alle Ihre Änderungen bündelt und auf einmal durchführt.Es kann schmerzhaft sein, ständig eine andere Tabellenkalkulation zu ändern, während Sie sich diese anhören.