我已经部分地处理了调用2出现在组合框中的另一个值。但是,我的工作是可以重复的(366个宏)(一年)。是否可以使用一些更短,更方便的代码来处理它?</ p>
基本上,我有: 列C ->已在组合框中分配为列表索引 D列和E列在组合框中都被称为一个宏(例如,对于1.01,C1和D1如下代码所示) '一月
Sub jan01()
Range("A5").Value = "=D1"
Range("B5").Value = "=E1"
End Sub
Sub jan02()
Range("A5").Value = "=D2"
Range("B5").Value = "=E2"
End Sub
Sub jan03()
Range("A5").Value = "=D3"
Range("B5").Value = "=E3"
End Sub
Sub jan04()
Range("A5").Value = "=D4"
Range("B5").Value = "=E4"
End Sub
Sub jan05()
Range("A5").Value = "=D5"
Range("B5").Value = "=E5"
End Sub
Sub jan06()
Range("A5").Value = "=D6"
Range("B5").Value = "=E6"
End Sub
Sub jan07()
Range("A5").Value = "=D7"
Range("B5").Value = "=E7"
End Sub
Sub jan08()
Range("A5").Value = "=D8"
Range("B5").Value = "=E8"
End Sub
Sub jan09()
Range("A5").Value = "=D9"
Range("B5").Value = "=E9"
End Sub
Sub jan10()
Range("A5").Value = "=D10"
Range("B5").Value = "=E10"
'...
End Sub
要使用组合框运行它,我使用了“ case”选项:
Private Sub DateBox1_Change()
Select Case DateBox1
Case "1.01": jan01
Case "2.01": jan02
Case "3.01": jan03
Case "4.01": jan04
Case "5.01": jan05
Case "6.01": jan06
Case "7.01": jan07
Case "8.01": jan08
Case "9.01": jan09
Case "10.01": jan10
'...
End Select
End Sub
我按照图片使用了与旋转按钮链接的组合框。强文本 我将不胜感激。
提前谢谢
答案 0 :(得分:2)
如果您知道ComboBox已分配/与C列中的日期列表对齐,那么您所要做的就是使用.ListIndex
属性来查找选择列表中的哪个项目。一旦有了它,那就是您的行值。简单又好...
Private Sub DateBox1_Change()
If DateBox1.ListIndex >=0 then ' If the selection in invalid it will be -1
Range("A5").Value = "=D" & DateBox1.ListIndex + 2
Range("B5").Value = "=E" & DateBox1.ListIndex + 2
End if
End Sub
答案 1 :(得分:0)
不确定D&E的值是什么,但是您可以执行以下操作
Range("A5").Value = range("d1").offset(datediff("d",dateserial(2018,1,1),dateserial(2018,split(DateBox1,".")(1)-1,split(DateBox1,".")(0))),0)
或
Range("A5").Value = "=" & range("d1").offset(datediff("d",dateserial(2018,1,1),dateserial(2018,split(DateBox1,".")(1)-1,split(DateBox1,".")(0))),0).address
答案 2 :(得分:0)
类似的事情可能对您有用。
Option Explicit
Public Sub ProcessDay(ByRef ws As Worksheet, ByVal dayNumber As Long)
ws.Cells(5, "A").Value = "=" & ws.Cells(dayNumber, "D").Address(0, 0)
ws.Cells(5, "B").Value = "=" & ws.Cells(dayNumber, "E").Address(0, 0)
End Sub
您可以这样称呼它:
Private Sub DateBox1_Change()
Dim dayNum As Long
dayNum = dayNum = WorksheetFunction.Days(DateValue(Replace(DateBox1,".","/")), DateValue("1/1"))
Call ProcessDay(Sheet1, dayNum)
End Sub
基本上,其工作方式是在DateBox1_Change()
代码中,我们将10.01
之类的文本转换为“ 10/01”之类的日期。然后,我们将该日期字符串转换为日期,并确定距1月1日已有多少天。
请注意,这假定日期时间设置中的“ 10/01”表示1月1日。对我来说,这意味着10月1日,我需要用另一种方式来处理文本,以使其对我有用。请告诉我这是否对您有效,因为它似乎表明我的日期时间设置与您的日期设置不一样。