0

花了很多时间研究这个问题,但在众多论坛中都找不到类似的问题,但如果有人能指出我的问题,请做(我问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,并在调试中尝试了该程序,是的,它在调试中执行代码,但不是在同一台机器上的运行时执行代码!!!根据上面的代码似乎没有被执行。

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

4

1 回答 1

0

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

于 2013-09-16T23:50:09.693 回答