Excel宏加载项重复电子表格弹出窗口
“我的宏”从集合数据转储从头开始创建透视表。我正在尝试将此宏移动到外接程序。外接程序每次都处理新数据,但出于某种原因,它会弹出我的代码最初处理的第二个工作簿 我已经浏览了外接程序网站,以确保正确设置了外接程序。我的其他外接宏作品(只有2个,仍在学习)Excel宏加载项重复电子表格弹出窗口,excel,vba,excel-addins,Excel,Vba,Excel Addins,“我的宏”从集合数据转储从头开始创建透视表。我正在尝试将此宏移动到外接程序。外接程序每次都处理新数据,但出于某种原因,它会弹出我的代码最初处理的第二个工作簿 我已经浏览了外接程序网站,以确保正确设置了外接程序。我的其他外接宏作品(只有2个,仍在学习) 你知道我做错了什么吗?我真的认为你的问题在于你使用的工作簿或工作表的引用不一致(或缺少引用)。具体来说,我认为问题在于线路 Set sht = Sheets.Add 由于您的工作表引用未指定要添加新工作表的工作簿,因此它将默认为当前活动的工作簿,
你知道我做错了什么吗?我真的认为你的问题在于你使用的工作簿或工作表的引用不一致(或缺少引用)。具体来说,我认为问题在于线路
Set sht = Sheets.Add
由于您的工作表
引用未指定要添加新工作表的工作簿,因此它将默认为当前活动的工作簿,该工作簿可能是您的加载项工作簿。如果你能更清楚地知道你想要哪些工作簿和工作表,你会帮上大忙的。为了用您的示例说明这一点,您可以从
Sub OpenAndHoldPivot()
Dim workingWB As Workbook
Dim workingWS As Worksheet
Set workingWB = ActiveWorkbook
Set workingWS = activeworksheet
'Determine the data range you want to pivot
Dim srcData As Range
Dim srcDataText As String
With workingWS
Dim finRow As Long
finRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set srcData = .Range("A4").Resize(finRow - 1, 67)
srcDataText = .Name & "!" & srcData.Address(ReferenceStyle:=xlR1C1)
End With
这清楚地确定了所有代码将操作的工作簿。另外,如果您查看myWith
块并将其与您的块进行比较,您会发现您在范围
引用之前遗漏了一个
,这很可能再次引用您的外接程序或活动工作簿(您永远也不能太确定)
在那之后,我继续写代码
'Create a new worksheet in the working workbook
Dim pivotWS As Worksheet
Set pivotWS = workingWB.Sheets.Add
'Pivot Table Start
Dim StartPvtText As String
StartPvtText = pivotWS.Name & "!" & pivotWS.Range("A3").Address(ReferenceStyle:=xlR1C1)
'Create Pivot Cache from Source Data
Dim pvtCache As PivotCache
Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=srcDataText)
'Create Pivot table from Pivot Cache
Dim pvt As PivotTable
Set pvt = pvtCache.CreatePivotTable( _
TableDestination:=StartPvtText, _
TableName:="PivotTable1")
还请注意,我声明的所有变量都尽可能接近它们的使用位置。这使您更容易理解,并确保您使用的变量类型正确
进一步往下看你的代码,你已经参考了ActiveSheet
好几次了。为了保持一致,用一个特定的引用替换它。在我的代码中,我很少使用ActiveSheet
或ActiveCell
。我试图在完整的模块中修复下面的引用,但只有你才能知道这是否准确(因为你想要哪本书或哪张纸并不十分清楚)
最后,还有最后一行代码工作表(“Sheet1”).Name=“Data”
。我不知道应该引用哪个工作簿,但我猜应该是工作wb.Sheets(“Sheet1”).Name=“Data”
出于某种原因,它会弹出我的代码最初处理的第二个工作簿-不清楚这到底是什么意思。您是否尝试过单步执行代码(F9在宏顶部附近设置断点,然后F8在中断模式下逐行运行一次),并查看第二个工作簿“弹出”的确切位置?当我运行外接程序时,会打开第二个Excel页面。该页面上有特定日期的旧数据。它仍然会对新信息运行宏。我尝试使用F8。在运行代码时,第二个工作簿没有打开。感谢您的指示,并且不再弹出额外的工作簿。感谢您帮助清理我的工作表密码
'Create a new worksheet in the working workbook
Dim pivotWS As Worksheet
Set pivotWS = workingWB.Sheets.Add
'Pivot Table Start
Dim StartPvtText As String
StartPvtText = pivotWS.Name & "!" & pivotWS.Range("A3").Address(ReferenceStyle:=xlR1C1)
'Create Pivot Cache from Source Data
Dim pvtCache As PivotCache
Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=srcDataText)
'Create Pivot table from Pivot Cache
Dim pvt As PivotTable
Set pvt = pvtCache.CreatePivotTable( _
TableDestination:=StartPvtText, _
TableName:="PivotTable1")
Option Explicit
Sub OpenAndHoldPivot()
Dim workingWB As Workbook
Dim workingWS As Worksheet
Set workingWB = ActiveWorkbook
Set workingWS = activeworksheet
'Determine the data range you want to pivot
Dim srcData As Range
Dim srcDataText As String
With workingWS
Dim finRow As Long
finRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set srcData = .Range("A4").Resize(finRow - 1, 67)
srcDataText = .Name & "!" & srcData.Address(ReferenceStyle:=xlR1C1)
End With
'Create a new worksheet in the working workbook
Dim pivotWS As Worksheet
Set pivotWS = workingWB.Sheets.Add
'Pivot Table Start
Dim StartPvtText As String
StartPvtText = pivotWS.Name & "!" & pivotWS.Range("A3").Address(ReferenceStyle:=xlR1C1)
'Create Pivot Cache from Source Data
Dim pvtCache As PivotCache
Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=srcDataText)
'Create Pivot table from Pivot Cache
Dim pvt As PivotTable
Set pvt = pvtCache.CreatePivotTable( _
TableDestination:=StartPvtText, _
TableName:="PivotTable1")
'------------------------------------------------------------------------------
Set pvt = pivotWS.PivotTables("PivotTable1")
'Add item to the Report Filter
pvt.PivotFields("Future Fill Date").Orientation = xlPageField
'Add item to the Column Labels
pvt.PivotFields("Worker Type").Orientation = xlColumnField
'Add item to the Row Labels
pvt.PivotFields("Flex Division").Orientation = xlRowField
'Turn on Automatic updates/calculations --like screenupdating to speed up code
pvt.ManualUpdate = False
'------------------------------------------------------------------------------
pivotWS.Name = "Pivot"
'------------------------------------------------------------------------------
Dim pf As String
Dim pf_Name As String
pf = "FT/PT"
pf_Name = "Sum of FT/PT"
Set pvt = pivotWS.PivotTables("PivotTable1")
pvt.AddDataField pvt.PivotFields("FT/PT"), pf_Name, xlCount
'------------------------------------------------------------------------------
Dim pm As PivotField
Set pm = pivotWS.PivotTables("PivotTable1").PivotFields("Future Fill Date")
'Clear Out Any Previous Filtering
pm.ClearAllFilters
'Filter on 2014 items
pm.CurrentPage = "(blank)"
'------------------------------------------------------------------------------
workingWB.Sheets("Sheet1").Name = "Data"
End Sub