【问题标题】:Form Option Button Excel VBA Not Working表单选项按钮 Excel VBA 不工作
【发布时间】:2016-04-03 05:32:57
【问题描述】:

我正在尝试使用多个表单选项按钮,如下面的代码所示。目标是从一列复制一系列数据并将它们和值粘贴到另一列中。没有什么花哨。所以,我有多个选项按钮和一个命令按钮,即 Button38。当我运行代码时,我没有收到错误消息并且它不起作用。任何帮助将不胜感激,我也是 VBA 的新手。

Sub Button38_Click()
Application.ScreenUpdating = False
Sheets("Sheet2").Visible = True
Sheets("Sheet2").Select

If OptionButton22 = True Then
Range("AI2:AI182").Copy
Range("AK2:AK182").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False

ElseIf OptionButton23 = True Then
Range("AD2:AD182").Copy
Range("AK2:AK182").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False

ElseIf OptionButton24 = True Then
Range("AE2:AE182").Copy
Range("AK2:AK182").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False

End If
Sheets("Sheet1").Select
Sheets("Sheet2").Visible = False
Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 错误出现在哪一行?这是什么错误?
  • @BurceWayne 它没有显示任何错误。这是非常安静的。没有错误信息。
  • – BruceWayne 值得一提的是,我没有在选项按钮中使用 .value,因为有人告诉我应该将它与表单选项按钮一起使用。如果我使用 .value = True。我会给出错误信息:需要对象
  • @Moe.A - 我提供了一个答案,但现在我看到了一些可能不清楚的事情。 1) 是 sheet1 上的选项按钮 2) 是否要将范围从 sheet1 复制到 sheet2?如果没有,请准确说明您想要什么。我所说的亲子概念是正确的方法,但我会根据您的确切需求编辑我的答案,以免您陷入困境。
  • 1 OptionButton22 在哪里?在哪张纸上? 2 范围在哪张纸上? 3你知道如何单步执行代码吗?

标签: vba excel


【解决方案1】:

我将所有内容重新设置为 Sheet1 和 sheet2。 Sheet1 是具有表单选项按钮的那个,而 sheet2 具有列。我希望 sheet2 一直隐藏。

您正在使用表单控件(选项按钮)。此外,您不需要取消隐藏/隐藏工作表。让它保持隐藏。此代码将起作用,即使 Sheet2 被隐藏,该范围也会被复制粘贴。

这是你正在尝试的吗?

Sub Button38_Click()
    Dim wsThis As Worksheet, wsThat As Worksheet
    Dim sCol As String

    Set wsThis = Sheet2 '<~~ This sheet has the range
    Set wsThat = Sheet1 '<~~ This sheet has FORM option buttons

    With wsThis
        If wsThat.Shapes("Option Button 22").OLEFormat.Object.Value = 1 Then sCol = "AI"
        If wsThat.Shapes("Option Button 23").OLEFormat.Object.Value = 1 Then sCol = "AD"
        If wsThat.Shapes("Option Button 24").OLEFormat.Object.Value = 1 Then sCol = "AE"

        .Range(sCol & "2:" & sCol & "182").Copy

        .Range("AK2:AK182").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With
End Sub

【讨论】:

  • 嘿,你偷了我的 sCol 变量! ;)
  • 有罪指控:P
  • 说真的。好答案。很难判断它是Form 还是ActiveX 选项按钮。标题说Form,代码建议ActiveX ... 我认为它的形式
  • 1) the option buttons are on sheet2. 2) I want to copy the range within the same sheet which is sheet1 "RESULTS". I want to copy from one column to another within the same sheet. Please ask me if something is unclear. I appreciate you help! – Moe.A 35 mins ago @Moe.A:根据斯科特的回答,您说选项按钮在 sheet2 中,现在您说它在 sheet1 中????
  • @SiddharthRout - 你在这个问题上感受到了我的痛苦!
【解决方案2】:

如果您将所有对象限定为它们的父对象,则代码应该可以工作。见下文。 (我还对代码进行了一些重构,使其更简洁、更易于维护/阅读并且更短)。

Sub Button38_Click()

Dim ws1 as Worksheet
Set ws1 = Worksheets("Sheet1")

Application.ScreenUpdating = False

With Sheet2 'using the VBA sheet object name (change if needed)

    .Visible = xlSheetVisible

    Dim sCol As String

    If .OptionButton22 = True Then
        sCol = "AI"
    ElseIf .OptionButton23 = True Then
        sCol = "AD"
    ElseIf .OptionButton24 = True Then
        sCol = "AE"
    End If

   .Visible = xlSheetHidden

End With

ws1.Range("AK2:AK182").Value = ws1.Range(sCol & "2:" & sCol & "182").Value

'if you need the range theme copied as well use the code below
 'With ws1
    '.Range(sCol & "2:" & sCol & "182").Copy
    '.Range("AK2:AK182").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
    , SkipBlanks:=False, Transpose:=False
 'End With

End Sub

【讨论】:

  • 它给了我一个错误请看下图:[1]:i.stack.imgur.com/xpJyJ.jpg
  • 1) 选项按钮在 sheet2 上。 2)我想复制同一张表中的范围,即 sheet1“RESULTS”。我想在同一张纸上从一列复制到另一列。请问我是否有不清楚的地方。感谢您的帮助!
  • @Moe.A - 在您的图像中将 Sheets("Results") 更改为 Sheet2 并使用我上面编辑的代码。
  • 不错的斯科特。 :) 我不确定.Value = .Value 部分。当XlPasteType = xlPasteAllUsingSourceTheme 时,将使用复制的范围主题粘贴所有内容。 .Value = .Value 不会做到这一点:)
  • @Scott Holtzman 我有名为 RESULTS 的 sheet2,这是我的代码。如果我删除 .visible=True,它会说 .visible=True 需要对象,如果 .OptionButton22 = True 则需要错误消息对象
猜你喜欢
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多