问题陈述
在VBA中,如果使用管理员权限注册了某些ocx,则可以使用三种主要的日期时间控件.这些是VB6控件,并不是VBA环境的原生.要安装Montview控件和日期时间选择器,我们需要设置对Microsoft MonthView Control 6.0(SP4)的引用,该引用只能通过提升的mscomct2.ocx注册来访问.同样适用于mscal.ocx和mscomctl.ocx.话虽如此,不推荐使用的mscal.ocx可能适用于Windows 10,也可能不适用.
根据您的Windows和Office版本(32位或64位),注册这些ocx可能会非常痛苦.
该MonthView控件,日期时间选择器和过时日历控件看起来像下面.
那么如果我将这些问题包含在我的应用程序中,我会遇到什么问题?
如果将它们包含在项目中并将它们分发给您的朋友,邻居,客户等,则应用程序可能会也可能不会起作用,具体取决于它们是否安装了这些ocx.
因此,最好不要在项目中使用它们
我有什么选择?
这个日历使用Userform和Worksheet,之前已经提出过,并且非常基本.
当我看到从系统托盘点击日期和时间时弹出的Windows 10日历时,我忍不住想知道我们是否可以在VBA中复制它.
这篇文章是关于如何创建一个不依赖于任何ocx或32bit/64bit 的日历小部件,并且可以随项目自由分发.
这就是日历在Windows 10中的样子:
这就是你与它互动的方式:
我正在寻找一种方法来自动将VBA文本框中的日期格式化为MM/DD/YYYY格式,我希望它在用户输入时格式化.例如,一旦用户键入第二个数字,程序将自动输入"/".现在,我使用以下代码完成了这项工作(以及第二个破折号):
Private Sub txtBoxBDayHim_Change()
If txtBoxBDayHim.TextLength = 2 or txtBoxBDayHim.TextLength = 5 then
txtBoxBDayHim.Text = txtBoxBDayHim.Text + "/"
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,这在打字时效果很好.但是,当尝试删除时,它仍然以破折号输入,因此用户无法删除其中一个短划线(删除破折号会导致长度为2或5,然后再次运行该子,添加另一个破折号).有关更好的方法的任何建议吗?
如何从vb宏取消保护我的VB项目?我找到了这段代码:
Sub UnprotectVBProject(ByRef WB As Workbook, ByVal Password As String)
Dim VBProj As Object
Set VBProj = WB.VBProject
Application.ScreenUpdating = False
'Ne peut procéder si le projet est non-protégé.
If VBProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = VBProj
'Utilisation de "SendKeys" Pour envoyer le mot de passe.
SendKeys Password & "~"
SendKeys "~"
'MsgBox "Après Mot de passe"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
Application.Wait (Now + TimeValue("0:00:1"))
End Sub
Run Code Online (Sandbox Code Playgroud)
但是此解决方案不适用于Excel 2007.它在我的IDE中显示验证的窗口和打印密码.
然后,我的目标是取消保护我的VBproject而不显示此窗口.
谢谢你的帮助.
我是easymock的新手.
我试图模拟一个服务,其中一个方法是一个void方法,将被称为未知(和大)次数.如何指定允许任意数量的呼叫?
我知道如何为具有非void返回类型的方法执行此操作.
谢谢
我见过很多人相信以下内容
VBA将所有整数值转换为Long类型
事实上,即使是MSDN文章也说
"但是,在最近的版本中,VBA将所有整数值转换为Long类型,即使它们被声明为Integer类型."

这怎么可能?考虑这个简单的例子.
Sub Sample()
Dim I As Integer
I = 123456789
End Sub
Run Code Online (Sandbox Code Playgroud)
如果VBA将所有Integer值转换为类型,Long 即使它们被声明为Integer类型,那么上面的代码永远不会给你Overflow错误!
我在这里错过了什么?或者,我是否应该认为该陈述是错误的并且在开头时注意到该链接所说的内容
我正在尝试获取一个我在excel userform表单上动态创建的按钮来运行一个宏transfer,我在Module 1项目的"模块"部分编写了这个宏.
下面我已经粘贴了我迄今为止在userform中编写的代码,它实际上设法Transfer to Sheet在框架中创建按钮(我也是动态创建的)但是出于某种原因,当我运行VBA时,我得到一条438 error消息说Object doesn't support this property or method.
谁能告诉我怎么解决这个问题?
这是代码:
Dim framecontrol1 As Control
Set workitemframe = Controls.Add("Forms.Frame.1")
With workitemframe
.Width = 400
.Height = 400
.Top = 160
.Left = 2
.ZOrder (1)
.Visible = True
End With
workitemframe.Caption = "Test"
Set framecontrol1 = workitemframe.Controls.Add("Forms.commandbutton.1")
With framecontrol1
.Width = 100
.Top = 70
.Left = 10
.ZOrder (1)
.Visible = True
.Caption …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Workbooks.Open处理目录中包含的大量文件.但是打开和关闭这些文件会使文件出现在任务栏中,我希望避免不断闪烁.
我得到了一个建议,我可以CreateObject用来创建一个新实例,因为它打开一个隐藏的新Excel实例.
在性能方面打开新工作簿的两种方式之间是否还有其他差异?
另外,我应该只使用一个使用Excel创建的实例CreateObject来打开所有工作簿,还是需要为每个必须处理的工作簿创建一个实例(这似乎浪费了大量的内存和更低的速度)?
我正在为excel开发一个需要很长时间才能运行的应用程序,所以最好弹出一个进度条并给出一些进度指示.我Statusbar在Excel 中查看该属性,它似乎涵盖了我需要的东西,除了它不是很明显,即它是左下角的一个小小的通知,我没想到我不会注意到我发现它非常不令人满意.
有没有办法让状态栏弹出一个新的MsgBox样式窗口,类似于您在Windows上进行文件传输时的预期?实际显示在excel表中的进度条类型对象(如此示例中)并不理想,我正在寻找更好的解决方案.
我在Windows上使用Office 2010.
在java我有:
public class MyClass{
public enum STATUS {
ZERO,
ONE ,
TWO
}
public native STATUS nativeGetStatus();
...
private STATUS state = nativeGetStatus(); //returns enum
private STATUS state2 = nativeGetStatus(); //returns enum
}
Run Code Online (Sandbox Code Playgroud)
我希望本机方法'nativeGetStatus'返回此枚举值.
JNI返回整数并与java中的枚举值进行比较是一个选项,但是想知道是否可以通过jobject返回值并将其直接分配给状态?如果有,怎么样?