- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些代码从 2 个不同的工作表中获取数据,并创建和输出工作表。问题是,如果在数据中创建了一个新页面,它必须做一些额外的信息,并改变分页符的位置。当我在调试事件的情况下运行代码以查看导致错误的代码行时,它工作得很好。
当我让它在没有调试的情况下运行时,它会给我一个索引超出范围的错误。
我已将 excel 表本身上传到 https://www.dropbox.com/s/pcl5zwuna8g7wrf/Test.xlsm?dl=0但我只是不明白为什么它会根据是否单步执行而导致不同的输出,因为它无论如何都是单线程的?
按下第四张纸上的按钮时会发生这种情况。
我将代码上传到了 pastebin:https://pastebin.com/rMwi7c7G
Public Function SeitenNr(rngZelle As Range) As Integer
Dim wksHor As Integer, wksVert As Integer, SeiteNr As Integer
Dim VertPb As Object, HortPb As Object
Dim lngOrder As Long
lngOrder = rngZelle.Parent.PageSetup.Order
wksVert = rngZelle.Parent.VPageBreaks.Count + 1
wksHor = rngZelle.Parent.HPageBreaks.Count + 1
SeiteNr = 1
For Each VertPb In rngZelle.Parent.VPageBreaks
If VertPb.Location.Column > rngZelle.Column Then Exit For
SeiteNr = SeiteNr + IIf(lngOrder = xlDownThenOver, wksHor, 1)
Next VertPb
For Each HortPb In rngZelle.Parent.HPageBreaks
If HortPb.Location.Row > rngZelle.Row Then Exit For
SeiteNr = SeiteNr + IIf(lngOrder = xlDownThenOver, 1, wksVert)
Next HortPb
SeitenNr = SeiteNr
End Function
Sub updateOutput()
'Sheets("Print-Macro").UsedRange.ClearContents
'Sheets("Print-Macro").Cells.UnMerge
Application.DisplayAlerts = False
Sheets("Print-Macro").Delete
Application.DisplayAlerts = True
Dim sheet As Worksheet
Set sheet = Sheets.Add
sheet.Name = "Print-Macro"
Dim indexMain As Integer
Dim currentIndex As Integer
Dim artistName As String
Dim artistNameLast As String
Dim cellIndexOutput As Integer
Dim birthdate As String
Dim deathdate As String
Dim originalPage As Integer
Dim currentPage As Integer
Dim latestPage As Integer
Dim lastArtistPage As Integer
Dim birthIndex As Integer
Dim firstPageArtist As Integer
indexMain = 2
cellIndexOutput = 1
Set f = ThisWorkbook.Worksheets("Print-Macro")
Do
Sheets("Print-Macro").Rows(cellIndexOutput).RowHeight = 15
Set artistNameCell = Sheets("Was").Cells(indexMain, 1)
If IsEmpty(artistNameCell.Value) Then
Exit Do
End If
'Code only gets here if a valid entry is found. So create the output now
artistName = artistNameCell.Value
birthdate = ""
deathdate = ""
If artistNameLast <> artistName Then
birthIndex = 2
Do
Dim tempName As String
tempName = Sheets("Geboren").Cells(birthIndex, 1).Value
If IsEmpty(Sheets("Geboren").Cells(birthIndex, 1).Value) Then
Exit Do
End If
If (tempName = artistName) Then
birthdate = Sheets("Geboren").Cells(birthIndex, 2).Value
deathdate = Sheets("Geboren").Cells(birthIndex, 3).Value
End If
birthIndex = birthIndex + 1
Loop
Sheets("Print-Macro").Range("A" & cellIndexOutput & ":" & "C" & cellIndexOutput).Merge
Sheets("Print-Macro").Cells(cellIndexOutput, 1).Value = artistName & " (" & birthdate & "-" & deathdate & ")"
Sheets("Print-Macro").Cells(cellIndexOutput, 1).Font.Underline = xlUnderlineStyleSingle
lastArtistPage = Sheets("Print-Macro").HPageBreaks.Count
firstPageArtist = cellIndexOutput
cellIndexOutput = cellIndexOutput + 1
Sheets("Print-Macro").Rows(cellIndexOutput).RowHeight = 15
End If
Sheets("Print-Macro").Rows(cellIndexOutput).RowHeight = 20
Sheets("Print-Macro").Cells(cellIndexOutput, 2).Value = Sheets("Was").Cells(indexMain, 2).Value
Sheets("Print-Macro").Cells(cellIndexOutput, 2).Font.Underline = xlUnderlineStyleNone
Sheets("Print-Macro").Cells(cellIndexOutput, 3).Value = Sheets("Was").Cells(indexMain, 3).Value
Sheets("Print-Macro").Cells(cellIndexOutput, 3).Font.Underline = xlUnderlineStyleNone
cellIndexOutput = cellIndexOutput + 1
Sheets("Print-Macro").Rows(cellIndexOutput).RowHeight = 15
Sheets("Print-Macro").Cells(cellIndexOutput, 2).Value = Sheets("Was").Cells(indexMain, 4).Value
Sheets("Print-Macro").Cells(cellIndexOutput, 2).Font.Underline = xlUnderlineStyleNone
Sheets("Print-Macro").Cells(cellIndexOutput, 3).Value = Sheets("Was").Cells(indexMain, 5).Value
Sheets("Print-Macro").Cells(cellIndexOutput, 3).Font.Underline = xlUnderlineStyleNone
' A page break happened in the last two lines it appears
If lastArtistPage <> Sheets("Print-Macro").HPageBreaks.Count Then
If cellIndexOutput = firstPageArtist + 2 Then
f.Rows(firstPageArtist).PageBreak = xlPageBreakManual
Else
Set f = ThisWorkbook.Worksheets("Print-Macro")
Dim lastBreak As Integer
lastBreak = f.HPageBreaks(f.HPageBreaks.Count).Location.Row
If lastBreak = cellIndexOutput Then
Sheets("Print-Macro").Range("A" & f.HPageBreaks(f.HPageBreaks.Count).Location.Row - 1).EntireRow.Insert
cellIndexOutput = cellIndexOutput + 1
End If
Sheets("Print-Macro").Range("A" & f.HPageBreaks(f.HPageBreaks.Count).Location.Row).EntireRow.Insert
f.Rows(lastBreak).PageBreak = xlPageBreakManual
Sheets("Print-Macro").Range("A" & lastBreak & ":" & "C" & lastBreak).Merge
Sheets("Print-Macro").Range("A" & lastBreak & ":" & "C" & lastBreak).Value = "Noch " & artistName
Sheets("Print-Macro").Range("A" & lastBreak & ":" & "C" & lastBreak).Font.Underline = xlUnderlineStyleSingle
cellIndexOutput = cellIndexOutput + 1
End If
End If
lastArtistPage = Sheets("Print-Macro").HPageBreaks.Count
For i = 1 To f.HPageBreaks.Count
Worksheets("Print-Macro").Cells(i, 4).Value = f.HPageBreaks(i).Location.Row
Next
latestPage = currentPage
cellIndexOutput = cellIndexOutput + 1
artistNameLast = artistName
indexMain = indexMain + 1
Loop
End Sub
最佳答案
这是 known Excel bug .
一种解决方法是选择一个足够远的单元格,例如右下角,在访问 HPageBreaks
之前收藏:
Dim previousActiveCell As Range
Set previousActiveCell = ActiveCell
f.Cells(f.Rows.Count, f.Columns.Count).Activate
Dim lastBreak As Integer
lastBreak = f.HPageBreaks(f.HPageBreaks.Count).Location.Row
previousActiveCell.Activate
关于excel - VBA索引超出范围错误,但不是在调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53472041/
在文档中我们可以找到 The limits are based on a moving window that tracks the number of requests you send per h
我试图了解使用 Windows Azure 托管 Web 服务的正确方法。在阅读了一些可用的文档后,我已经达到以下几行: Windows Azure takes the following actio
我正在使用 unboundid ldap sdk 来执行 ldap 查询。运行 ldap 搜索查询时遇到一个奇怪的问题。当我对包含 50k 个条目的组运行查询时出现异常。我的异常(exception)
我有以下 docker-compose 文件: version: "2.4" services: auto_check: image: python mem_limit: 97M
我有副本集(托管在亚马逊上),其中有: 主要 中学 仲裁者 它们都是 3.2.6 版本,这个副本正在我的分片集群中创建一个分片(如果这很重要,尽管我认为它不重要)。 当我在 primary 上键入 r
我知道在 C++ 中访问缓冲区边界是未定义的行为。 这是来自 cppreference 的示例: int table[4] = {}; bool exists_in_table(int v) {
嗨,我有一个表单的 div。我希望当鼠标离开 div 时禁用单击事件。所以我尝试了这个,但它不起作用,div 仍然可以点击。有什么想法吗?? var flag = false; $("#foo").l
我正在使用我的客户端获取有关存储在我的 Swift 对象存储中的某个文件的一些信息,该文件可以通过 REST Api 访问。在 Swift 中,指向指定对象的 HEAD 方法和 url 返回它的元数据
如何在 Excel 的 CONCATENATE 函数中使用超过 255 个字符?我实际上也在 EXCEL 的 HYPERLINK 函数中使用 CONCATENATE 函数。一个例子如下: =HYPER
在 java 6 web 应用程序中,我尝试从执行的命令中检索大量输出。我在 javaworld article 上“借用/窃取/基于”它。我面临的问题是,由于输出被截断,长度似乎超出了大小限制。我已
我有一个更改事件,当选择框更改时会触发该事件。然而,选择框位于被替换的 div 内,因此会重新生成选择框。由于此错误可能是由于无限循环造成的,因此我猜测创建选择框时也必须触发我的触发事件。我尝试了很多
我正在 visual studio 2013 中用 c# 创建一个网络服务。我已连接到数据库并使用以下代码返回 json。 [WebMethod] [ScriptMethod(ResponseForm
我使用 php 脚本解析远程 xml 文件并将网页上的输出打印到 div 中。由于我需要输出必须与当前播放的轨道同步,所以我使用 Javascript 每 20 秒重新加载一次 div 内容。在测试页
#define MAX_BUFF_SIZE 64 char input[MAX_BUFF_SIZE]; int inSize = read(0, input, MAX_BUFF_SIZE); if
我在申请公司时遇到了问题。 我将总结系统的关键要素: 我公司的系统几年前就在 Windows XP 和 7(家庭版、专业版、基本版)机器上运行。 它是用 .NET 4.0 编写的,基于 WCF。 它使
我有一个渲染循环,用于监听数位板输入并从顶点/索引缓冲区(以及其他内容)中绘制。顶点数据可以增长,当它达到一定水平时,DispatchMsg(&msg) 会遇到这种情况: Unhandled exce
我通过 Postgres JDBC 驱动程序使用 Java 1.7 和 Postgres。将从 Web 服务使用数据库连接。在测试中,我得到了以下错误: FATAL: connection limit
我想知道当超过 Firebase 实时数据库的限制时会发生什么。问题是我知道我可以拥有的最大连接数仅为 100。现在,假设我的 Android 应用程序有 1,000 个活跃用户,并且我实现了实时数据
我正在将一组图像上传到我的 node.js Express 服务器,但收到错误 - “错误:超出 maxFieldsSize”。看起来默认的 maxFieldsSize 是 2MB。我需要能够上传最多
我正在使用 Django 构建一个小型 Web 项目,该项目有一个包含 ImageField 的模型 (Image)。当我尝试使用管理界面上传图片时,我遇到了这个问题(删除了个人身份信息): Runt
我是一名优秀的程序员,十分优秀!