begininvoke似乎不会在某些电脑的运行时执行

时间:2013-09-16 08:38:40

标签: vb.net winforms vb.net-2010

花了大量时间研究这个并且在众多论坛中找不到类似的问题但是如果有人能指出我一个请做(我问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警告你这个过程需要一些时间,ACCSheet第一行的msgbox永远不会被执行。

Sub ACCSheet()内有一些变化,但因为它似乎没有执行此代码,所以这不太可能是原因。

新信息
Hans Passant的答案(不幸的是他现在已将其删除或我将其标记为答案)给了我一个提示,所以我评论了所有添加的代码,果然问题消失了,问题部分原来是在哪里我正在为创建的电子表格添加一个VBA(是的,我已经进入并在目标计算机上启用了“对VBA项目对象模型的信任访问”)。

令我感到困惑的是,这部分代码仍在试用,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)

我很想知道为什么这会引起问题以及如何重新包含,最重要的是它为什么不能运行!

汉斯提出了一个我将要尝试的BackgroundWorker,但如果有人可以提供,我仍然会感谢你的解释。

最新资讯

现在已经尝试了没有任何优势的后台工作者,@ jcwrequests给了我找到原因的线索 - 这是导致问题的Excel版本(适用于2010但不适用于2007)

现在将对将Excel VBA模块添加到Excel 2007进行一些研究!

最终更新(希望如此)

现在这是一个难题,我终于复活了一台带有VS的旧笔记本电脑在XP上运行Office 2007并在调试中尝试了该程序,是的,它在调试中执行代码,但在同一台机器上运行时没有!如上所述,代码似乎不会被执行。

我将在这个问题上运行一个解决方法,但会继续关注这个问题,所以如果有人想出一个解决方案,我会很高兴听到!

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您需要将应用程序设置为32位并重建,但假设您使用ADO.NET访问Excel数据,因为没有64位驱动程序。你能提供更多信息。