繁体   English   中英

vArray 值未从 VBA 中的上一个循环中清除

vArray values not clearing out from previous loop in VBA

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一些未清除的 vArray。 宏的目的是处理一个原始数据选项卡,它有 30 多个选项卡,每个选项卡保存特定办公室、001-纽约等的信息。宏应该选择 x 个选项卡(基于参考文件),复制它们并将它们保存到一个新的工作簿中。 问题是它不是从原始数据文件复制和保存,而是保存参考文件。 For...Next 循环用于确定从原始数据文件中选择和复制哪些选项卡/办公室。 varrays 位于循环内并包含办公室的名称。 当代码遇到 vArray 时,当循环返回时,varray 值不会清除。

例子:

'For 1' 引用值为“8”的单元格,因此它填充 8 个不同的 vArray 值(在本例中为办公室)。 'For 2' 的参考编号为 5,应该填充 5 个 vArray 值。 它正确执行此操作,因为我可以在 vArray (1) 到 vArray (5) 下的本地窗口中看到 5 个新值,但是,vArray 6 到 8 显示的是前一个循环的值而不是“空”。 宏循环时不会清除 vArray 值。

sMasterListWBName 是参考文件,它告诉宏要从原始数据文件复制哪些选项卡以及将新创建的工作簿移动到哪里。 sub 还复制、保存和分发参考文件而不是循环的某些迭代的原始数据文件(次要问题 - 我将尽量避免拆分线程主题)。

预先感谢任何试图回答这个问题的人。

Option Explicit
Dim iYear As Integer, iMonth As Integer, iVer As Integer, icount As Integer, iCount2 As Integer
Dim iLetter As String, iReport As String
Dim sMonth As String, sDate As String, sVer As String, sAnswer As String
Dim sFolderName As String, sManagerInitials  As String
Dim iManagerNumber As Integer, iManagerStart As Integer, iTabNumber As Integer, iTabStart As Integer
Dim sMasterListWBName As String, sConsolidatedWBName As String, sExists As String
Dim oSheet As Object, oDistList As Object
Dim vArray(300) As Variant
Dim wbDistList As Workbook
Dim wsAgentListSheet As Worksheet, wsMain As Worksheet
Dim rCell As Range, rCell2 As Range, rCellTotal As Range
Public sFINorAgent As String


Sub Agent_Distribute()
On Error Resume Next

iYear = frm_fin_rep_main_distribute.txt_year
iMonth = frm_fin_rep_main_distribute.txt_month
iVer = frm_fin_rep_main_distribute.txt_version

sMonth = Right("0" & iMonth, 2)
sDate = iYear & "." & sMonth

sVer = "V" & iVer
sAnswer = MsgBox("Is the following information correct?" & vbNewLine & vbNewLine & _
                    "Report - " & frm_fin_rep_main.sLetter & vbNewLine & _
                    "Year - " & iYear & vbNewLine & _
                    "Month - " & sMonth & vbNewLine & _
                    "Name - " & frm_fin_rep_main.sReport & vbNewLine & _
                    "Version - " & sVer, vbYesNo + vbInformation, "Please verify...")
If sAnswer <> vbYes Then
    Exit Sub
End If

Unload frm_fin_rep_main_distribute
frm_agent.Hide
Form_Progress

With Application
    .EnableEvents = False
    .ScreenUpdating = False
End With

sConsolidatedWBName = ActiveWorkbook.Name
sMasterListWBName = "Dist Master List Final.xls"
If Not IsFileOpen(sMasterListWBName) Then
    Workbooks.Open FileName:= _
    "W:\Addins\01 GL - Distribution\" & sMasterListWBName, Password:="password"
    Workbooks(sConsolidatedWBName).Activate
End If

Set oDistList = Workbooks(sMasterListWBName).Worksheets("Agent")

