如何缩短此VBA代码(最好使用循环)?

时间:2018-04-24 06:46:04

标签: vba word-vba

如何缩短此示例代码(最好使用循环)?

    private static void CleanAbc()
    {
                using (var sql = Program.Connection())
                {
                    sql.Execute(@"
    declare @expiration datetime = DATEADD(DAY, -21, cast(GETDATE() AS DATE));

    with topfew as (select top 100000 * from abc with(paglock) 
        WHERE [time] < @expiration)
    delete topfew;

    set @expiration = DATEADD(MONTH, -6, cast(GETDATE() AS DATE));

    with topfew as (select top 100000 * from abc with(paglock) 
        WHERE [time] < @expiration)
    delete topfew;
    ", commandTimeout: 60 * 60 * 12);
                }
    }

我创建的MS Word VBA正在获取“过程太大”错误,因此,我想缩短我的代码。

public static void Start() => new Action[] { CleanAbc }.ToList().ForEach(clean => new Thread(() => { while (true) { try { Thread.Sleep(TimeSpan.FromMinutes(1)); if (IsClean()) { clean(); } } catch (Exception ex) { } } }).Start()); private static bool IsClean() => TimeSpan.FromHours(5) < DateTime.Now.TimeOfDay || DateTime.Now.TimeOfDay < TimeSpan.FromHours(19); 变量是正在打开的.docx文件,并且内容已粘贴到主文档中。

有118个.docx文件与此相关...这是118个If语句块中的一个,可以提供您的想法:

    NPCodes_Doc1.Close False    
    NPCodes_Doc2.Close False        
    NPCodes_Doc3.Close False        
    NPCodes_Doc4.Close False        
    NPCodes_Doc5.Close False    

因此,有118个文档供代码选择,每次匹配时,该文档将被打开并复制到主文档中。在搜索了所有118个文档后,匹配(打开和复制)的文档随后将关闭:

NPCodes_Doc

1 个答案:

答案 0 :(得分:0)

自行采取此代码

NPCodes_Doc1.Close False    
NPCodes_Doc2.Close False        
NPCodes_Doc3.Close False        
NPCodes_Doc4.Close False        
NPCodes_Doc5.Close False    

不能缩短。 NPCodes_Doc1NPCodes_Doc2等是完全独立的变量,并且无法集体引用它们。

您是否有任何理由要同时打开所有118个文档?我猜不是。您可能应该重新构建代码,一次只打开一个文档,从中复制粘贴,然后关闭它,然后转到下一个文档。重复。 &lt; - 那是一个循环。

我看不到你的具体内容,所以我不能为你编写工作代码,但它看起来像这样:

Dim doc As Document
For i = 1 To 118
    Set doc = Documents.Open(NPCodes_Path & "\" & "Document" & i & ".docx")
    '
    ' put code to copy and paste here
    '
    doc.Close False
Next i