Vba 蒙特维尤将每一个值都加粗
我在表单中创建了一个Monthview和TimePicker。我希望用户选择时间,并选择一个月,该月将加粗每次选择的值,然后选择确定,将插入该值。这一切我都做得很好。问题是,如果用户选择了一个日期,然后选择了另一个日期,或者另一个日期,那么所有日期都将变为粗体。我希望粗体仅在最近的每次单击之后显示。。如果这是有意义的,那么用户就知道他选择了什么价值 这是我的点击代码:Vba 蒙特维尤将每一个值都加粗,vba,excel,monthcalendar,Vba,Excel,Monthcalendar,我在表单中创建了一个Monthview和TimePicker。我希望用户选择时间,并选择一个月,该月将加粗每次选择的值,然后选择确定,将插入该值。这一切我都做得很好。问题是,如果用户选择了一个日期,然后选择了另一个日期,或者另一个日期,那么所有日期都将变为粗体。我希望粗体仅在最近的每次单击之后显示。。如果这是有意义的,那么用户就知道他选择了什么价值 这是我的点击代码: Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
Dim x As Date
x = MonthView1.value
MonthView1.DayBold(x) = True ' Bold the date
End Sub
我需要什么方法?是否存在某种最近单击的属性?请尝试以下代码:
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
Dim x As Date
Dim MaxDate As Date
Dim MinDate As Date
MinDate = DateSerial(Year(DateClicked), Month(DateClicked), 1) 'Get first date of current month based on clicked date
MaxDate = DateSerial(Year(DateClicked), Month(DateClicked) + 1, 0) 'Get last date of current month based on clicked date
x = ActiveCell.Value 'Retreive value of last Bold date
If x >= MinDate And x <= MaxDate Then 'If last Bold date is in the current month then unbold it
MonthView1.DayBold(x) = False
End If
MonthView1.DayBold(DateClicked) = True 'Bold the clicked date
ActiveCell.Value = DateClicked 'Store current date in a sheet
End Sub
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
Dim x作为日期
Dim MaxDate作为日期
昏昏欲睡
MinDate=DateSerial(年份(DateClicked),月份(DateClicked),1)“根据单击的日期获取当前月份的第一个日期
MaxDate=DateSerial(年(DateClicked),月(DateClicked)+1,0)“根据单击的日期获取当前月份的最后日期
x=ActiveCell.Value“检索上次粗体日期的值”
如果x>=MinDate和x在MonthView中加粗一点
'<code>
Private Sub CommandButton1_Click()
Dim Ss(50) As Boolean
'put in module DaysToBold$ and DatesToBold$ as public variables
DaysToBold = "713" ' sat Sun Tue
' DaysToBold = "" ' for none
DatesToBold = "x,1,2,12,22,30"
' DatesToBold = "x" ' if none
MonthView21_GetDayBold Now, 49, Ss
End Sub
Private Sub MonthView21_GetDayBold(ByVal StartDate As Date, _
ByVal Count As Integer, State() As Boolean)
Dim I As Integer, Mi%, DTB, DI%, DAd%
On Error Resume Next ' seem to be negative indices into State() even if declared ( -10 to 50)
For Mi = 1 To Len(DaysToBold) ' mark of the Days of week to bold
I = Mid(DaysToBold, Mi, 1) ' single digits 1 ..7 excel translate to integer
While I < Count
State(I - MonthView21.StartOfWeek) = True
I = I + 7 ' down the column
Wend
Next Mi
DTB = Split(DatesToBold, ",")
If UBound(DTB) > 0 Then
With MonthView21
For I = 1 To UBound(DTB) ' mark the date numbers to bold
DI = Weekday(DateSerial(Year(.Value), Month(.Value), 1), .StartOfWeek)
If DI = 1 Then DAd = 5 Else DAd = -2 ' 7 days of last month there if Di=1
State(DTB(I) + DI + DAd) = True
Next I
End With
End If
End Sub
'</code>
”
私有子命令按钮1_单击()
将Ss(50)设置为布尔值
'将模块DaysToBold$和DatesToBold$作为公共变量放入
DaysToBold=“713”周六-周日-周二
“DaysToBold=”“”不适用
DatesToBold=“x,1,2,12,22,30”
'DatesToBold=“x”'如果没有
MonthView21_GetDayBold现在,49岁,党卫军
端接头
私人分月VIEW21_GetDayBold(ByVal StartDate作为日期_
ByVal计数为整数,State()为布尔值)
Dim I为整数、Mi%、DTB、DI%、DAd%
“错误时继续下一步”似乎是状态()的负索引,即使已声明(-10到50)
对于Mi=1至Len(DaysToBold),将一周中的几天标记为粗体
I=Mid(DaysToBold,Mi,1)'个位数1..7 excel转换为整数
当我数的时候
状态(I-MonthView21.StartOfWeek)=真
I=I+7'沿柱向下
温德
下一个Mi
DTB=拆分(日期以粗体“,”号填列)
如果UBound(DTB)>0,则
和MonthView21
对于I=1至UBound(DTB),将日期编号标记为粗体
DI=工作日(日期序列(年(.Value),月(.Value),1),.StartOfWeek)
如果DI=1,则DAd=5;如果DI=1,则DAd=-2'上个月的7天
状态(DTB(I)+DI+DAd)=真
接下来我
以
如果结束
端接头
“
Nice Fix Zeno。对于第一个x=I,只需将其设置为x=ActiveCell.value,无需查找特定的单元格。问题是:如果我选择一个日期,它会被填充,一切都好。如果我重新单击单元格并在另一个月内选择另一个日期,它会将代码错误地显示为“指定的日期不属于MinDate和MaxDate属性”。除非我更改页面并选择其他月份,否则不会发生此错误。。为什么会发生这种情况?没关系,我只是放了一个错误处理程序,它解决了它!伟大的解决方案芝诺!很抱歉花了这么长时间才回复。我很高兴你找到了解决这个问题的办法。我对最初发布的代码进行了编辑,以克服这一问题。据我所知,问题在于,当您选择另一个月的日期时,最小和最大日期将更改为该月的第一个和最后一个日期,因此,当我们尝试格式化另一个月的日期时,会出现错误。同时,应用于其他月份日期的任何格式都将丢失。因此,如果选择与上一个日期在同一个月的日期,我们只需要删除格式,否则什么也不做。