Vba 更有效的子程序

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

我有以下代码,可以在多个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      '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
试一试

未经测试。我改变了两件事:

  • 预先声明所有变量(使用
    Option Explicit
    ,在VBE选项中进行设置)
  • 不要
    选择
    填充,您可以直接使用单元格
  • 如果您的代码与单元格频繁交互,请关闭屏幕更新
未经测试。我改变了两件事:

  • 预先声明所有变量(使用
    Option Explicit
    ,在VBE选项中进行设置)
  • 不要
    选择
    填充,您可以直接使用单元格
  • 如果您的代码与单元格频繁交互,请关闭屏幕更新
未经测试。我改变了两件事:

  • 预先声明所有变量(使用
    Option Explicit
    ,在VBE选项中进行设置)
  • 不要
    选择
    填充,您可以直接使用单元格
  • 如果您的代码与单元格频繁交互,请关闭屏幕更新
未经测试。我改变了两件事:

  • 预先声明所有变量(使用
    Option Explicit
    ,在VBE选项中进行设置)
  • 不要
    选择
    填充,您可以直接使用单元格
  • 如果您的代码与单元格频繁交互,请关闭屏幕更新


创建工作表的过程有点慢,但您不需要在其中选择所有内容,这会有所帮助。您应该能够使用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
将产生溢出。创建工作表的过程有点慢,但您不需要在其中进行所有选择,这会有所帮助。您应该能够使用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'