小编Pow*_*ser的帖子

自定义VBA函数中的intellisense功能?

在用于VBA的标准IDE中,intellisense内置于许多标准VBA功能中.即,msgbox()的按钮变量为您提供了如何显示消息框的选项列表.这样,开发人员不必在每次使用函数时记住或查找选项.

我可以为自定义VBA功能实现相同的功能吗?这是一个粗略的例子,但我能写出类似的东西:

Public Function DoSomething(X as string)(Options X="Opt1","Opt2") as variant
...

当我调用这个函数时,我会得到一个弹出窗口,为X选择Opt1和Opt2

intellisense ms-access vba

4
推荐指数
1
解决办法
2352
查看次数

Excel 2007和Excel 2010之间的下拉列表兼容性问题

我准备了一个电子表格,我在几个单元格中使用了下拉列表命令(数据验证,列表).我需要提供同一电子表格的两个版本:一个保存为Excel 2007文件,另一个保存为Excel 2010文件.

如果我使用Excel 2010打开Excel 2007文件,在我插入下拉列表的单元格中,对包含列表的单元格的引用会以某种方式更改,并且下拉列表会显示错误的数据.

例如,如果我指定使用列表中的数据作为单元格C20:C25的值,当我使用Excel 2010打开文件时,单元格将更改为D15:D20.我没有发现参考细胞"移位"的趋势.

如果不将Excel 2007仅用于2007文件而Excel 2010用于2010文件,如何防止出现这种情况?

excel

4
推荐指数
2
解决办法
7万
查看次数

如何在同一查询的另一个字段中使用计算字段

我有几十个字段的选择查询."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)

(我知道一个选项是将数据转储到临时表中,然后更新该临时表.但这种方式会破坏"简化"的概念)

sql sql-server sql-server-2008 sql-server-2008-r2

4
推荐指数
1
解决办法
5358
查看次数

在Visual Studio 2010中为不同版本的Crystal Report构建.NET应用程序

如何在Visual Studio中构建针对不同版本或Crystal Reports较低版本的.NET应用程序。

客户端计算机包含Crystal Report 9运行时以及已安装的设计器。

现在,它运行一个.NET应用程序,该应用程序在Visual Studio 2008/2010中使用Crystal Report组件,该组件针对Crystal Report 9,而不安装除上述之外的任何其他运行时。如果是,怎么办?

.net visual-studio-2010 crystal-reports

3
推荐指数
1
解决办法
3392
查看次数

VBA脚本关闭除自身以外的所有Excel实例

我的错误处理函数中有一个子例程,该例程试图关闭在每个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进行此操作?

ms-access vba

3
推荐指数
1
解决办法
2万
查看次数

在VBA中,不能使用Access.Application对象

这不起作用:

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的另一台机器上很好.

registry ms-access vba

2
推荐指数
1
解决办法
1万
查看次数

在MS Access Maketable查询中,如何创建自动编号字段?

我在Access数据库中有一个可以使用自动编号字段的Maketable查询.我无法找到适合我目的的内置功能.我需要自己写吗?理想情况下,我只想在Access设计器中创建一个字段"Autonum:CreateAutoNumber()"

编辑:如果在查询本身无法完成,我也可以在之后运行一个程序.

ms-access vba

2
推荐指数
1
解决办法
2万
查看次数

在SQL查询中if/then循环效率低下

我想清理始终使用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秒.为什么这花了这么长时间,有一个简单的方法吗?

sql sql-server sql-server-2008

2
推荐指数
1
解决办法
86
查看次数

VBA中是否有NotIn("A","B")功能?

我正在编写一个需要输入的函数,我的数据验证看起来很尴尬.如果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

看到?这种方式更容易阅读和维护.但我不知道该怎么做.

ms-access vba access-vba

1
推荐指数
1
解决办法
480
查看次数

水晶报告隐藏边框打印

当我尝试进行打印时(使用Crystal Report Viewer的"打印"选项),它会显示子报表周围的边框.我该怎么做才能隐藏边框?

crystal-reports

0
推荐指数
1
解决办法
4371
查看次数