Изменение электронной таблицы с помощью макроса VB - PullRequest
2 голосов
/ 09 сентября 2008

У меня есть две таблицы ... когда одна из них модифицируется определенным образом, я хочу запустить макрос, который изменяет второй соответствующим образом. Я уже выделил событие, которое мне нужно выполнить (изменение любой ячейки в определенном столбце), просто я не могу найти какую-либо конкретную информацию о доступе к другой электронной таблице и ее изменении (эта таблица находится в другой локальной сети). поделитесь также ... у пользователя есть доступ к обоим, хотя).

Любая помощь будет отличной. Ссылки на то, как сделать это или что-то подобное, так же хороши, как и конкретные примеры кода.

Ответы [ 4 ]

5 голосов
/ 09 сентября 2008

В 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
0 голосов
/ 10 сентября 2008

Поработав с этим некоторое время, я обнаружил, что псевдокод Майкла был самым близким, но вот как я это сделал:

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

Если были внесены изменения, пользователю будет предложено сохранить файл до его закрытия. Может быть способ сохранить автоматически, но на самом деле этот способ лучше, поэтому я оставляю его таким, какой он есть.

Спасибо за помощь!

0 голосов
/ 09 сентября 2008

Скопируйте следующее в ваш 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

Если вы хотите изменить другую рабочую книгу на основе этого, я бы подумал о том, чтобы проверить, открыта ли рабочая книга в первую очередь ... или даже лучше разработать решение, которое может объединить все ваши изменения и сделать их по один раз. Постоянное изменение другой таблицы на основе того, что вы ее слушаете, может быть болезненным.

0 голосов
/ 09 сентября 2008

Вы можете открыть электронную таблицу в одну строку:

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

и называть его активной книгой:

Range("A1").value = "New value"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...