- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 VBA 初学者(3 天前开始),试图构建一个宏。我希望获得有关我的代码的帮助,并了解我出错的部分代码中发生了什么。
代码的目标是从每个工作表最后一列的单元格中收集值,并将它们编译到第一个工作表中的银行列(我将在第一次打开工作表时创建)。
我的代码非常原始,可能包含很多错误。大多数情况下,它是从源(甚至是宏录制器)复制和粘贴的。我已经设法让它发挥作用,但我希望能浓缩它。有效的代码是:
Sub Test()
Dim LastCol As Long
Dim rng As Range
' Creating a bank sheet
Sheets.Add
' Returning to Page 1
Sheets("Page 1").Activate
' Use all cells on the sheet "Page 1"
Set rng = Sheets("Page 1").Cells
' Find the last column in "Page 1" and COPY
LastCol = Last(2, rng)
rng(2, LastCol).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Paste Selection in Sheet1
Sheets("Sheet1").Activate
Sheets("Sheet1").Paste
' Reset cursor to next blank space
Range("A" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Select
' Repeat for Page 2
Sheets("Page 2").Activate
Set rng = Sheets("Page 2").Cells
LastCol = Last(2, rng)
rng(2, LastCol).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Sheet1").Activate
Sheets("Sheet1").Paste
' Reset cursor to next blank space
Range("A" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Select
' Repeat for Page 3
Sheets("Page 3").Activate
Set rng = Sheets("Page 3").Cells
LastCol = Last(2, rng)
rng(2, LastCol).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Sheet1").Activate
Sheets("Sheet1").Paste
' Selecting range to sort
Set rng = ActiveSheet.Cells
LastCell = Last(3, rng)
With rng.Parent
.Select
.Range("A1", LastCell).Select
End With
' Sorting
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A177"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A2:A176")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
这不适用于具有不同数量工作表的工作簿。我尝试通过查找工作表的数量并循环浏览它们来压缩它,但我无法从在线资源中进一步理解。这就是我尝试做的:
For N = 2 To ThisWorkbook.Worksheets.Count
' Use all cells on active sheet
ActiveWorkbook.Worksheets(N).Select
Set rng = ActiveWorkbook.Cells
' Find the last column in active sheet and COPY
LastCol = Last(2, rng)
rng(2, LastCol).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
' Paste Selection in Sheet1
Sheets("Sheet1").Activate
Sheets("Sheet1").Paste
' Reset cursor to next blank space
Range("A" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Select
Next N
不幸的是,这段代码不起作用。
如何创建一个循环来实现我用第一个代码能够完成的任务?
我在代码中使用的相关函数如下所示(由 Ron De Bruin 提供):
Function Last(choice As Long, rng As Range)
'Ron de Bruin, 5 May 2008
' 1 = last row
' 2 = last column
' 3 = last cell
Dim lrw As Long
Dim lcol As Long
Select Case choice
Case 1:
On Error Resume Next
Last = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
Case 2:
On Error Resume Next
Last = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
Case 3:
On Error Resume Next
lrw = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
On Error Resume Next
lcol = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
On Error Resume Next
Last = rng.Parent.Cells(lrw, lcol).Address(False, False)
If Err.Number > 0 Then
Last = rng.Cells(1).Address(False, False)
Err.Clear
End If
On Error GoTo 0
End Select
End Function
Function LastCol(sh As Worksheet)
On Error Resume Next
LastCol = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
End Function
最佳答案
这希望能帮助您入门。首先,据我所知,这是应该执行相同操作的相同代码。删除所有选择并激活后,它会复制“页面”工作表的最后一行:
Sub Test()
Dim LastCol As Long
Dim LastRow As Long
Dim NextRowDestination As Long
Dim rng As Range
Sheets.Add After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = "Sheet1"
With Sheets("Page 1")
LastCol = Last(2, .Cells)
LastRow = Last(1, .Cells(1, LastCol).EntireColumn)
Set rng = Range(.Cells(2, LastCol), .Cells(LastRow, LastCol))
rng.Copy Sheets("Sheet1").Cells(2, 1)
NextRowDestination = Last(1, Sheets("Sheet1").Cells(1, 1).EntireColumn) + 1
End With
With Sheets("Page 2")
LastCol = Last(2, .Cells)
LastRow = Last(1, .Cells(1, LastCol).EntireColumn)
Set rng = Range(.Cells(2, LastCol), .Cells(LastRow, LastCol))
rng.Copy Sheets("Sheet1").Cells(NextRowDestination, 1)
NextRowDestination = Last(1, Sheets("Sheet1").Cells(1, 1).EntireColumn) + 1
End With
With Sheets("Page 3")
LastCol = Last(2, .Cells)
LastRow = Last(1, .Cells(1, LastCol).EntireColumn)
Set rng = Range(.Cells(2, LastCol), .Cells(LastRow, LastCol))
rng.Copy Sheets("Sheet1").Cells(NextRowDestination, 1)
NextRowDestination = Last(1, Sheets("Sheet1").Cells(1, 1).EntireColumn) + 1
End With
End Sub
正如您所看到的,很容易知道每张工作表发生了什么。另外,您很快就会发现有很多重复的代码!循环的完美场所(您可以免费回答“如果我有超过 3 张纸怎么办?”的主要问题)!
Sub Test2()
Dim LastCol As Long
Dim LastRow As Long
Dim counter As Long
Dim NextRowDestination As Long
Dim rng As Range
Dim ws As Worksheet
Sheets.Add After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = "Sheet1"
NextRowDestination = 2
For counter = 1 To ActiveWorkbook.Worksheets.Count
If Left(Worksheets(counter).Name, 4) = "Page" Then
Set ws = Worksheets(counter)
With ws
LastCol = Last(2, .Cells)
LastRow = Last(1, .Cells(1, LastCol).EntireColumn)
Set rng = Range(.Cells(2, LastCol), .Cells(LastRow, LastCol))
rng.Copy Sheets("Sheet1").Cells(NextRowDestination, 1)
NextRowDestination = Last(1, Sheets("Sheet1").Cells(1, 1).EntireColumn) + 1
End With
End If
Next counter
End Sub
现在请记住,我做了一些假设,因为没有看到您的数据结构,我很难想象: 1)您不想复制任何标题行 2) 您正在创建的工作表没有标题行,数据从第 2 行开始复制。 3)我没有对你的排序代码做任何事情,因为我不完全确定你在那里做了什么。
4)我没有对重复的 Sheet1 或类似的内容进行任何检查。应考虑错误处理。
但是上面的 Test2 代码应该让您非常接近您想要做的事情(减去排序位)。
关于vba - 循环浏览工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32784296/
我最近一直在学习 Clojure。 Clojure 世界中是否有类似 Scala 的工作表这样的东西,我可以在其中放入任何代码并在保存后立即对其进行评估?或者也许 Clojure 有类似的解决方案?
有人可以帮我吗?我想知道如何过滤工作表中的多个选项卡(C1-C19)。这是我所做的: 我创建了一张表格,将所有回复存储在我的谷歌表单(事件注册表单)中。每个参与者将收到一个坦克编号,每个坦克编号根据其
这就是我将打开的面板显示为 float 窗口的方式。 有人可以帮我将面板作为工作表运行吗?窗口对象是mWindow。我使用的许多标准代码都已被折旧。 NSOpenPanel *openPanel =
当您仅键入 worksheets() 时,默认范围 ActiveWorkbook 或 ThisWorkbook 是什么?对于那些不了解这些区别的人来说,它们非常重要,尤其是在 Excel 2013 中
我有一个带有一些图表的 HTML 页面。我想要做的是编写一个加载 javascript 函数,它将从 excel 表中读取值,将它们存储在变量中并在 html 页面上使用它们。我的问题是是否有任何 j
我需要将参数 callFrom 传递给 SwiftUI 中的工作表。 奇怪的是,该参数在第一次调用时没有使用,但对以下调用有效。 import SwiftUI struct ContentView:
我试着 var tempSheet = wrksheets[sheetName] as Worksheet; 在哪里 wrksheets是类型表 sheetName 是“带空格的工作表名称” 如果
该函数用作“ Assets 类别分配”引擎(在参数范围内具有约束)并在数组的每一行上模拟投资组合模型。我尝试使用四种方法将数组发布到工作表上,但每种方法都失败了。 对于 Assets A、B、C、D
目前,我的 excel 文件有两张表,一张名为“English”,一张名为“French”。 我以编程方式打开我的工作簿并编辑我的英文表,没有任何问题。当我打开第二张工作表时,出现以下错误: The
我添加了一个 VBA 表单 userform和一个模块 Module1在 Excel 中打开 Microsoft VBA 编辑器 (Alt+F11)。 现在,每当我打开任何其他 Excel 时,按 A
在单个 Excel 工作簿中,我想选择各种工作表来运行 VBA 子例程。我找到了显示如何遍历选定工作表的代码,它使用“MsgBox sh.Name”;但是,当我将代码放入其中时,它只会影响选择的最后一
我想知道是否有一个函数可以在 Excel 中加载特定于 Python 的工作表,例如,如果我有 34 张工作表只加载前 25 张工作表。通过以下行,我加载了所有工作表。 xlsx=pd.ExcelFi
我有一个名为“A”、“B”、“C”等的工作表的 xlsx。我需要形成一个名称为“A”、“B”、“C”的表作为第一列,以及来自的一些数据每个工作表中与第二列相同的单元格。例如,这可能看起来像: S
我有一张用密码保护的工作表。当我使用 VBA 更改该表上的任何内容时,我会像这样取消保护: Private Sub Worksheet_Change(ByVal target As Range)
我想将 Excel 文档插入 Excel 工作表。我可以通过以下步骤手动执行此操作; 插入/文本/对象/从文件创建(勾选显示为图标)/浏览。 然后我选择文件并插入文档。 我想通过宏来做到这一点。 (录
是否可以创建 批处理文件那将执行以下操作? 重命名 Excel 文件中的单个工作表(不是 Excel 工作簿/文件本身) 将简单格式应用于 Excel 文件 - 例如,将字体和字体大小应用于整个工作簿
Private Sub CommandButton1_Click() Dim ws As Worksheet With Application.FileDialog(msoFileDialog
我想知道是否可以在不复制该工作表的情况下引用另一本工作簿中的 Excel 工作表? 情况:我有一些非常大的工作表,其中充满了各种数据,但我不想在我的工作簿中保留它们的副本,因为虽然每个工作簿都使用相同
我有这个 Python 字典,我想将这个数据写入 Excel 文件。 注意:有很多类别,每个类别有很多汽车(为简单起见,我使用了 2 个类别) data = {"Category": {"Diesel
我有一个 excel 工作簿,在工作簿中我有 2 张名为 Front Page 和 Drafting 的工作表。起草工作表引用了首页工作表中的一些值。这只是一个基本的引用 我有像这样的公式:='Fro
我是一名优秀的程序员,十分优秀!