在用于VBA的标准IDE中,intellisense内置于许多标准VBA功能中.即,msgbox()的按钮变量为您提供了如何显示消息框的选项列表.这样,开发人员不必在每次使用函数时记住或查找选项.
我可以为自定义VBA功能实现相同的功能吗?这是一个粗略的例子,但我能写出类似的东西:
Public Function DoSomething(X as string)(Options X="Opt1","Opt2") as variant
...
当我调用这个函数时,我会得到一个弹出窗口,为X选择Opt1和Opt2
我准备了一个电子表格,我在几个单元格中使用了下拉列表命令(数据验证,列表).我需要提供同一电子表格的两个版本:一个保存为Excel 2007文件,另一个保存为Excel 2010文件.
如果我使用Excel 2010打开Excel 2007文件,在我插入下拉列表的单元格中,对包含列表的单元格的引用会以某种方式更改,并且下拉列表会显示错误的数据.
例如,如果我指定使用列表中的数据作为单元格C20:C25的值,当我使用Excel 2010打开文件时,单元格将更改为D15:D20.我没有发现参考细胞"移位"的趋势.
如果不将Excel 2007仅用于2007文件而Excel 2010用于2010文件,如何防止出现这种情况?
我有几十个字段的选择查询."FieldA"是一个大约10行高的Case语句.我现在必须创建一个"FieldB",它使用相同的Case语句加一个常量.
根据我目前对sql-server的了解,我必须重复两次Case语句(一次用于FieldA,一次用于FieldB).要清理我的代码,如何在FieldB的计算中使用fieldA?
理想情况下,我的代码看起来像这样:
Select
Case ...
When ... then ...
When ... then ...
When ... then ...
End as FieldA,
FieldA + 1 as FieldB
From TblSource
Run Code Online (Sandbox Code Playgroud)
(我知道一个选项是将数据转储到临时表中,然后更新该临时表.但这种方式会破坏"简化"的概念)
如何在Visual Studio中构建针对不同版本或Crystal Reports较低版本的.NET应用程序。
客户端计算机包含Crystal Report 9运行时以及已安装的设计器。
现在,它运行一个.NET应用程序,该应用程序在Visual Studio 2008/2010中使用Crystal Report组件,该组件针对Crystal Report 9,而不安装除上述之外的任何其他运行时。如果是,怎么办?
我的错误处理函数中有一个子例程,该例程试图关闭在每个Excel实例中打开的每个工作簿。否则,它可能会保留在内存中并破坏我的下一个vbscript。它还应关闭每个工作簿而不保存任何更改。
Sub CloseAllExcel()
On Error Resume Next
Dim ObjXL As Excel.Application
Set ObjXL = GetObject(, "Excel.Application")
If Not (ObjXL Is Nothing) Then
Debug.Print "Closing XL"
ObjXL.Application.DisplayAlerts = False
ObjXL.Workbooks.Close
ObjXL.Quit
Set ObjXL = Nothing
Else
Debug.Print "XL not open"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,此代码并非最佳。例如,它可以在一个Excel实例中关闭2个工作簿,但是如果您打开2个excel实例,则只能关闭1个。
如何重写此代码以关闭所有 Excel,而不保存任何更改?
如何在不关闭承载此脚本的Access文件的情况下对Access进行此操作?
这不起作用:
Sub X()
Dim A As Access.Application
Set A = CreateObject("Access.Application")
'Do Stuff
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,这个DOES工作:
Sub X()
Dim A As Object
Set A = CreateObject("Access.Application")
'Do Stuff
End Sub
Run Code Online (Sandbox Code Playgroud)
我知道他们几乎做了同样的事情,但任何人都可以告诉我如何制作access.application对象?我应该补充一点,我有Crystal Reports 11,在我上次升级时,它可能有'未注册'的一些VBA DLL.
(2009-06-29更新)
在回答前两个问题时,我正在使用MS Access VBA来控制其他一些Access和Excel文件.由于这只能在我的本地机器上运行,我可以保证始终安装Access.我还引用了"Microsoft Access 11.0对象库"(MSACC.OLB).
我知道有解决方法,即在编码时使用早期绑定,并在运行时切换到后期绑定,我只是不明白为什么早期绑定方法在我的机器上根本不起作用(当然,代码工作原理)在Access的另一台机器上很好.
我在Access数据库中有一个可以使用自动编号字段的Maketable查询.我无法找到适合我目的的内置功能.我需要自己写吗?理想情况下,我只想在Access设计器中创建一个字段"Autonum:CreateAutoNumber()"
编辑:如果在查询本身无法完成,我也可以在之后运行一个程序.
我想清理始终使用Management Studio手动运行的SQL查询的结果.但我的if/then循环比单个元素花费的时间长得多.
目前,此Select语句立即运行(少于1秒)并且通常为空:
Select * from A join B on A.id=B.id
Run Code Online (Sandbox Code Playgroud)
如果没有结果,我想显示一条消息而不是空结果集(这是更大的多部分查询的一部分,因此清晰度会有所帮助).我改成了这个:
If (Select count(*) from A join B on A.id=B.id)>0
begin
Select * from A join B on A.id=B.id
end
else
Select 'No Results'
Run Code Online (Sandbox Code Playgroud)
因为那里的两个Select语句都在附近运行(我检查过),所以我希望整个代码段在相同的时间内运行.相反,它需要EIGHT秒.为什么这花了这么长时间,有一个简单的方法吗?
我正在编写一个需要输入的函数,我的数据验证看起来很尴尬.如果InputFld不是"A","B"或"C",则表示错误:
If InputFld <>"A" and InputFld<>"B" and InputFld<>"C" then goto ErrorHandler
这对我来说太丑了.有更优雅的解决方案吗?我想写一些类似的东西:
If InputFld not in ("A","B","C") then goto ErrorHandler
看到?这种方式更容易阅读和维护.但我不知道该怎么做.
当我尝试进行打印时(使用Crystal Report Viewer的"打印"选项),它会显示子报表周围的边框.我该怎么做才能隐藏边框?
ms-access ×5
vba ×5
sql ×2
sql-server ×2
.net ×1
access-vba ×1
excel ×1
intellisense ×1
registry ×1