- 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/
我遇到一个问题,即我的抓取工具正在跳过没有浏览引荐来源网址的浏览页面。我正在尝试解析 URL 中包含/browse/的所有页面,无论引用者如何。 以下是我的代码(根据 paul t 更新): from
我有4个屏幕。 X,A,B,C。导航模式应如下所示 这是代码 X 屏幕 class X extends StatelessWidget { @override Widget build(Bui
我想用 java 编写一个简单的网络浏览器,这是我的代码! import javax.swing.*; import java.io.*; import java.awt.*; import java
这个问题在这里已经有了答案: A home button in iOS 5, xcode 4.2, Story board (2 个回答) 8年前关闭。 来自 FirstView到SecondView
我使用 C#/ASP.Net 在 IIS7 中创建虚拟目录,以便外部人员可以浏览各种文档。 一切看起来都不错,除了浏览是一种沉闷的文本格式。当他们浏览到文件夹时,我如何创建更多的“Windows 资源
我想我在 Chrome 或 Internet Explorer 中见过 Gmail 这样做,但我从未在 Firefox 中见过它。我想我还是会问一下。是否可以在不需要的情况下进行文件上传?我看到你可以
我是 Java 的新手,作为第一次阅读,我阅读了几本有关 Java 语言的书籍。 我有几个关于 Java 文档的问题。如何“导航”它们?是否可以仅使用 Javadoc 来学习新概念? 这是一个示例 -
我有一个解析网络,现在我想浏览标签,或显示图表。我怎样才能得到图表?或者在树中导航。显示第一步然后其他等。并了解这棵树是如何 build 的。 import urllib from lxml impo
考虑以下情况: 杀戮戒指中的 N 项。需要拉取的项目是项目#k 数值论证解决方案不会真正起作用,因为计算或跟踪杀死环中事物的位置很烦人。 最佳答案 实际问题是什么?按 C-y 然后按 M-y k 次有
这是我之前的 question 的后续。 我试图从 here 了解 Haskell 中的列表拆分示例: foldr (\a ~(x,y) -> (a:y,x)) ([],[]) 我可以阅读 Haske
是否有任何 vim 工具通过 Latex 文档结构提供有效的导航。拥有像 NERDTree 面板这样的东西来表示 latex 文档的部分/子部分结构会非常有用。 最佳答案 扩展 mnosefishs
您好,我的应用程序中有一个模态视图 Controller ,当按下某个按钮时,该 Controller 会消失,并且其中带有 UITableView 的 View 会使用导航 Controller 滑
Glances v2.11.1 with psutil v5.4.3 /usr/lib/python3.6/site-packages/psutil/_pslinux.py:1152: Runtime
我正在使用 Eclipse,我希望我可以通过按 STRG 在以驼峰式书写的单词之间跳转。现在我正在使用 Sublime,我找不到这样做的快捷方式,也找不到实现它的插件。 下面的例子说明了我的问题 aF
我的主程序提示用户浏览文件以便使用 ffmpeg 进行转换。这是文件浏览的格式: 1. Select audio file for conversion ( mp3, wma):
我正在尝试浏览 SVN 存储库,而不必检查它: 是否可以在本地(Unix 上)执行此操作? 这可以通过 ssh 访问实现吗? 最佳答案 svn ls 有效。例如 svn ls http://my.sv
我有一个网站,其中列出了数据库中的企业列表。在每个页面上,您可以执行不同的操作,例如将其转发给 friend 、打印页面等。我的问题是我可以使用谷歌分析来跟踪每个列表的展示次数和浏览次数吗?因此,如果
在 Dart 我有一个嵌套的元素列表 void main() { var diction = {'1':'Alpha','2':'Beta','3':{'x':'Football','y':'
当我们的用户单击网页上的浏览按钮来上传任何文件时,我想更改窗口位置。我会给你一个场景 - 我的 html 表单上有一个浏览按钮,当用户单击一个弹出窗口时,该位置默认为“我的文档”。 实际上我想在单击“
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我是一名优秀的程序员,十分优秀!