花了很多时间研究这个问题,但在众多论坛中都找不到类似的问题,但如果有人能指出我的问题,请做(我问q是最后的手段!)
我继承了以下代码,在周五更新之前一直运行良好!
有点令人费解的因素是代码在我的 PC 上的调试和运行时完美执行,并且在我的客户上完美运行,直到星期五,但现在根本无法在他们的机器上执行!
我在 W7 64 位上运行 VS 2010,并且客户端机器都是 XP 32 位,请原谅重新强调,但自从我在 4 月份开始这个项目以来,第一部分代码并没有改变,并且已经发布了许多更新然后一切正常(包括上周初的一个)。
Delegate Sub ACCSheetBG()
Dim ACC As New ACCSheetBG(AddressOf Me.ACCSheet)
Dim ACCDone As IAsyncResult
Private Sub AM_CreateSpreadsheet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AM_CreateSpreadsheet.Click
Dim Test1 As Boolean = True
Try
Test1 = ACCDone.IsCompleted
Catch ex As Exception
'If Here Assume It Is Just Failed because not used before and that it is ok to start.
GoTo Skip1
End Try
If ACCDone.IsCompleted = True Then
Skip1:
If MsgBox("This process may take several minutes." & Chr(13) & "You can perform other operations whilst this is processing.", MsgBoxStyle.Information + MsgBoxStyle.OkCancel, "Accounts Generation") = MsgBoxResult.Ok Then
'Start Accounts Sheet
ACCDone = ACC.BeginInvoke(Nothing, Nothing)
End If
Else
MsgBox("Operation already in progress", MsgBoxStyle.Information, "Already Running")
End If
End Sub
上面的代码部分根本没有改变!(尽管我对它的写作方式有个人想法!)
它调用的 Sub 已更改,但我在任何其他语句之前插入了一个 msgbox,这从未出现:
在底部查看新信息
Public Sub ACCSheet()
MsgBox("StartACC")
'Some code
End Sub
单击按钮时,AM_CreateSpreadsheet
您会看到 msgbox 警告您该过程需要一些时间,第一行的 msgboxACCSheet
永远不会被执行。
内部发生了一些变化,Sub ACCSheet()
但由于它似乎没有执行此代码,这不太可能是原因。
新信息
Hans Passant 的回答(不幸的是,他现在已将其删除,否则我会将其标记为答案)给了我一个提示,所以我注释掉了所有添加的代码,果然问题消失了,问题部分原来是我所在的地方将 VBA 添加到创建的电子表格(是的,我已经进入并在目标计算机上打开了“信任对 VBA 项目对象模型的访问”)。
让我疑惑的还是这段代码在try,catch中,上面提到的msgbox在try,catch之前,不仅没有显示msgbox,而且语句的catch部分的msgbox也没有显示。(该应用程序在某些 XP 32 位机器上也能完美运行,但在其他机器上却不能)
导致代码的问题是:
Dim oModule As Vbe.Interop.VBComponent
Dim SCode As String
' Create a new VBA code module.
oModule = ExAccBk.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule)
SCode = "Function SUMCOLOR(ColorCell As Range, SumRange As Range) As Variant" & vbCrLf & _
"Dim Cell As Range" & vbCrLf & _
"For Each Cell In SumRange" & vbCrLf & _
"If Cell.Interior.Color = ColorCell.Interior.Color Then" & vbCrLf & _
"SUMCOLOR = Cell + SUMCOLOR" & vbCrLf & _
"End If" & vbCrLf & _
"Next" & vbCrLf & _
"SUMCOLOR = SUMCOLOR" & vbCrLf & _
"End Function"
' Add the VBA macro to the new code module.
oModule.CodeModule.AddFromString(SCode)
我很想知道为什么这会导致问题以及如何重新包含,最重要的是为什么它似乎没有运行!
Hans 建议了一个 BackgroundWorker,我将尝试使用它,但如果有人可以提供一个解释,我仍然会很感激。
最新资讯
现在已经尝试了没有任何优势的后台工作人员,@jcwrequests 给了我找到原因的线索 - 这是导致问题的 Excel 版本(适用于 2010 年,但不适用于 2007 年)
现在将对向 Excel 2007 添加 VBA 模块进行一些研究!
最终更新(希望)
现在这是一个难题,我终于复活了一台带有 VS 的旧笔记本电脑,在 XP 上运行 Office 2007,并在调试中尝试了该程序,是的,它在调试中执行代码,但不是在同一台机器上的运行时执行代码!!!根据上面的代码似乎没有被执行。
我将在这个问题上运行一个解决方法,但会继续关注这个线程,所以如果有人提出解决方案,我会很高兴听到!