- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个要从中运行此代码的模板工作簿。代码是遍历一个目录中的所有文件,并遍历每个文件中的所有工作表。在每个工作表中,运行一个基本格式化数据的过程,然后将粘贴复制到模板工作簿中的工作表中,在该工作表中完成更多格式化。
当文件中只有一个工作表时,我拥有的这段代码有效,但是当有多个工作表时,工作表循环发生在模板工作簿而不是文件上。
我已将格式化代码创建为要调用的不同宏。我尝试在格式化宏中添加工作表循环,但遇到了同样的问题。
Option Explicit
Sub testLoopTabs()
Dim MyFolder As String, MyFile As String
Dim wb As Workbook, wbCopy As Workbook
Dim ws As Worksheet 'to loop through all the sheets
'Opens a file dialog box for user to select a folder
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
MyFolder =.SelectedItems(1)
Err.Clear
End With
'stops screen updating, calculations, events, and status bar updates to help code run faster
'you'll be opening and closing many files so this will prevent your screen from displaying that
MemorySaveTrue
'You can use this procedure instead 'This section will loop through and open each file in the folder you selected
'and then close that file before opening the next file
MyFile = Dir(MyFolder & "\", vbReadOnly)
Set wb = ThisWorkbook 'to refer to the workbook containing the code Do While MyFile <> ""
Set wbCopy = Workbooks.Open(Filename:=MyFolder & "\" & MyFile, UpdateLinks:=False, ReadOnly:=True) 'loop worksheet
' Begin the loop.
For Each ws In wbCopy.Worksheets
'run process
'format data
Rows("1:14").Select
Selection.DeleteShift:=xlUp
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.WindowState = xlMaximized
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.UnMerge
Columns("A:A").Select
Selection.TextToColumnsDestination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Columns("A:A").Select
Selection.InsertShift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Select
ActiveCell.FormulaR1C1 = "Market"
Range("A2").Select
ActiveCell.FormulaR1C1 = "=MID(CELL(""filename"",R[-1]C),FIND(""]"",CELL(""filename"",R[-1]C))+1,255)"
Range("A2").Select
Selection.Copy
With Range("B1")
Range(.Cells(2, 0),.End(xlDown).Offset(0, -1)).Select
End With
ActiveSheet.Paste
'format dates and text to column
Columns("E:F").Select
Application.CutCopyMode = False
Selection.NumberFormat = "dd/mm/yyyy"
Columns("E:E").Select
Selection.TextToColumnsDestination:=Range("E1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Columns("F:F").Select
Selection.TextToColumnsDestination:=Range("F1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
'find Net Value column
Dim cell As Range
Dim I As Integer
For I = 12 To 20
If Cells(1, I).Value = "Net Amount" Then
Columns(I).Select
Selection.Cut
Columns("K:K").InsertShift:=xlToRight
Else
End If
Next I
'format numbers to general
Columns("H:H").Select
Selection.TextToColumnsDestination:=Range("H1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Columns("I:I").Select
Selection.TextToColumnsDestination:=Range("I1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Columns("K:K").Select
Selection.TextToColumnsDestination:=Range("K1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Columns("L:L").Select
Selection.TextToColumnsDestination:=Range("L1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Columns("M:M").Select
Selection.TextToColumnsDestination:=Range("M1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
'add Other Charges
Columns("N:N").Select
Selection.InsertShift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("N1").Select
ActiveCell.FormulaR1C1 = "Other Charges"
Range("N2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=IF(RC[-7]=""B"",ROUND(RC[-3]-RC[-2]-RC[-1],2),ROUND(RC[-2]-RC[-3]-RC[-1],2))"
Range("N2").Select
If IsEmpty(Range("B3")) = False Then
Range("N2").Select
Selection.Copy
With Range("M2")
Range(.Cells(2, 2),.End(xlDown).Offset(0, 1)).Select
End With
ActiveSheet.Paste
Range("A2:N2").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Else
Range("A2:N2").Copy
End If
'paste to brokertradefile
wb.Worksheets("BrokerTradeFile").Activate
Range("A6").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'end process
wbCopy.Activate
' The following line shows how to reference a sheet within
' the loop by displaying the worksheet name in a dialog box.
MsgBoxws.Name
Next ws
MsgBoxwbCopy.Name
wbCopy.CloseSaveChanges:=False
MyFile = Dir
Loop
'turns settings back on that you turned off before looping folders
MemorySaveFalse
End Sub
Sub MemorySave(isOn As Boolean)
Application.Calculation = IIf(isOn, xlCalculationManual, xlCalculationAutomatic)
Application.EnableEvents = Not(isOn)
Application.ScreenUpdating = Not(isOn)
Application.DisplayStatusBar = Not(isOn)
ActiveSheet.DisplayPageBreaks = False
End Sub
最佳答案
这是我将如何做到这一点:
Option Explicit
Sub testLoopTabs()
Dim MyFolder As String, MyFile As String
Dim wb As Workbook, wbCopy As Workbook
Dim ws As Worksheet 'to loop through all the sheets
'Opens a file dialog box for user to select a folder
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
MyFolder = .SelectedItems(1)
Err.Clear
End With
'stops screen updating, calculations, events, and statsu bar updates to help code run faster
'you'll be opening and closing many files so this will prevent your screen from displaying that
MemorySave True 'You can use this procedure instead
'This section will loop through and open each file in the folder you selected
'and then close that file before opening the next file
MyFile = Dir(MyFolder & "\", vbReadOnly)
Set wb = ThisWorkbook 'to refer to the workbook containing the code
Do While MyFile <> ""
Set wbCopy = Workbooks.Open(Filename:=MyFolder & "\" & MyFile, UpdateLinks:=False, ReadOnly:=True)
'loop worksheet
' Begin the loop.
For Each ws In wbCopy.Worksheets
'run process
Call formattradefiledata
'end process
' The following line shows how to reference a sheet within
' the loop by displaying the worksheet name in a dialog box.
MsgBox ws.Name
Next ws
MsgBox wbCopy.Name
wbCopy.Close SaveChanges:=False
MyFile = Dir
Loop
'turns settings back on that you turned off before looping folders
MemorySave False
End Sub
Sub MemorySave(isOn As Boolean)
Application.Calculation = IIf(isOn, xlCalculationManual, xlCalculationAutomatic)
Application.EnableEvents = Not (isOn)
Application.ScreenUpdating = Not (isOn)
Application.DisplayStatusBar = Not (isOn)
ActiveSheet.DisplayPageBreaks = False
End Sub
wb
,正在打开的文件被引用为
wbCopy
并循环浏览您可以使用的所有工作表
For Each ws In wbCopy.Worksheets
在您引用
ws As Worksheet
之后.就像告诉 excel,对于工作簿中工作表中的每个工作表
wbCopy
.
关于excel - 循环浏览所有工作簿和所有工作表,格式化并复制到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436370/
我正在从事的项目需要使用 toString 方法打印银行帐户余额。我不允许向当前程序添加任何方法,但我需要将 myBalance 变量格式化为 double 型,该变量保留两位小数而不是一位。在这个特
我喜欢 Visual Studio (2008) 格式化 C# 代码的方式;不幸的是,在编写 C++ 代码时,它的行为方式似乎有所不同。 比如我这样写代码的时候: class Test { publi
Scanner scan = new Scanner(System.in); System.out.println("Enter three positive integers seperated b
在 aspose(使用 C#)中用于格式化数字的正确样式属性是什么。我想做两件事: 1) 将五位数字格式化为邮政编码。(我不太确定使用哪个 Style 属性来获取自定义 excel 邮政编码格式) 2
我希望用户输入从 00 到 23 和从 00 到 59 的 Local.Time 的小时和分钟,我将其扫描为一个 int。它有效,但对于从 00 到 09 的值,int 忽略 0,然后将其放置为 0,
大家好, 请查看上面的图片,我有两张 table 。在下面代码的第一个表中,我得到了这种格式。 但我想像 Table2 那样格式化,每个合并单元格中的行数是动态的,而且不一样。 有没有办法像table
我在一个 laravel 网站工作,我只是想知道是否有办法为用户格式化 created_at 值,因为现在它类似于以下内容: 2017-09-20 13:41 但我更愿意将其格式化为易于阅读的格式,例
我正在尝试在 JTextPane 中进行一些基本的格式化。为此,我决定使用 html(HTMLDocument 和 HTMLEditorKit)。 这里是按钮的操作监听器代码,应使所选文本变为粗体 b
是否有规则或插件会导致 es-lint 错误或警告,如果范围内的声明没有像下面那样间隔,赋值运算符的对齐方式相同? var a = 'a'; var bb = 'b'; var ccc = 'd
我正在尝试重新格式化 LinkedHashMap 的输出以排除逗号和大括号。 这是我的看跌期权: token.put("[Server.Protocol]", url.getProtocol() +
我有一个程序,可以从文本文件中读取大量文本,然后根据文本内容随机化内容以显示为短篇故事。该程序可以运行,但最后一部分(我显示的 Material )非常笨重且效率不高,我想知道是否有人对如何更有效地获
我正在尝试将 VIM 作为我的 ruby/rails 编辑器。太胖了,我对它的功能印象深刻 并且我能够安装以下插件以提供更好的 IDE 体验 自动配对 Better-snipmate-snippe
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有两个 jQuery 函数。我想先运行下面的第一个,然后在该函数完成后运行另一个。通常我会在代码的第一部分添加一个函数,但不确定如何使用这个 block 来做到这一点,或者它是否是正确的方法。 简而
在 Python 2.7 中,我有一个包含数字 1-25 字符串的列表(例如)。打印它们时,我希望列表打印 5 行,每行 5 个数字。 理想情况下: >>> print(myList) ['1', '
我有以下功能来打印借阅者已取出的书籍列表。 void searchBorrowerLoans(int a) { int i; for (i = 1
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 5 年前。 Improv
我正在尝试实现一个用作 ListView header 的 TextView。我想对其进行格式化,以便我基本上有一个以第一行为中心的标题,然后是以下几行的附加信息。如何格式化文本/字符串以创建这种格式
我尝试格式化数字字段 select to_char(12315.83453, 'FM999999999999D9999') 在这种情况下一切正常。结果是 12315.8345 但是如果值在0到1之间
我有一个带有 BigDecimal 字段的类。我把这个对象放到 JSP(Spring MVC)中。而且我需要显示十进制不带零的 BigDecimal 字段(20.00 就像 20),这就是为什么我的
我是一名优秀的程序员,十分优秀!