[英]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-SheetChange
和Workbook-SheetSelectionChange
。 例如: Workbook_SheetChange
和Workbook_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.