【发布时间】:2020-12-01 11:57:07
【问题描述】:
我对 VBA 和一般编码比较陌生,所以如果我的语言不准确,请多多包涵。
我正在尝试创建一个双向单位转换器,它可以双向工作,就像您可以在 google 上找到的那样。 (例如:https://www.google.com/search?safe=off&rlz=1C1CHBF_enUS902US902&sxsrf=ALeKk01haz9HbWVojCtcIMszToBVE-cDfg%3A1597171511150&ei=N-cyX97eCLivytMP17usiA8&q=google+unit+converter&oq=google+converter&gs_lcp=CgZwc3ktYWIQARgAMgQIABBHMgQIABBHMgQIABBHMgQIABBHMgQIABBHMgQIABBHMgQIABBHMgQIABBHUABYAGDSFmgAcAJ4AIABAIgBAJIBAJgBAKoBB2d3cy13aXrAAQE&sclient=psy-ab)
我能够创建一个将英寸转换为英尺的方法,反之亦然,使用以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("B7,D7"), Target) Is Nothing Then
Application.EnableEvents = False
If IsNumeric(Target) Then
Select Case Target.Address(0, 0)
Case "B7": Range("D7").Value = [Convert(B7, "in", "ft")]
Case "B8": Range("D8").Value = [Convert(B8, "in", "ft")]
End Select
Else
Range("B7,D7").ClearContents
End If
Application.EnableEvents = True
End If
End Sub
因此,如果我在单元格 B7 中输入英寸的“12”,它会将单元格 D7 更改为英尺的“1”。同样,在 D7 中键入“2”英尺会在 B7 中得到“24”英寸
我想将此宏应用于多行(在我的情况下,三个行对长度、宽度和高度执行相同的操作);经过足够的摆弄,我想出了以下内容
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("B7:B9,D7:D9"), Target) Is Nothing Then
Application.EnableEvents = False
If IsNumeric(Target) Then
Select Case Target.Address(0, 0)
Case "B7": Range("D7").Value = [Convert(B7, "in", "ft")]
Case "B8": Range("D8").Value = [Convert(B8, "in", "ft")]
Case "B9": Range("D9").Value = [Convert(B9, "in", "ft")]
Case "D7": Range("B7").Value = [Convert(D7, "ft", "in")]
Case "D8": Range("B8").Value = [Convert(D8, "ft", "in")]
Case "D9": Range("B9").Value = [Convert(D9, "ft", "in")]
End Select
Else
Range("B7:B9,D7:D9").ClearContents
End If
Application.EnableEvents = True
End If
End Sub
但是,我确信有一种更有效的方法可以应用此公式。如果我想要 100 行不同的参数来应用它,我必须手动编辑脚本的“案例”部分两倍的次数。我将如何概括该编辑问题?我将非常感谢您对此事的任何见解!
【问题讨论】: