【问题标题】:VBA Dialog box to select range in different workbook hanging upVBA对话框选择挂起不同工作簿中的范围
【发布时间】:2015-05-06 23:35:00
【问题描述】:

我使用了我在下面附加的链接中响应的代码,但我遇到了一些问题,你能帮帮我吗?

VBA Dialog box to select range in different workbook

当我单击 refedit 框以能够选择我想要使用的范围时,它挂起,当我单击说在某处打开了另一个具有更高优先级但我找不到的窗口时,我听到了声音它。

基本上,我要做的是从一个工作簿中复制指定的列并将它们粘贴到我原始工作簿上的工作表中。我知道我的“copyButton_Click()”编码也不正确,但我无法深入调试来修复它。这是我所拥有的:

模块 1:

  Sub extractData()
    Dim FName As Variant
    Dim wb As Workbook
    Dim destSheet As String
    '
    Application.ScreenUpdating = False
    destSheet = "NewData"
    '
    'Selects and clears data
    Sheets(destSheet).Select
        Range("A2:I12000").Select
        Selection.delete Shift:=xlUp
        Range("A2").Select
    '
    'Prompts user to select updated ILP file to copy data from:
    FName = Application.GetOpenFilename(filefilter:="Excel Files (*.xls;*.xlsx;*.xlsm), *.xls;*.xlsx;*.xlsm")
        If FName <> False Then
        Set wb = Workbooks.Open(FName)
    '
    ExtractCompareUserForm.Show vbModeless
    '
        End If

    Application.ScreenUpdating = True

    End Sub

用户格式代码:

  Private Sub UserForm_Initialize()
        Dim wb As Workbook

    '~~> Get the name of all the workbooks in the combobox
        For Each wb In Application.Workbooks
            ComboBox1.AddItem wb.Name
        Next

        ComboBox1 = ActiveWorkbook.Name
    End Sub

    '~~> This lets you toggle between all open workbooks
    Private Sub Combobox1_Change()
        If ComboBox1 <> "" Then Application.Workbooks(ComboBox1.Text).Activate

        Label1.Caption = "": RefEdit1 = ""
    End Sub

    '~~> This lets you choose the relevant range
    Private Sub RefEdit1_Change()
        Label1.Caption = ""

        If RefEdit1.Value <> "" Then _
        Label1.Caption = "[" & ComboBox1 & "]" & RefEdit1
    End Sub

    Private Sub copyButton_Click()
    Dim addr As String
    '
    addr = RefEdit1.Value
    '
    'Copy Data:
        UserForm1.addr = Selection.Address
        addr.Copy

    End Sub

    Private Sub PasteButton_Click()
    Dim destSheet As String
    '
    Workbooks(2).Close SaveChanges:=False
    '
    '       Now, paste to working workbook:
            Sheets("NewData").Activate
            Range("B2").Select
            ActiveSheet.Paste
            Application.CutCopyMode = False
        Unload Me
        '
    Call CopyData

    End Sub

这是挂断的地方,不让我点击任何东西。

【问题讨论】:

    标签: vba excel userform


    【解决方案1】:

    您已停用屏幕更新,您需要在显示您的用户窗体之前重新激活它,在Sub extractData() 的末尾:

    你有:

        ExtractCompareUserForm.Show vbModeless
    End If
    Application.ScreenUpdating = True
    End Sub
    

    切换到:

        Application.ScreenUpdating = True
        ExtractCompareUserForm.Show vbModal
    End If
    End Sub
    

    【讨论】:

    • 当我尝试@R3uK时问题仍然存在
    • 嗯...我的错,我忘了切换...:/查看编辑,但您可能已经尝试过我想您也尝试过简单的ExtractCompareUserForm.Show vbModal
    • 啊,是的! ExtractCompareUserForm.Show vbModal 解决了这个问题!非常感谢@R3uK 如果您想调整上面的编辑,我会排除答案。
    • 编辑完成! ;) 你切换ScreenUpdatingShow 的两行了吗?让它在vbModeless 中工作还不够?
    • 你拥有它的方式就是它的工作方式!非常感谢! @R3uK
    猜你喜欢
    • 2013-08-10
    • 2012-11-22
    • 2017-08-24
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多