这似乎是一个如此简单的请求,但我似乎无法在网上找到任何答案。 我有两个打开的工作簿(比如说 A 和 B )。我想要做的就是运行我在工作簿B 中创建的宏并通过工作簿A 运行它(通过单击我已指定宏的形状) ,但宏在工作簿B
中运行我为工作簿B 创建的宏是......
Sub HistoricalDataShift()
Dim ws As Worksheet
For Each ws In Sheets
ws.Activate'
Rows("18:1000").Select
Selection.Copy
Range("A19").Select
ActiveSheet.Paste
Rows("15:15").Select
Selection.Copy
Range("A18").Select
ActiveSheet.Paste
Next ws
End Sub
然后我在工作簿B 中创建了第二个宏...
Sub ApplicationRun()
Application.Run ("WorkbookB.xlsm!HistoricalDataShift")
End Sub
但每次我尝试宏都会继续在工作簿A 中运行。
如果我能伸出援手,我将不胜感激。
答案 0 :(得分:1)
尝试声明工作簿对象?
Dim wkbkA as workbook
set wkbkA = 'directory here
然后在With... End With
With wkbkA
.range('etc.........
End With
答案 1 :(得分:1)
您可以使用Worksheets("<worksheetname>")
e.g。 Worksheets("A").Activate
或cv = Worksheets(Worksheet).Cells(DataSeriesEnd, rc_index)
其中Worksheet保存工作表名称。
等
此代码段将遍历整个工作表集合,其中w是当前工作表名称: -
For Each w In Worksheets
.......
Next w
答案 2 :(得分:1)
在这个简短的示例中,我们假设 WorkbookB.xlsm 最初是唯一的打开工作簿并托管此宏:
Sub HistoricalDataShift()
Dim wkbB As Workbook
Dim wkbA As Workbook
Set wkbB = ThisWorkbook
Workbooks.Open Filename:="WorkbookA"
Set wkbA = ActiveWorkbook
wkbA.Sheets(1).Range("B9").Value = "whatever"
End Sub
答案 3 :(得分:1)
您需要做的就是重写HistoricalDataShift来自行运行。它应该工作得很好。
class Person(models.Model):
address = models.CharField(max_length500)
name = models.CharField(max_length=200)
name_pinyin = models.CharField(pinyin(name),max_length = 200)
def save(self, *args, **kwargs):
self.name_pinyin = Pinyin(self.name)
super(Person, self).save()
为了使您的代码更好地工作,您可以这样做:
Sub HistoricalDataShift()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
For Each ws In wb.Worksheets
ws.Activate '
ws.Rows("18:1000").Select
Selection.Copy
ws.Range("A19").Select
ActiveSheet.Paste
ws.Rows("15:15").Select
Selection.Copy
ws.Range("A18").Select
ActiveSheet.Paste
Next ws
End Sub