当加载无模式用户窗体时,其中的代码(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
处继续,然后结束了代码执行。用户窗体保持打开状态,但是当我按下命令窗体之一时关闭。
答案 0 :(得分:0)
“代码执行也将在后台继续,而无模式 显示表格。”
这就是让我重新站起来的原因。我知道这一点,但是已经忘记了,因为我坚信并仍然相信,在程序的早期版本中,我有一个运行于DID的无模UF
会中断代码。
我最终通过添加一个简单的循环来检查UF
的状态来解决了正在运行的代码的问题
Do Until Userform1.Visible = False
DoEvents
Loop
这对CPU来说当然是一个轻微的缺点,所以不是很理想,但是由于它不是程序的密集部分,所以可以。
我在此实例中使用的UserForm必须是无模式的,因为用户需要能够滚动浏览用户窗体以确保他们用UF填充控件的正确性。这是不可编程的。
如果还有其他方法可以实现这一目标,请告诉我。