2

私は 2 つのスプレッドシートを持っています...一方が特定の方法で変更された場合、適切な方法で他方を変更するマクロを実行したいと考えています。対処する必要があるイベント (特定の列の任意のセルの変更) を既に分離しましたが、別のスプレッドシートへのアクセスと変更に関する具体的な情報を見つけることができないようです (このスプレッドシートは別の LAN にあります)。共有も...ユーザーは両方にアクセスできます)。

どんな助けでも素晴らしいでしょう。これを行う方法または類似の方法に関するリファレンスは、具体的なコード サンプルと同じくらい優れています。

4

4 に答える 4

5

Excel では、別のワークシートを開いて変更し、データを保存するためのコードを記述するだけです。

詳細については、このチュートリアルを参照してください。

後で VBA を編集する必要があるので、これは疑似コードのふりをしますが、次のようになります。

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
于 2008-09-09T02:07:50.927 に答える
0

これでしばらく遊んだ後、マイケルの疑似コードが最も近いことがわかりましたが、次のようにしました。

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

次に、シートを操作します...おそらく次のようになります:

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

完了したら、次の行を使用して終了します。

xl.Workbooks.Close
xl.Quit

変更が加えられた場合、ユーザーはファイルを閉じる前にファイルを保存するように求められます。自動で保存する方法もあるかもしれませんが、こっちの方がいいのでそのままにしてます。

助けてくれてありがとう!

于 2008-09-10T16:45:07.707 に答える
0

1 行でスプレッドシートを開くことができます。

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

それをアクティブなワークブックとして参照します。

Range("A1").value = "New value"
于 2008-09-09T08:09:38.203 に答える
0

オブジェクトに以下をコピーしてThisWorkbook、特定の変更を監視します。この場合、数値を別の数値に増やします。

注意: Workbook-SheetChangeandWorkbook-SheetSelectionChangeをアンダースコアに置き換える必要があります。例: Markdown コードWorkbook_SheetChangeWorkbook_SheetSelectionChangeアンダースコアがエスケープされます。

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

これに基づいて別のワークブックを変更したい場合は、最初にワークブックが既に開いているかどうかを確認することを検討します...または、すべての変更をまとめて一度に実行できるソリューションを設計することをお勧めします。このスプレッドシートを聞いていることに基づいて、別のスプレッドシートを継続的に変更するのは苦痛になる可能性があります。

于 2008-09-09T08:47:40.887 に答える