2008-09-09 14 views
2

Ich habe zwei Tabellenkalkulationen ... wenn man auf eine bestimmte Weise modifiziert wird, möchte ich einen Makro-Lauf haben, der die zweite in einer geeigneten Weise modifiziert. Ich habe bereits das Ereignis isoliert, auf das ich reagieren muss (die Änderung einer Zelle in einer bestimmten Spalte). Ich kann einfach keine konkreten Informationen zum Zugriff auf und Änderung einer anderen Tabelle finden (diese Tabelle befindet sich in einem anderen LAN) teilen auch ... der Benutzer hat jedoch Zugriff auf beide).Ändern einer Tabelle mit einem VB-Makro

Jede Hilfe wäre großartig. Hinweise dazu, wie dies oder etwas Ähnliches getan wird, sind genauso gut wie konkrete Codebeispiele.

Antwort

5

In Excel würden Sie wahrscheinlich nur Code schreiben, um das andere Arbeitsblatt zu öffnen, zu ändern und dann die Daten zu speichern.

Weitere Informationen finden Sie unter this tutorial.

ich später meine VBA bearbeiten werden müssen, so behaupten, diese Pseudo-Code ist, aber es sollte ungefähr so ​​aussehen: Sie

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 
0

kann eine Tabelle in einer einzigen Zeile öffnen:

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

und bezeichnen es als aktive Arbeitsmappe:

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

Kopieren sie die folgenden in Ihrem ThisWorkbook Objekt Achten Sie auf bestimmte Änderungen. In diesem Fall, wenn Sie einen numerischen Wert auf einen anderen numerischen Wert erhöhen.

Hinweis: Sie müssen Workbook-SheetChange und Workbook-SheetSelectionChange durch einen Unterstrich ersetzen. Beispiel: Workbook_SheetChange und Workbook_SheetSelectionChange Der Unterstrich wird im Markdown-Code ausgeblendet.

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 wünschen eine andere Arbeitsmappe zu ändern, auf dieser Grundlage, ich würde darüber nachdenken, zu überprüfen, ob die Arbeitsmappe bereits geöffnet erste ist ... oder noch besser eine Lösung zu entwerfen, das Batch können Sie alle Ihre Änderungen und mach sie sofort. Kontinuierliches Ändern einer anderen Tabelle basierend darauf, dass Sie diese anhören, könnte schmerzhaft sein.

+0

Ich denke, ich hätte genauer sein sollen. Ich habe bereits Code ähnlich dem, was Sie oben haben ... Ich brauchte nur eine Methode zum Öffnen einer zweiten Tabelle. Im Laufe der Zeit wird es wahrscheinlich nur eine Bearbeitung pro Monat oder weniger für die erste Tabelle geben, so dass es nie viele Änderungen an der zweiten geben wird. –

0

Nachdem er eine Weile mit diesem zu spielen, fand ich den Pseudo-Code Michael war in der Nähe, aber hier ist, wie ich es tat:

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

Dann manipuliert das Blatt ... vielleicht wie folgt aus:

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

Wenn Sie fertig sind, verwenden Sie diese Zeilen beenden:

xl.Workbooks.Close 
xl.Quit 

Wenn Änderungen vorgenommen wurden, den Benutzer wird aufgefordert, die Datei zu speichern, bevor sie geschlossen wird. Es könnte einen Weg geben, automatisch zu speichern, aber dieser Weg ist tatsächlich besser, also lasse ich ihn so, wie er ist.

Danke für die Hilfe!