我希望创建一个每个键有多个项目的字典.以下是我现在正在使用的代码.我花了7个多小时玩字典,我似乎无法弄明白.我的范围输入中的唯一值作为我的字典的键是没有问题的,当我想要为每个键添加项时问题就出现了.如果密钥已经存在,我想对该密钥的项目进行SUM(或添加),或者增加该密钥的"计数",该密钥将存储在该密钥的另一个项目中.也许通过视觉效果最好地解释.
Key Item1 Item2
PersonA 20 SomeOtherVal
PersonB 40 SomeOtherVal
PersonA 80 SomeOtherVal
PersonB 17 SomeOtherVal
PersonC 13 SomeOtherVal
Result:
Key Item1(Sum) Item2(Count)
PersonA 100 2
PersonB 57 2
PersonC 13 1
Run Code Online (Sandbox Code Playgroud)
如您所见,存在的所有唯一项都是作为自己的键创建的.如果密钥已经存在,则将Item1添加到密钥的当前总计中,项目2具有计数,并且增加1.以下是我正在使用的代码,我会提供帮助.
Sub dictionaryCreate()
Dim Pair As Variant
Dim q As Range
Dim RAWDATA As Range
Dim d As Dictionary 'Object
Set d = New Dictionary 'CreateObject("Scripting.Dictionary")
Set RAWDATA = Worksheets("RAW_DATA").Range(Cells(2, 1), Cells(3000, 1))
For Each q In RAWDATA
Pair = q.Offset(0, 60).Value + q.Offset(0, 65).Value
If d.Exists(Pair) Then …Run Code Online (Sandbox Code Playgroud) 我想弄清楚是否有一种方法可以调用宏来在执行不同的宏后清除状态栏。我意识到我可以简单地使用:
Application.Wait(Now + TimeValue("00:00:05"))
Application.StatusBar = False
Run Code Online (Sandbox Code Playgroud)
然而,我想做的是让我原来的宏结束,说:
Application.StatusBar = "Macro Function Complete."
Call clearStatusBar
End Sub
Sub clearStatusBar()
'I do not want the application.wait here because it locks up the excel program.
Application.Wait(Now + TimeValue("00:00:05"))
Application.StatusBar = False
End Sub
Run Code Online (Sandbox Code Playgroud)
有没有办法延迟“Application.StatusBar = False”,同时仍然允许用户访问程序?
如果您需要更清晰的信息,请告诉我。感谢您的帮助。
我有一段很不错的代码,可以从Excel文件中复制一个范围并将其粘贴到PowerPoint中的activeslide上。经过数小时的尝试,将excel的范围粘贴为表格(没有图像),我发现以下代码可以成功工作。注意:myPP = PowerPoint应用程序。
myPP.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting"
myPP.CommandBars.ReleaseFocus
Run Code Online (Sandbox Code Playgroud)
问题在于,当我执行宏时,将粘贴表,但是除非逐步执行代码,否则vba无法识别该表。我已经使用以下代码对此进行了测试。在执行过程中,将完全跳过代码,但在逐步执行过程中将触发该代码。
For Each shp In activeSlide.Shapes
If shp.HasTable Then
MsgBox shp.Name
End If
Next
Run Code Online (Sandbox Code Playgroud)
下面是完整的代码。基本上,我只是希望将excel范围作为表格粘贴到我的Powerpoint中,并希望将该表格扩展为适合幻灯片。我愿意提出一些修改建议。谢谢你的帮助
Dim myPP as Object
Dim activeSlide as Object
Dim shp as Object
Worksheets("Sheet2").Activate
Worksheets("Sheet2").Range(Cells(1,1), Cells(4,7)).Copy
Worksheets("Sheet1").Activate
myPP.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting"
myPP.CommandBars.ReleaseFocus
Dim myTable As String
For Each shp In activeSlide.Shapes
If shp.HasTable Then
MsgBox shp.Name
myTable = shp.Name
End If
Next
With activeSlide.Shapes(myTable)
.Left = 23
.Top = 105
.Width = 650
.Height = 375
End With
Run Code Online (Sandbox Code Playgroud)
对于ASH
Dim myPP As …Run Code Online (Sandbox Code Playgroud)