我需要帮助
Tools > Add-ins.ThisWorkbook.IsAddin = True.证明问题:
尝试按如下方式遍历工作簿不会使工作簿具有.AddIn = True:
Dim book As Excel.Workbook
For Each book In Application.Workbooks
Debug.Print book.Name
Next book
Run Code Online (Sandbox Code Playgroud)
通过加载项循环不会获得未注册的加载项:
Dim addin As Excel.AddIn
For Each addin In Application.AddIns
Debug.Print addin.Name
Next addin
Run Code Online (Sandbox Code Playgroud)
循环通过VBProjects集合可以正常工作,但前提是用户在宏安全设置中具有对Visual Basic项目的特别可信访问权限 - 这很少:
Dim vbproj As Object
For Each vbproj In Application.VBE.VBProjects
Debug.Print vbproj.Filename
Next vbproj
Run Code Online (Sandbox Code Playgroud)
但是,如果已知工作簿的名称,则无论是否为加载项,都可以直接引用工作簿:
Dim book As Excel.Workbook
Set book = Application.Workbooks("add-in.xla")
Run Code Online (Sandbox Code Playgroud)
但是,如果名称未知,那么如何获取对此工作簿的引用,并且不能依赖用户的宏安全设置?
我已经使用Task Scheduler和cscript和vbscript运行我的excel 2000 vba程序大约一年了.几天前它停止了工作.我可以手动运行程序.每当任务计划程序启动它时,黑色窗口显示约1-2秒然后关闭.
我试过评论错误处理,但我总是得到相同的结果.我尝试过显示,MsgBoxes但结果仍然相同.
我在你的论坛上找到了一个更简单的方法,我尝试了相同的结果.
那么我需要做些什么来调试呢?
这是我在这个论坛上尝试的代码:
Option Explicit
Dim xlApp, xlBook
Set xlApp = CreateObject("Excel.Application")
'~~> Change Path here
Set xlBook = xlApp.Workbooks.Open("C:\My Documents\___Stocksfilter.xls", 0, True)
xlApp.Run "A_Pick"
xlBook.Close
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
WScript.Echo "Finished."
WScript.Quit
Run Code Online (Sandbox Code Playgroud)
这是我一直在使用的代码:
'Script to start my filter.xls program with named macro
'MsgBox "In RunExcel"
' Create an Excel instance
Dim myExcelWorker
Set myExcelWorker = CreateObject("Excel.Application")
' Disable Excel UI elements
myExcelWorker.DisplayAlerts = False
myExcelWorker.AskToUpdateLinks = False …Run Code Online (Sandbox Code Playgroud) 而不是通过名称显式访问所有参数,有没有办法从函数内以编程方式获取函数参数列表?
所以对于这个函数签名:
Function doSomething(Arg1 as String, Arg2 as Range, Optional Arg3 as String):
Run Code Online (Sandbox Code Playgroud)
理想情况下,是否存在包含参数名称及其元数据(类型,可选,默认值等)的对象?例如,Me.Arguments此函数中的代码将生成如下字典:
{
"Arg1": {
"Type": String,
"Optional": False,
"Default": Nothing
},
"Arg2": {
"Type": Range,
"Optional": False,
"Default": Nothing
},
"Arg1": {
"Type": String,
"Optional": True,
"Default": Nothing
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在尝试创建一个excel宏来复制Excel工作表上显示的图表,并将它们粘贴(粘贴特殊)到PowerPoint中.我遇到的问题是如何将每个图表粘贴到不同的幻灯片上?我根本不知道语法..
这是我到目前为止(它的工作原理,但它只粘贴到第一张表):
Sub graphics3()
Sheets("Chart1").Select
ActiveSheet.ChartObjects("Chart1").Activate
ActiveChart.ChartArea.Copy
Sheets("Graphs").Select
range("A1").Select
ActiveSheet.Paste
With ActiveChart.Parent
.Height = 425 ' resize
.Width = 645 ' resize
.Top = 1 ' reposition
.Left = 1 ' reposition
End With
Dim PPT As Object
Set PPT = CreateObject("PowerPoint.Application")
PPT.Visible = True
PPT.Presentations.Open Filename:="locationwherepptxis"
Set PPApp = GetObject("Powerpoint.Application")
Set PPPres = PPApp.activepresentation
Set PPSlide = PPPres.slides _
(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
' Copy chart as a picture
ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, _
Format:=xlPicture
' Paste chart
PPSlide.Shapes.Paste.Select
' Align pasted chart …Run Code Online (Sandbox Code Playgroud) 我使用Excel在两个行向量之间做一些点积:
=MMULT(B1049:M1049, TRANSPOSE(B1050:M1050))
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为公式的单元格显示"#VALUE!".我想知道为什么?谢谢!
注意,"B1049:M1049"和"B1050:M1050"中的所有单元格都是数字.
PS:这个问题在这里或超级用户更合适吗?
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
Set myOlItems = objNS.GetDefaultFolder(olFolderInbox).Items
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码访问主要的Outlook收件箱,但如何使用vba访问收件箱中的文件夹和邮件!
我有30张图表是从excel创建的,并粘贴到powerpoint幻灯片上.每个月,我都必须通过手动点击图表和编辑来更新这30个嵌入式图表.
我知道有一个选项可以使用paste special,因此可以通过单击更新链接自动更新图表中的数据.但是,我的图表需要由一些用户编辑.粘贴特殊选项不允许用户编辑图表.因此,我无法使用此粘贴特殊选项.
我认为解决方案在于在powerpoint中编写vba.这里有专家可以编写这个vba代码,以便在powerpoint中更新所有图表吗?我目前正在使用powerpoint 2007.非常感谢您的帮助.
有没有人知道如何在access-vba中进行堆栈跟踪.我正在尝试做类似的事情:
Public Sub a()
Call c
End Sub
Public Sub b()
Call c
End Sub
Public Sub c()
Debug.Print "Which sub has called me ?"
End Sub
Run Code Online (Sandbox Code Playgroud)
我想要做的Sub c是显示是否通过Sub a或Sub b不通过任何参数调用它.在c中我只是显示堆栈,但我不知道这是否甚至可能在VBA - 任何想法?
在线论坛中的一个常见请求是用于识别表单中未锁定单元格的代码.
标准解决方案使用循环迭代活动工作表的已使用部分中的每个单元格,测试每个单元格确定它是否被锁定.甲代码示例这种方法在下面列出.
鉴于在循环细胞范围内固有的差的性能,可能有哪些优越的方法?
(注意:我确实打算添加我自己现有的方法,以前作为潜在的方法托管在另一个论坛上 - 但如果提供的话,我将接受另一个[合适的]方法作为答案)
范围识别未锁定细胞的方法
Sub SelectUnlockedCells()
`http://www.extendoffice.com/documents/excel/1053-excel-identify-select-locked-cells.html
Dim WorkRange As Range
Dim FoundCells As Range
Dim Cell As Range
On Error GoTo SelectUnlockedCells_Error
Set WorkRange = ActiveSheet.UsedRange
For Each Cell In WorkRange
If Cell.Locked = False Then
If FoundCells Is Nothing Then
Set FoundCells = Cell
Else
Set FoundCells = Union(FoundCells, Cell)
End If
End If
Next Cell
If FoundCells Is Nothing Then
MsgBox "All cells are locked."
Else
FoundCells.Select
End If
On Error GoTo …Run Code Online (Sandbox Code Playgroud) 我有一个从数据透视表中提取数据的图表,因此我得到了一个计数分布(A类中有多少,B中有多少,C中有多少等)
但在每个栏上方,我也希望显示整体的百分比.因此,举例来说,我可能会说"这个类别A的栏显示我们显然有2000个,但看到栏顶上的数字,它只占总数的15%"
这有意义吗?
excel ×7
vba ×7
excel-vba ×2
powerpoint ×2
add-in ×1
charts ×1
excel-addins ×1
ms-access ×1
outlook ×1
outlook-vba ×1
paste ×1
subdirectory ×1
vbscript ×1
wsh ×1