2015-06-30 22 views
0

是否有任何方法可以在MonthView控件中删除指示今天的小红色圆圈?我一直在做一些谷歌搜索,最近我发现是this,这似乎包含一个解决方案,但在VB6中,而不是VBA。此外,查看上传到该文章的各种文件,我无法理解哪个部分正在删除该圆圈,如果可以在Excel-VBA中使用相同的解决方案,则不会了解。在MonthView控件中删除指示今天的圆圈

任何关于我是否希望能做的投入都将非常感激。

+1

这就是我所谓的“A从过去爆炸“:D是的,你可以使用API​​来实现,但你可能想看到[This](http://stackoverflow.com/questions/12012206/formatting-mm-dd-yyyy-dates-in-textbox -in-VBA/12013961#12013961)。这是一个更简单的选择。 –

+0

@SiddharthRout感谢您的建议:)我有点意识到另一种选择,我在使用[此用户制作的控件](https://sites.google.com/site/e90e50/calendar-control-class) 。我希望这次可以保持简单,不需要添加任何额外的模块或类,但是如果另一种选择开始混淆API,则可以更简单地复制到其他控件中。 – eirikdaude

回答

1

这是非常简单的使用API​​:

添加到您的用户窗体的顶部:

Private Declare Function GetWindowLong Lib "user32" _ 
    Alias "GetWindowLongA" (_ 
    ByVal hWnd As Long, _ 
    ByVal nIndex As Long) As Long 
Private Declare Function SetWindowLong Lib "user32" _ 
    Alias "SetWindowLongA" (_ 
    ByVal hWnd As Long, _ 
    ByVal nIndex As Long, _ 
    ByVal dwNewLong As Long) As Long 

Private Const GWL_STYLE As Long = -16 
Private Const MCS_NOTODAYCIRCLE As Long = 8 

并使用它来删除它:

Private Sub UserForm_Initialize() 

    With Me.MonthView1 
    SetWindowLong .hWnd, GWL_STYLE, GetWindowLong(.hWnd, GWL_STYLE) Or MCS_NOTODAYCIRCLE 
    End With 

End Sub 
+0

使用此解决方案,我得到'.SetWindowLong ...',“方法或数据成员未找到”行上的编译错误。我认为这意味着函数'SetWindowLong'不存在于我的user32库? – eirikdaude

+0

您可能需要更改'With Me.MonthView1'以匹配表单上控件的名称。另一个考虑因素可能是您是否使用32位或64位Excel。 – joehanna

+0

是的,我已经更改了控件的名称,并且正在运行Excel 2013,32位版本。不过,我看了一下[Microsoft的SetWindowLong支持页面](https://msdn.microsoft.com/en-us/library/windows/desktop/ms633591%28v=vs.85%29.aspx),它似乎他们推荐使用指针函数呢?我假设我唯一需要做的事情就是在声明中加入“指针”等来代替它?最后我不太明白你函数中的'Or'语句是什么 - 你会善意地尝试解释吗? – eirikdaude