首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在电子表格中自动放置大量链接时的性能问题

在电子表格中自动放置大量链接时的性能问题
EN

Stack Overflow用户
提问于 2015-04-29 18:42:14
回答 1查看 27关注 0票数 0

我正在使用此代码片段将指向另一个工作簿的链接放入我自己的工作簿中:

代码语言:javascript
复制
Sub legg_inn_lekkjer()
  Dim i As Long

  Call deaktiver

  For i = 0 To 740
    Loktider.Range("C4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C6"
    Loktider.Range("D4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C5"
    Loktider.Range("E4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C16"
    Loktider.Range("F4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C15"
    Loktider.Range("G4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C6"
    Loktider.Range("H4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C5"
    Loktider.Range("I4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C16"
    Loktider.Range("J4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C15"
  Next

  Call reaktiver
End Sub

Sub deaktiver()
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  Application.DisplayStatusBar = False
  Application.Calculation = xlCalculationManual
  ' ActiveSheet.DisplayPageBreaks = True 'note this is a sheet-level setting
End Sub

Sub reaktiver()
  Application.EnableEvents = True
  Application.ScreenUpdating = True
  Application.DisplayStatusBar = True
  Application.Calculation = xlCalculationAutomatic
  ' ActiveSheet.DisplayPageBreaks = True 'note this is a sheet-level setting
End Sub

它工作正常,但需要相当长的时间才能运行。这可能不是问题,因为我不需要经常更新链接地址,但我仍然想知道是否有更有效的方法来做到这一点,例如,使用某种相对引用一次性输入每列的地址?相当多的谷歌搜索表明“不”,但我认为这并不会伤害到问。

EN

回答 1

Stack Overflow用户

发布于 2015-04-29 18:56:10

我可以想象这将是相当慢的,您的for循环在741次迭代中在10列中输入单个单元格值,因此大约7.4k个单元格条目是单独完成的。

您可以在数组中创建单元格值,然后将该数组粘贴到工作簿中,或者更简单地,只需在顶行输入预期的公式并根据需要填写。

例如,您可以替换为:

代码语言:javascript
复制
  For i = 0 To 740
    Loktider.Range("C4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C6"
    Loktider.Range("D4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C5"
    Loktider.Range("E4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C16"
    Loktider.Range("F4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!R" & CStr(11 + i) & "C15"
    Loktider.Range("G4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C6"
    Loktider.Range("H4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C5"
    Loktider.Range("I4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C16"
    Loktider.Range("J4").Offset(i, 0) = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!R" & CStr(11 + i) & "C15"
  Next

通过以下方式:

编辑-- R1C1引用系统似乎使用绝对值,添加了标准单元格引用而不是

代码语言:javascript
复制
with Loktider
    .Range("C4") = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!F11"
    .Range("D4") = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!E11"
    .Range("E4") = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!P11"
    .Range("F4") = "='[Simulering Arbeidsplan Ovn 3 28h.xls]Lokklegging'!O11"
    .Range("G4") = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!F11"
    .Range("H4") = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!E11"
    .Range("I4") = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!P11"
    .Range("J4") = "='[Simulering Arbeidsplan Ovn 4 30h.xls]Lokklegging'!O11"
Range(.Cells(4,3),.Cells(744,10)).FillDown
End With

这是基于一些假设的,即Loktider是您创建的worksheet变量,并且您将在硬编码循环计数器时使用该特定范围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29941361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档