【发布时间】:2020-04-02 02:04:00
【问题描述】:
我在工作表“列表”上有 2 列,一列列出所有业务实体,另一列列出所有组织单位。以下代码的功能完美运行,但返回错误,因为它超出了工作表行限制。
数据被粘贴到工作表“cc_act”上是否有办法在出错时创建一个名为“cc_act1”....“cc_act2”的新工作表,直到脚本完成?
Declare Function HypMenuVRefresh Lib "HsAddin" () As Long
子 cc()
Application.ScreenUpdating = False
Dim list As Worksheet: Set list = ThisWorkbook.Worksheets("list")
Dim p As Worksheet: Set p = ThisWorkbook.Worksheets("p")
Dim calc As Worksheet: Set calc = ThisWorkbook.Worksheets("calc")
Dim cc As Worksheet: Set cc = ThisWorkbook.Worksheets("cc_act")
Dim cc_lr As Long
Dim calc_lr As Long: calc_lr = calc.Cells(Rows.Count, "A").End(xlUp).Row
Dim calc_lc As Long: calc_lc = calc.Cells(1,
calc.Columns.Count).End(xlToLeft).Column
Dim calc_rg As Range
Dim ctry_rg As Range
Dim i As Integer
Dim x As Integer
list.Activate
For x = 2 To Range("B" & Rows.Count).End(xlUp).Row
If list.Range("B" & x).Value <> "" Then
p.Cells(17, 3) = list.Range("B" & x).Value
End If
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
If list.Range("A" & i).Value <> "" Then
p.Cells(17, 4) = list.Range("A" & i).Value
p.Calculate
End If
p.Activate
Call HypMenuVRefresh
p.Calculate
'''changes country on calc table
calc.Cells(2, 2) = p.Cells(17, 4)
calc.Cells(2, 3) = p.Cells(17, 3)
calc.Calculate
'''copy the calc range and past under last column
With calc
Set calc_rg = calc.Range("A2:F2" & calc_lr)
End With
With cc
cc_lr = cc.Cells(Rows.Count, "A").End(xlUp).Row + 1
calc_rg.Copy
cc.Cells(cc_lr, "A").PasteSpecial xlPasteValues
End With
Next i
Next x
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
您有一个包含两个字段的组合超过行限制的两列工作表?您正在运行哪个版本的 Excel?除非您使用的是 XL 2003,否则您有超过一百万行的业务实体/组织单位组合?那是什么生意?你有多少商业实体?您有多少个组织单位?如果你做数学(正确),你最终会得到超过一百万的结果吗?我觉得这对任何企业来说都难以置信。
-
使用
Long作为行计数器。Integer对于超过 65535 行的行数来说不够大 -
186 个实体和 369 个不同的单位,我每个月要提取 15 个费用帐户。