With oDistList

    iManagerNumber = .Range("ManNumber2") 'range value = 66

    For iManagerStart = 2 To iManagerNumber '2 to 66
        If .Range("A" & iManagerStart) = "x" Then

            iTabNumber = .Range("E" & iManagerStart) 'E2 to E66
            sFolderName = .Range("F" & iManagerStart) 'F2 to F66
            sManagerInitials = .Range("G" & iManagerStart) 'G2 to G66

                For iTabStart = 1 To iTabNumber
                    vArray(iTabStart) = .Range("G" & iManagerStart).Offset(0, iTabStart)
                Next iTabStart

                If iTabNumber = 1 Then
                    Sheets(vArray(1)).Select
                Else
                    Sheets(vArray(1)).Select
                    For iTabStart = 2 To iTabNumber
                        Sheets(vArray(iTabStart)).Select False
                    Next iTabStart
                End If

                ActiveWindow.SelectedSheets.Copy

                ' *** the following code is optional, remove preceding apostrophes from the following four lines to enable password protection ***
                'For Each oSheet In ActiveWorkbook.Sheets
                    'oSheet.Protect "password"
                    'oSheet.EnableSelection = xlNoSelection
                'Next

                ActiveWorkbook.SaveAs FileName:= _
                "W:\Financials\" & iYear & "\" & sDate & "\Report to Distribute Electronically\Department Reports\" _
                & sFolderName & "\Current Year Financials" & "\" & "Y" & ") " & iYear & "-" & sMonth & " Agent Report Card " & sVer & " - " & sManagerInitials & ".xls"
                ActiveWorkbook.Close
        End If

        iPercent = iManagerStart / iManagerNumber * 95
        Task_Progress (iPercent)
    Next iManagerStart
End With

Workbooks(sMasterListWBName).Close False

Task_Progress (100)
Unload frm_progress

Set oDistList = Nothing

With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With

Message_Done

frm_agent.Show (vbModeless)

End Sub
1 个回复

我修好了它。 我刚刚在循环末尾添加了“Workbooks(sWbName).activate”,以确保焦点重新回到原始数据文件上。 现在所有文件都以正确的格式和位置保存。 除非有人要添加任何其他内容,否则案例已关闭。 也许有人知道宏丢失其活动工作表的原因(保存参考文件而不是原始数据文件)。 谢谢你。

1 Python中while循环中的上一个值

我尝试对股票投资进行简单的蒙特卡洛模拟,从一些投资价值,投资期限(以年为单位)以及股票共同基金的均值和标准差开始。 我还想为股票市场崩溃提供一种简单的方法-我这样做是为了每当新的计算值比以前的计算值高40%时,新值就应该下降90%-就像某种崩溃一样。 我设法使其正常工作,这是代码,但是我认为 ...

3 XSL - 循环中的上一个节点值

我有这样的XML - (简化) 我正在使用此XSL来查找循环中类似节点的先前值。 我在这里简化了xsl,我需要在更大的集合中使用这个逻辑。 我尝试过祖先和前兄弟,对我不起作用..我期待以下结果 有什么想法吗? ...

2012-07-27 12:46:59 2 13051   xml/ xslt
4 如何检测我何时处于上一个循环中? (lambda)

我这样写: 如上所见,我正在打印字符串的一部分。 我需要在每个元素(数字)之间加上逗号“,”。 {我要检​​查我是否在最后一个元素中,并根据需要加上','逗号。这就是为什么我需要知道我是否在最后一个元素中。 } 我想了很多,但找不到解决方法,该怎么办? ...

5 比较日期与循环中的上一个日期

我循环查询包含值为整数和日期时间的查询。 我想比较循环中的每一行,如果已经存在具有相同日期(NOT TIME)的记录,它应该删除数组中的前一个记录/对象。 我怎样才能实现这一目标? ...

2015-02-25 01:01:28 1 413   php
7 清除上一个引擎中的表格设置

我运行MariaDB,并在myisam表上尝试将引擎更改为aria。 将其改回后,我在使用表时遇到了一些错误。 我需要设置rowformat = fixed,phpadmin说确定,但是格式仍然是动态的:-/在控制台中,我得到警告: transactional = 0是来自aria引 ...

9 在PL SQL中的循环内初始化varray

我想知道在循环内的每次迭代中初始化varray集合时在内存中会发生什么,如以下示例所示: 内存发生了什么? 在循环中的每次迭代中在内存上实例化一个新对象,或者仅在内存上使用同一对象。 是否会影响性能? 谢谢, ...

10 数据未从For循环中显示

我在购物车中担任产品推荐员,这类似于您去杂货店和冲动糖果时的情况。 如下图所示。 当我单击下拉菜单时,它没有包含我要查找的数据。 我正在使用以下代码,我认为它将输入此数据: &lt;?php foreach($Fluoros['Fluo ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM