小编Joh*_*son的帖子

什么进入Excel工作簿对象,增加文件大小?

我正在尝试减少我正在使用的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)

excel vba excel-vba

5
推荐指数
1
解决办法
1066
查看次数

VBA中的动态运算符.我怎么能够?

如何使用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)

显然这会失败,但任何人都可以使它工作吗?

variables vba dynamic operator-keyword

5
推荐指数
2
解决办法
2078
查看次数

如何在不逐个单元循环的情况下使用VBA忽略范围内的绿色三角形误差?

我有一些大型数据集,我正在自动化和分发.我想消除那些警告用户关于存储为文本的数字的小绿色三角形.我使用了以下代码但是在大量工作表上它非常慢.

     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如何在不逐个单元循环的情况下停止检查整个范围吗?

任何有效和快速的方法都会非常有帮助.先感谢您!!

excel vba error-checking

3
推荐指数
3
解决办法
2万
查看次数

循环遍历除少数之外的所有数字

我需要循环通过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 但据我所知,没有办法写出来.

excel vba excel-vba

2
推荐指数
2
解决办法
4306
查看次数

使用VBA将二维数组卸载到Excel工作表中的最快方法是什么?

由于在工作表中逐个单元地写入值的大循环,我有一个运行时间很长的例程.我以为我会聪明并将所有内容加载到2D阵列中然后快速将其转储到Excel工作表中.目标是加快速度.发现我不能只做我想要的.

  xlsheet.Range("C2") = MASTER_OUT
Run Code Online (Sandbox Code Playgroud)

发现以上不起作用.MASTER_OUT是一个包含34列和各行的2D数组.我希望我不必遍历数组并在工作表中逐个单元格放置数据,因为这根本不会节省任何时间.

arrays excel performance vba

2
推荐指数
1
解决办法
645
查看次数

使用 VBA 复制和粘贴格式很慢。我怎样才能加快速度?

以下代码是一个有效的函数。它只是很慢,我不知道如何加快速度。它需要一个 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)

excel performance vba

2
推荐指数
1
解决办法
7212
查看次数

为什么我要在VBA中确定变量的尺寸?

他们曾经说这是关于内存管理的.但是,看看我发现未能对变量进行维度化的事情将默认为一个变量数据类型,它分配22个字节的内存.

我们只考虑一兆字节的内存.1,000,000字节.这意味着我需要45,454个变量来咀嚼单个MB的内存.大多数现代系统都有几GB的内存.所以问题是我真的应该关心为我的所有变量仔细设置正确的调光吗?或者按现代标准浪费时间?

vba memory-management

1
推荐指数
1
解决办法
467
查看次数

使用VBA,拆分字符串并仅将第一项设置为变量?

拆分后将变量=设置为字符串的第一项的最简单方法是什么?myvar应该="这个"

  mystring = "this,that,theother"
  myvar = split(mystring, ",")
Run Code Online (Sandbox Code Playgroud)

string vba split

1
推荐指数
1
解决办法
1478
查看次数