gpt4 book ai didi

VBA代码简化

转载 作者:行者123 更新时间:2023-12-03 00:22:10 24 4
gpt4 key购买 nike

我有以下宏

Private Sub ComboBox1_Change()

If ComboBox1 = "Berlin" Then

Range("C20").Activate

Else
If ComboBox1 = "Paris" Then

Range("C100").Activate

Else
If ComboBox1 = "London" Then

Range("C150").Activate

End If
End If
End If

End Sub

该宏从下拉菜单中获取值并转到该值所在的单元格。第一个问题是:

如何从单元格中获取值而不是专门将它们写入代码中?

第二个问题是:

如何简化程序而不是为每个值都编写 IF?

最佳答案

首先,您可能实际上并不想激活范围!看这个答案: How to avoid using Select in Excel VBA macros

其次,你的代码...

您的代码

Private Sub ComboBox1_Change()

If ComboBox1 = "Berlin" Then

Range("C20").Activate

Else

If ComboBox1 = "Paris" Then

Range("C100").Activate
Else

If ComboBox1 = "London" Then

Range("C150").Activate

End If

End If

End If

End Sub

使用 ElseIf

Private Sub ComboBox1_Change()

If ComboBox1 = "Berlin" Then

Range("C20").Activate

ElseIf ComboBox1 = "Paris" Then

Range("C100").Activate

ElseIf ComboBox1 = "London" Then

Range("C150").Activate

End If

End Sub

参见文档:https://msdn.microsoft.com/en-us/library/office/gg251599.aspx

不对值进行硬编码

Private Sub ComboBox1_Change()

Dim rng as Range
Set rng = Nothing
Set rng = ActiveSheet.Range("C:C").Find(ComboBox1.Text)

If Not rng Is Nothing Then
' As I say, you probably don't actually want to use Activate!
rng.Activate

End If

End Sub

在此处查看有关 Range 对象的更多信息:

https://msdn.microsoft.com/en-us/library/office/ff838238.aspx

它具有 VBA 中常用的有用方法,例如 AddressValueFind 函数返回一个 Range 对象,如果在给定范围内未找到给定值,则返回 Nothing

关于VBA代码简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41763907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com