excel vba 能多线程同时操作吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel vba 能多线程同时操作吗?相关的知识,希望对你有一定的参考价值。

理论上没有多线程吧,excel的VBA始终需要焦点的,它只能暂停一个操作然后开始另外一个操作,分式操作,一1秒为间隔,每个程序都运行1秒然后挂起,然后运行其他的这样的循环,没有所谓的同时执行,如果同时执行了会出现线程冲突提示找不到对象的错误吧 参考技术A 同一个excel不可以;但你可以多开几个excel来同时执行不同的vba
多开excel可以 按win键 + r(运行) 输入 excel 回车来多开本回答被提问者和网友采纳
参考技术B 可以,用控件,Timer控件。

我可以同时在 VBA 中声明和分配一个变量吗?

【中文标题】我可以同时在 VBA 中声明和分配一个变量吗?【英文标题】:Can I simultaneously declare and assign a variable in VBA? 【发布时间】:2011-03-16 10:17:10 【问题描述】:

我是 VBA 新手,想知道是否可以将以下声明和赋值转换为一行:

Dim clientToTest As String
clientToTest = clientsToTest(i)

Dim clientString As Variant
clientString = Split(clientToTest)

【问题讨论】:

【参考方案1】:

您可以在一行中定义和分配一个值,如下所示。我已经给出了在一行中声明和分配的两个变量的示例。如果多个变量的数据类型相同:

Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946

【讨论】:

【参考方案2】:

不幸的是,VBA 中没有简写,如果您希望将其放在一行中以提高可读性,那么您将获得的最接近的是使用 : 延续字符的纯视觉事物;

Dim clientToTest As String:  clientToTest = clientsToTest(i)
Dim clientString As Variant: clientString = Split(clientToTest)

提示(其他答案/cmets 的摘要):也适用于对象(Excel 2010):

Dim ws  As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim ws2 As New Worksheet: ws2.Name = "test"

【讨论】:

+1,我记得微软在构建 .NET 期间曾建议 VB6 开发人员开始这样做,以便为 VB.NET 做好准备。 这是我对 VBA 最大的抱怨;我敢打赌,如果管理层愿意添加此快捷方式,初级程序员只需一天时间即可将其添加到 VBA。【参考方案3】:

在某些情况下,使用With statement 可以避免声明变量的全部需要。

例如,

    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    If fd.Show Then
        'use fd.SelectedItems(1)
    End If

这可以改写为

    With Application.FileDialog(msoFileDialogSaveAs)
      If .Show Then
        'use .SelectedItems(1)
      End If
    End With

【讨论】:

【参考方案4】:

事实上,你可以,但不是那样。

Sub MySub( Optional Byval Counter as Long=1 , Optional Byval Events as Boolean= True)

'code...

End Sub

并且你可以在调用 sub 时对变量进行不同的设置,或者让它们设置为默认值。

【讨论】:

这是用于参数,而不是局部变量。【参考方案5】:

您可以对对象进行排序,如下所示。

Dim w As New Widget

但不是字符串或变体。

【讨论】:

这是不正确的,作为一个整体。您可以使用任何数据类型(值或对象)在同一行上声明和初始化变量,只需将“动作”与分号: 分开即可。有一些限制,因为您不能在同一行有多个值声明(即var1 = val1: var2 = val2)。它会偶尔出现错误,并允许您有时执行此类分配,但总体而言,此符号不建议这样做。 @GoldBishop,是的,使用冒号将多个语句组合成一行通常有效(正如 Alex K. 所说)。我所说的不适用于字符串或变体(或者可能也不适用于其他原语)是 Dim x As New T 语法,它只适用于对象。 是的,不能在构造函数初始化行上工作,但它可以用于 Variant 和 String 分配。我一直将它用于值类型和一些对象类型。 dim str as String: str = "value"dim str as Worksheet: set str = ActiveWorkbook.worksheets("Sheet1") 都重复工作。虽然,如果我进行对象实例化 dim ws as New Worksheet: set ws = ActiveWorkbook.Worksheets("Sheet1") 会像 V​​BA 中的任何其他无效操作一样出错。 冒号技巧适用于变体和字符串赋值。 New 关键字没有。这就是我要说的。 @JohnMGrant 可能想澄清你的答案,正如我读到的那样:你不能对构造函数初始化和字符串/变量值类型进行同一行赋值。可能会让一些人感到困惑。

以上是关于excel vba 能多线程同时操作吗?的主要内容,如果未能解决你的问题,请参考以下文章

大神进,易语言sqlite3支持多线程读写吗

什么是JAVA的多线程?

java 多线程问题 真的提高了效率吗?

Excel 在VBA中可否调用winsock控件

MySQL的Buffer Pool线程安全吗?

面试官:单核 CPU 支持 Java 多线程吗?什么?