Excel 当窗体控件位于与数据不同的工作表上时,如何从窗体控件运行宏

Excel 当窗体控件位于与数据不同的工作表上时,如何从窗体控件运行宏,excel,vba,Excel,Vba,我在工作表1中有数据,我在另一个工作表中放置了一个表单控件,用于在工作表1中的数据上运行宏。代码在第1页上。当我在工作表1中运行宏时,下面的代码起作用,但当我将宏指定给不同工作表中的按钮,然后按下该按钮时,我得到错误400。我觉得解决办法很简单,但我被卡住了 Sub Delim() Columns("F:I").Select Selection.Replace What:="InvalidAnswer;", Replacement:="", LookAt:=xlPart _ , Sea

我在工作表1中有数据,我在另一个工作表中放置了一个表单控件,用于在工作表1中的数据上运行宏。代码在第1页上。当我在工作表1中运行宏时,下面的代码起作用,但当我将宏指定给不同工作表中的按钮,然后按下该按钮时,我得到错误400。我觉得解决办法很简单,但我被卡住了

Sub Delim()

Columns("F:I").Select
Selection.Replace What:="InvalidAnswer;", Replacement:="", LookAt:=xlPart _
    , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:=";InvalidAnswer", Replacement:="", LookAt:=xlPart _
    , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Selection.Replace What:="InvalidAnswer", Replacement:="", LookAt:=xlPart _
    , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

Columns("F:F").Select
Selection.TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
    True
End Sub
将新的标准模块添加到项目中,然后将宏移到那里

Option Explicit

Public Sub Delim()
    With Sheet1.Columns("F:I")
        .Replace ...
        .Replace ...
        .Replace ...
    End With
    With Sheet1.Columns("F:F")
        .TextToColumns ...
    End With
End Sub
现在,您可以将
Delim
宏(可能需要更具描述性的名称)分配给任何
形状
对象,包括任何表单控件(右键单击该控件,选择“分配宏…”)。注:

  • Sheet1
    的代码隐藏中不合格,
    Columns
    隐式
    Me.Columns
    ;在标准模块中不合格,
    Columns
    是隐式的
    ActiveSheet.Columns
    ,您需要使用
    工作表
    对象明确限定它<代码>工作表1(VBA项目中第一个
    工作表
    模块的默认代码名-您可以通过设置其
    (名称)
    属性在属性工具窗口(F4)中对其进行更改)应能正常工作
  • 当代码使用显式对象限定符时,无需
    选择
    激活
    任何内容

将代码放入常规模块中。由于您没有使用任何
工作表
事件,因此在工作表模块中使用它是没有意义的。