Изменение электронной таблицы с помощью макроса VB

StackOverflow https://stackoverflow.com/questions/51098

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

В 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"

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top