打开无模式用户窗体后,代码将继续运行

时间:2019-02-12 14:21:59

标签: excel vba userform modeless

当加载无模式用户窗体时,其中的代码(Userform_Initialize子项除外)有时不执行,并且调用用户窗体的主要代码继续运行。

我以某种方式解决了它,但这是我程序的最新更新,不幸的是它被破坏了。

library(tidyverse)
data.frame(a,b,c, stringsAsFactors = FALSE) %>% 
     slice(which.max(a)) %>% 
     pull(c)
#[1] "grey"

在userform模块中:

<script>
    $(document).ready(function () {
        var table = $('#visitorsTable').DataTable({              
            "ajax": {
                "url": "Home/LoadData",
                "type": "GET",
                "datatype": "json",
            },
            "columns": [                   
                { "data": "FirstName" },
                { "data": "LastName" },                   
                { "data": "PlateNumber" },
                {
                    "data": "WifiCode", 
                    "render": function(wifiCode) {
                       if (wifiCode) {                              
                           return '<span> ' + wifiCode + '</span><button data-visitor-wifi="'+ wifiCode +'" id="btnResend"></button>';
                       }                           
                   }
                },                   
            ]
        });
    });
</script>

代码在Sub start() 'shortened drastically, but accurate '.... If UBound(rs.GetRows(1000000), 2) + 1 < 6 Then .Close SaveChanges:=False ThisWorkbook.Sheets("Start").Range("DA1").Value = "1" ThisWorkbook.Sheets("Start").Range("DA2").Value = MachineNr UserForm1.Show vbModeless GoTo ExSub End If '... ExSub: End Sub 子代码中运行没有问题,但是用户窗体没有出现在屏幕的前面,并且代码在Private Sub UserForm_Initialize() Dim wb As Workbook If ThisWorkbook.Sheets("Start").Bijwerken = "ja" Then Me.CommandButton2.Caption = "Cancel" Me.Label1.Caption = "Select a file to update" bestand = "" With Me.ComboBox1 For Each wb In Application.Workbooks If Not wb.Name = ThisWorkbook.Name Then For Each sht In wb.Sheets If sht.Name = "AssetTypeTask" Then .AddItem wb.Name Exit For End If Next sht End If Next wb End With Else bestand = "" With Me.ComboBox1 For Each wb In Application.Workbooks If Not wb.Name = ThisWorkbook.Name Then .AddItem wb.Name End If Next wb End With End If End Sub 处继续,然后结束了代码执行。用户窗体保持打开状态,但是当我按下命令窗体之一时关闭。

1 个答案:

答案 0 :(得分:0)

  

“代码执行也将在后台继续,而无模式   显示表格。”

这就是让我重新站起来的原因。我知道这一点,但是已经忘记了,因为我坚信并仍然相信,在程序的早期版本中,我有一个运行于DID的无模UF会中断代码。

我最终通过添加一个简单的循环来检查UF的状态来解决了正在运行的代码的问题

Do Until Userform1.Visible = False
    DoEvents
Loop

这对CPU来说当然是一个轻微的缺点,所以不是很理想,但是由于它不是程序的密集部分,所以可以。

我在此实例中使用的UserForm必须是无模式的,因为用户需要能够滚动浏览用户窗体以确保他们用UF填充控件的正确性。这是不可编程的。

如果还有其他方法可以实现这一目标,请告诉我。