怎么样?我是 VBA 的初学者,我一直试图弄清楚如何解决以下问题,但我就是做不到。所以,我将解释我在 VBA 中的挣扎,希望你们能找到解决方案。 我有一个带有 3 个选项按钮的用户表单。我有每个选项按钮的代码,它们非常相似。在我的工作流程中,我需要复制用户表单,因为基本上,我每次都会使用相同的结构,但在不同的单元格中。我将发布一张照片,以便大家更好地理解。下图是其中一个选项按钮的代码:
到目前为止,一切都很好,代码完全按照预期工作。但是,由于我需要复制用户表单,因为我将在其他单元格中使用相同的结构,如果我有一些通用声明将应用于我的用户表单具有的所有选项按钮,就像“全局”一样工作,那么会更容易我的用户表单具有的所有选项按钮的“变量”。所以,我想做的是:
当我声明如上图所示的通用变量时,代码会崩溃以识别“set Rng1 = Range(“AK5”)”。那么,你们知道如何解决这个问题吗?我想这并不复杂,我只是不知道如何在用户窗体中声明一般声明。我将在下面发布每个选项按钮的代码:
**OptionButton1:**
'Where it's going to copy
Dim Rng1 As Range
Set Rng1 = Range("AK5")
'Where it's going to past
Dim Rng2 As Range
Set Rng2 = Range("H24")
'Name Userform
Dim myUF As Object
Set myUF = zzzz22
Application.ScreenUpdating = False
Rng1.Select
Selection.Copy
Rng2.Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True
Unload myUF
ActiveSheet.Shapes.Range(Array("Rectangle 2")).Select
**OptionButton2:**
'Where it's going to copy
Dim Rng1 As Range
Set Rng1 = Range("AK5")
'Where it's going to past
Dim Rng2 As Range
Set Rng2 = Range("H24")
'Name Userform
Dim myUF As Object
Set myUF = zzzz22
Application.ScreenUpdating = False
Rng1.Offset(1, 0).Select
Selection.Copy
Rng2.Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True
Unload myUF
ActiveSheet.Shapes.Range(Array("Rectangle 2")).Select
**OptionButton 3:**
'Where it's going to copy
Dim Rng1 As Range
Set Rng1 = Range("AK5")
'Where it's going to past
Dim Rng2 As Range
Set Rng2 = Range("H24")
'Name Userform
Dim myUF As Object
Set myUF = zzzz22
Application.ScreenUpdating = False
Rng1.Offset(2, 0).Select
Selection.Copy
Rng2.Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Application.ScreenUpdating = True
Unload myUF
ActiveSheet.Shapes.Range(Array("Rectangle 2")).Select
我的工作流程方式是,每次复制新的用户表单时,我都必须更改每个选项按钮的单元格值。如果我设法拥有一个将应用于三个选项按钮的通用声明,我的工作流程将会更快,因为我只需更改通用声明的单元格,并且该声明也将应用于每个选项按钮一下子。 希望我说清楚了,如果你们有什么问题,我会回答。感谢您的关注!!
它可以这样构造,使用范围地址的常量:
Const RNG_1 As String = "AK5"
Const RNG_2 As String = "H24"
Private Sub OptionButton1_Click()
Application.ScreenUpdating = False
With ActiveSheet
.Range(RNG_1).Copy .Range(RNG_2)
.Shapes("Rectangle 2").Select
End With
Unload Me
End Sub