Vba 更有效的子程序
我有以下代码,可以在多个CS工作表上创建指向摘要工作表的链接。CS工作表的数量是使用另一个代码模块从一个CS主工作表生成的。该代码工作正常,但在创建多个CS工作表时速度非常慢。我怎样才能使它更有效率Vba 更有效的子程序,vba,excel,Vba,Excel,我有以下代码,可以在多个CS工作表上创建指向摘要工作表的链接。CS工作表的数量是使用另一个代码模块从一个CS主工作表生成的。该代码工作正常,但在创建多个CS工作表时速度非常慢。我怎样才能使它更有效率 Sub CSrefs() ' ' Adds links from Summary Sheet to CS Sheets: Dim i As Integer Dim iOffset As Integer intCount = ActiveWorkbook.Sheets.Count
Sub CSrefs()
'
' Adds links from Summary Sheet to CS Sheets:
Dim i As Integer
Dim iOffset As Integer
intCount = ActiveWorkbook.Sheets.Count 'Find total number of workbook sheets
intCS1_Index = Sheets("CS1").Index 'CS1 Sheet index
intCSCount = intCount - (intCS1_Index - 1) 'Find total number of CS sheets
NonCSSheets = intCount - intCSCount 'Find total number of Non-CS sheets
For i = 1 To intCSCount 'number of sheets
iOffset = i + NonCSSheets
Sheets("CS" & i).Select
Range("B3").Select
ActiveCell.Formula = "=SUMMARY!E" & iOffset
Range("A6").Select 'Adds hyperlink to Summery Sheet
ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Summary!A" & iOffset, TextToDisplay:="Go to Summary Sheet"
Range("F8").Select
ActiveCell.Formula = "=SUMMARY!F" & iOffset
Range("D8").Select
ActiveCell.Formula = "=SUMMARY!G" & iOffset
Range("B12").Select
ActiveCell.Formula = "=SUMMARY!H" & iOffset
Range("K19").Select
ActiveCell.Formula = "=SUMMARY!S" & iOffset
Range("K49").Select
ActiveCell.Formula = "=SUMMARY!T" & iOffset
Range("K79").Select
ActiveCell.Formula = "=SUMMARY!U" & iOffset
Range("K109").Select
ActiveCell.Formula = "=SUMMARY!V" & iOffset
Range("K139").Select
ActiveCell.Formula = "=SUMMARY!W" & iOffset
Range("K169").Select
ActiveCell.Formula = "=SUMMARY!X" & iOffset
Range("B8").Select
Next i
Sheets("Summary").Select
End Sub
停止选择东西-在vba中没有必要 而不是
iOffset = i + NonCSSheets
Sheets("CS" & i).Select
Range("B3").Select
ActiveCell.Formula = "=SUMMARY!E" & iOffset
Range("A6").Select 'Adds hyperlink to Summery Sheet
ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Summary!A" & iOffset, TextToDisplay:="Go to Summary Sheet"
Range("F8").Select
ActiveCell.Formula = "=SUMMARY!F" & iOffset
试一试
etc停止选择东西-在vba中没有必要 而不是
iOffset = i + NonCSSheets
Sheets("CS" & i).Select
Range("B3").Select
ActiveCell.Formula = "=SUMMARY!E" & iOffset
Range("A6").Select 'Adds hyperlink to Summery Sheet
ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Summary!A" & iOffset, TextToDisplay:="Go to Summary Sheet"
Range("F8").Select
ActiveCell.Formula = "=SUMMARY!F" & iOffset
试一试
etc停止选择东西-在vba中没有必要 而不是
iOffset = i + NonCSSheets
Sheets("CS" & i).Select
Range("B3").Select
ActiveCell.Formula = "=SUMMARY!E" & iOffset
Range("A6").Select 'Adds hyperlink to Summery Sheet
ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Summary!A" & iOffset, TextToDisplay:="Go to Summary Sheet"
Range("F8").Select
ActiveCell.Formula = "=SUMMARY!F" & iOffset
试一试
etc停止选择东西-在vba中没有必要 而不是
iOffset = i + NonCSSheets
Sheets("CS" & i).Select
Range("B3").Select
ActiveCell.Formula = "=SUMMARY!E" & iOffset
Range("A6").Select 'Adds hyperlink to Summery Sheet
ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Summary!A" & iOffset, TextToDisplay:="Go to Summary Sheet"
Range("F8").Select
ActiveCell.Formula = "=SUMMARY!F" & iOffset
试一试
等
未经测试。我改变了两件事:
- 预先声明所有变量(使用
,在VBE选项中进行设置)Option Explicit
- 不要
选择
填充,您可以直接使用单元格
- 如果您的代码与单元格频繁交互,请关闭屏幕更新
- 预先声明所有变量(使用
,在VBE选项中进行设置)Option Explicit
- 不要
选择
填充,您可以直接使用单元格
- 如果您的代码与单元格频繁交互,请关闭屏幕更新
- 预先声明所有变量(使用
,在VBE选项中进行设置)Option Explicit
- 不要
选择
填充,您可以直接使用单元格
- 如果您的代码与单元格频繁交互,请关闭屏幕更新
- 预先声明所有变量(使用
,在VBE选项中进行设置)Option Explicit
- 不要
选择
填充,您可以直接使用单元格
- 如果您的代码与单元格频繁交互,请关闭屏幕更新
Long
而不是Integer
,这是一种很好的做法。分配给行的整数。Count
将产生溢出。创建工作表的过程有点慢,但您不需要在其中进行所有选择,这会有所帮助。您应该能够使用Range(“X#”)。Formula=“SUMMARY!X”&iOffset。这可能会稍微减少处理量。此外,如果你不关闭屏幕更新,这将严重减慢速度。考虑书用<代码>应用程序结束代码。屏幕更新= false…Application.ScreenUpdate=true来降低刷新率,这可能会有很大帮助。由于Excel 2007工作表的容量为1048576行,因此我想补充一点,将数值变量声明为Long
而不是Integer
,这是一种很好的做法。分配给行的整数。Count
将产生溢出。创建工作表的过程有点慢,但您不需要在其中进行所有选择,这会有所帮助。您应该能够使用Range(“X#”)。Formula=“SUMMARY!X”&iOffset。这可能会稍微减少处理量。此外,如果你不关闭屏幕更新,这将严重减慢速度。考虑书用<代码>应用程序结束代码。屏幕更新= false…Application.ScreenUpdate=true来降低刷新率,这可能会有很大帮助。由于Excel 2007工作表的容量为1048576行,因此我想补充一点,将数值变量声明为Long
而不是Integer
,这是一种很好的做法。分配给行的整数。Count
将产生溢出。创建工作表的过程有点慢,但您不需要在其中进行所有选择,这会有所帮助。您应该能够使用Range(“X#”)。Formula=“SUMMARY!X”&iOffset。这可能会稍微减少处理量。此外,如果你不关闭屏幕更新,这将严重减慢速度。考虑书用<代码>应用程序结束代码。屏幕更新= false…Application.ScreenUpdate=true来降低刷新率,这可能会有很大帮助。由于Excel 2007工作表的容量为1048576行,因此我想补充一点,将数值变量声明为Long
而不是Integer
,这是一种很好的做法。分配给行的整数。Count
将产生溢出。选择的好处是。我总是喜欢链接到它来解释如何和为什么:)我相信iOffset=I+noncsheets
应该在中用于。。。下一步
循环。非常感谢xificurC“带工作表”部分提供了有关选择
的关键点。我总是喜欢链接到它来解释如何和为什么:)我相信iOffset=I+noncsheets
应该在中用于。。。下一步
循环。非常感谢xificurC“带工作表”部分提供了有关选择
的关键点。我总是喜欢链接到它来解释如何和为什么:)我相信iOffset=I+noncsheets
应该在中用于。。。下一步
循环。非常感谢xificurC“带工作表”部分提供了有关选择
的关键点。我总是喜欢链接到它来解释如何和为什么:)我相信iOffset=I+noncsheets
应该在中用于。。。下一步
循环。非常感谢xificurC'