使用VBA宏修改电子表格

时间:2008-09-09 01:56:10

标签: excel excel-vba vba

我有两个电子表格...当一个人以某种方式被修改时,我希望有一个宏运行以适当的方式修改第二个。我已经隔离了我需要采取行动的事件(修改特定列中的任何单元格),我似乎无法找到有关访问和修改另一个电子表格的任何具体信息(此电子表格位于不同的LAN上分享...但用户可以访问两者。

任何帮助都会很棒。关于如何执行此操作或类似操作的参考与具体代码示例一样好。

4 个答案:

答案 0 :(得分:5)

在Excel中,您可能只需编写代码来打开其他工作表,修改它然后保存数据。

有关详细信息,请参阅this tutorial

我将不得不稍后编辑我的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

答案 1 :(得分:0)

您可以在一行中打开电子表格:

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

并将其称为活动工作簿:

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

答案 2 :(得分:0)

将以下内容复制到ThisWorkbook对象中,以观察特定更改。在这种情况下,将数值增加到另一个数值。

注意:您必须使用下划线替换Workbook-SheetChangeWorkbook-SheetSelectionChange。例如:Workbook_SheetChangeWorkbook_SheetSelectionChange下划线在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

如果您希望基于此更改另一个工作簿,我会考虑检查工作簿是否已经先打开...或者甚至更好地设计一个可以批量处理所有更改并在一旦。根据你听这个电子表格不断更改另一个电子表格可能会很痛苦。

答案 3 :(得分: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

如果进行了更改,系统将提示用户在文件关闭之前保存该文件。可能有一种自动保存的方法,但这种方式实际上更好,所以我就像它一样离开它。

感谢您的帮助!