我已经部分地处理了调用2,另一个值出现在组合框中。然而,我的工作是可重复的(366个宏)(1年)。是否可以使用一些更短、更方便的代码来处理它?
基本上,我已经将列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我使用了与旋转按钮链接的组合框,如图中所示。强文本,我将非常感谢您的帮助。
提前谢谢你
发布于 2018-08-13 13:59:43
如果您知道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发布于 2018-08-13 13:54:21
不确定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
发布于 2018-08-13 13:54:39
像这样的东西可能对你有用。
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日,我需要用另一种方式来操纵文本,让它对我起作用。请让我知道,如果这对你有用,因为它接缝,我的约会时间设置不像你。
https://stackoverflow.com/questions/51823773
复制相似问题