簡體   English   中英

使用 VB 宏修改電子表格

[英]Modifying a spreadsheet using a VB macro

我有兩個電子表格......當一個電子表格以某種方式被修改時,我想要一個宏運行,以適當的方式修改第二個。 我已經隔離了我需要采取行動的事件(修改特定列中的任何單元格),我似乎無法找到有關訪問和修改另一個電子表格的任何具體信息(該電子表格位於不同的 LAN 上)也共享......用戶可以訪問兩者,但是)。

任何幫助都會很棒。 關於如何執行此操作或類似操作的參考與具體的代碼示例一樣好。

在 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

您可以在一行中打開電子表格:

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

並將其稱為活動工作簿:

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

在您的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

如果您希望基於此更改另一個工作簿,我會考慮先檢查該工作簿是否已經打開......或者甚至更好地設計一個可以批量處理所有更改並立即執行的解決方案。 根據您收聽的內容不斷更改另一個電子表格可能會很痛苦。

玩了一段時間后,我發現邁克爾的偽代碼是最接近的,但我是這樣做的:

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

如果進行了更改,將提示用戶在關閉文件之前保存文件。 可能有一種自動保存的方法,但這種方法實際上更好,所以我保持原樣。

感謝所有的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM