我正在尝试减少我正在使用的Excel工作簿的文件大小.我已经知道未使用的行是一个问题和不必要的图像等.神秘的是为什么excel的秘密部分似乎只是增长?
我可以发现我整个文档的总大小
Sub workbook_objectsize()
With CreateObject("Scripting.FileSystemObject")
Set wb = ActiveWorkbook
WBObjectSize = .GetFile(wb.fullname).Size
MsgBox (Format(WBObjectSize, "#,##0") & " Bytes")
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
我可以通过工作表和WB对象发现大小
Sub GetSheetSizes()
' ZVI:2012-05-18 Excel VBA File Size by Worksheet in File
' CAR:2014-10-07 Enhanced to take hidden and very hidden sheets into account
Dim a() As Variant
Dim Bytes As Double
Dim i As Long
Dim fileNameTmp As String
Dim wb As Workbook
Dim visState As Integer
Set wb = ActiveWorkbook
ReDim a(0 To wb.Sheets.Count, …
Run Code Online (Sandbox Code Playgroud) 如何使用VBA创建动态运算符?
swt = True
op = IIf(swt = True, "<", ">")
a = 10
B = 20
IF a op B then
MsgBox ("a is greater than B")
End If
Run Code Online (Sandbox Code Playgroud)
显然这会失败,但任何人都可以使它工作吗?
我有一些大型数据集,我正在自动化和分发.我想消除那些警告用户关于存储为文本的数字的小绿色三角形.我使用了以下代码但是在大量工作表上它非常慢.
Range(Cells(1, 1), Cells(lastrow, lColumn)).Select
'kill those dang green cell triagles
Dim rngCell As Range, bError As Byte
For Each rngCell In Selection.Cells
For bError = 3 To 3 Step 1
With rngCell
If .Errors(bError).Value Then
.Errors(bError).Ignore = True
End If
End With
Next bError
Next rngCell
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,我已经把它减少到1/7的时间,没有循环遍历我想要阻止的每个错误,但它仍然非常慢.
我也已经知道了
Application.ErrorCheckingOptions.NumberAsText = False
Run Code Online (Sandbox Code Playgroud)
但我不想使用它,因为我不想更改用户系统设置.我想要循环的效果而不循环遍历所有单元格.我可以告诉Excel如何在不逐个单元循环的情况下停止检查整个范围吗?
任何有效和快速的方法都会非常有帮助.先感谢您!!
我需要循环通过i = 1到99,但我想跳过一些特定的i值.我想跳过的数字是41,83,87,91,92,93,98
我意识到我可以把所有的动作都嵌入到一个i <> 41
或者i <> 83
等等中.难道没有更简单的方法吗?也许指定一个变量来包含要跳过的值CSL
并使用Split
?我不知道我的大脑不起作用.请帮忙.
For i = 1 To 99
If i <> 41 And i <> 83 And i <> 87 And i <> 91 _
And i <> 92 And i <> 93 And i <> 98 Then
'do stuff
End If
Next i
Run Code Online (Sandbox Code Playgroud)
宁愿设置一个变量,如:
not_use = "41,83,87,91,92,93,98"
Run Code Online (Sandbox Code Playgroud)
然后有一些For i = 1 To 99
除非,not_use
但据我所知,没有办法写出来.
由于在工作表中逐个单元地写入值的大循环,我有一个运行时间很长的例程.我以为我会聪明并将所有内容加载到2D阵列中然后快速将其转储到Excel工作表中.目标是加快速度.发现我不能只做我想要的.
xlsheet.Range("C2") = MASTER_OUT
Run Code Online (Sandbox Code Playgroud)
发现以上不起作用.MASTER_OUT是一个包含34列和各行的2D数组.我希望我不必遍历数组并在工作表中逐个单元格放置数据,因为这根本不会节省任何时间.
以下代码是一个有效的函数。它只是很慢,我不知道如何加快速度。它需要一个 excel 行号和它的 headerval(字符串)的值,并在不同的工作表上找到相同的 headerval,然后复制格式并将其应用于我们的新工作表。真假是因为源工作表有 2 个不同的格式选项。它在行中传递以使用 23 或 24。ZROW 是一个公共变量,它与 ROW 一起设置以开始查找。srccolbyname 函数从具有相同 headerval 的源表中获取一个列号
Function formatrow(roww As Long, header As Boolean)
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Dim headerval As String
Dim sht As Worksheet
Set sht = ThisWorkbook.Sheets("DEALSHEET")
Dim sht2 As Worksheet
Set sht2 = ThisWorkbook.Sheets("Sheet1")
If header = True Then: srcrow = 23: Else: srcrow = 24
LastColumn = sht.Cells(ZROW + 1, sht.Columns.Count).End(xlToLeft).Column
For x = 2 To LastColumn
headerval = sht.Cells(ZROW + 1, x).Value
srccol …
Run Code Online (Sandbox Code Playgroud) 他们曾经说这是关于内存管理的.但是,看看我发现未能对变量进行维度化的事情将默认为一个变量数据类型,它分配22个字节的内存.
我们只考虑一兆字节的内存.1,000,000字节.这意味着我需要45,454个变量来咀嚼单个MB的内存.大多数现代系统都有几GB的内存.所以问题是我真的应该关心为我的所有变量仔细设置正确的调光吗?或者按现代标准浪费时间?
拆分后将变量=设置为字符串的第一项的最简单方法是什么?myvar应该="这个"
mystring = "this,that,theother"
myvar = split(mystring, ",")
Run Code Online (Sandbox Code Playgroud)