Excel VBA跨工作簿

我对VBA编码很陌生,对于我所做的事情没有很好的理解。 但是,我走了。

我期待看看是否:

  • VBA代码是否具有dyname值? 因此,代替在设置工作表上执行的代码(例如“Sheet1”),该值根据特定单元格中的值而变化。
  • 在另一个工作簿上触发VBA。 例如,我想从工作簿A运行VBA,触发工作簿B上的VBA。

为了完全解释我想打开工作簿A (和工作簿B,如果需要的话,没关系),然后单击在工作簿B上运行VBA的button,但在某个工作表上取决于Excel A中单元格的值(if单元格中的“sheet3”VBA在“ 工作簿B ”上的“sheet3”上运行)。 我还希望工作簿A中的单元格能够在工作簿B中引用单元格,但要通过dynamic方式将表格名称引用到工作簿B中 例如,我已经粘贴了基本的单元格引用波纹pipe,而不是使用Sheet1我希望它根据单元格中的值进行更改。

 ='[Workbook B.xlsx]Sheet1'!$A$4 

我知道这听起来非常复杂和混乱,但如果我能得到任何帮助,将不胜感激。

 Sub ReportStepOne() Dim myRow As Long myRow = 4 Rows(myRow).Value = Rows(myRow).Value Dim rng As Range Set rng = Range("A4:AC200") rng.Cut rng.Offset(1, 0) Range("A1:AC1").Copy Range("A4:AC4") End Sub 

我要:

  1. 编辑此代码以使其在特定工作表上触发
  2. 使它成为表格名称被引用到单元格A中的任何内容或Report.xlsm中的Sheet2。
  3. 在Report.xlsm中运行一个macros,运行上面的脚本(在一个名为“Historical Data.xlsm”的文件中称为“StepOne”

下面的代码获取Reports.xlsm sheet2上的单元格A4的值,并将wsvariables设置为Historical data.xlsm ,然后将其用于代码的其余部分。 如果可能的话,我build议不要让你的潜艇分散在多个项目上,但这只是我的看法。 我认为像下面这样使用正确的引用更容易。

既然你想在Report.xlsm上的button触发器,我build议将这个代码移动到该工作簿。 如果正确引用它,您可以打开,编辑,保存和closures单个项目中的任何工作簿,这在我看来比在不同项目中调用子工具更容易。

 Sub ReportStepOne() Dim wbHis As Workbook, wbRep As Workbook Dim strWsName As String Dim ws As Worksheet Set wbHis = Workbooks("Historical data.xlsm") Set wbRep = Workbooks("Reports.xlsm") strWsName = wbRep.Worksheets("Sheet2").Cells(4, 1) Set ws = wbHis.Worksheets(strWsName) With ws With .Rows(4) .Value = .Value End With With .Range("A4:AC200") .Cut .Offset(1, 0) End With .Range("A1:AC1").Copy .Range("A4:AC4") End With End Sub 

在另一个工作簿上触发VBA

 Option Explicit Sub RunVBA() Dim xlApp As Excel.Application Dim xlWorkBook As Workbook Set xlApp = New Excel.Application Set xlWorkBook = xlApp.Workbooks.Open("C:\Users\Om3r\Desktop\Book1.xlsm") xlApp.Visible = True xlWorkBook.Application.Run "Module1.SubName" ' Modulename.Subname End Sub 

引用工作表使用

 Sub CopyRange() '// From sheet1 to sheet2 Worksheets(2).Range("A1").Value = Worksheets(1).Range("A1").Value End Sub