【发布时间】:2016-10-21 12:34:07
【问题描述】:
以下代码是一个有效的函数。它只是很慢,我不知道如何加快它。它需要一个excel行号和它的headerval(字符串)的值,并在不同的工作表上找到相同的headerval,然后复制格式并将其应用于我们的新工作表。真假是因为源工作表有 2 个不同的格式选项。它在行中传递以使用 23 或 24。 ZROW 是一个公共变量,它与 ROW 一起设置以开始查找。 srccolbyname 函数从具有相同 headerval 的源工作表中获取 col 编号
Function formatrow(roww As Long, header As Boolean)
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Dim headerval As String
Dim sht As Worksheet
Set sht = ThisWorkbook.Sheets("DEALSHEET")
Dim sht2 As Worksheet
Set sht2 = ThisWorkbook.Sheets("Sheet1")
If header = True Then: srcrow = 23: Else: srcrow = 24
LastColumn = sht.Cells(ZROW + 1, sht.Columns.Count).End(xlToLeft).Column
For x = 2 To LastColumn
headerval = sht.Cells(ZROW + 1, x).Value
srccol = srccolbyname(headerval)
sht2.Cells(srcrow, srccol).Copy 'THIS IS SLOW
sht.Cells(roww, x).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Next x
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
End Function
这里要求的是上面提到的支持函数。
Public Function srccolbyname(strng_name As String) As Integer
Call findcol 'find ZROW
Dim x As Integer
Dim sht As Worksheet
Set sht = ThisWorkbook.Sheets("Sheet1")
LastColumn = sht.Cells(22, sht.Columns.Count).End(xlToLeft).Column
For x = 2 To LastColumn
chkval = sht.Cells(22, x).Value
If Trim(UCase(chkval)) = Trim(UCase(strng_name)) Then
srccolbyname = x
Exit For
Else
srccolbyname = 2
End If
Next x
End Function
【问题讨论】:
-
对于工作代码改进,您将在Code Review 上获得更好的响应。
-
感谢布赖恩,我不知道代码审查
-
这是一个函数
-
您可以编辑帖子以包含
srccolbyname函数的代码吗? -
我添加了其他功能。
标签: vba performance excel