小编Ali*_*eir的帖子

屏幕更新的效果

我一直在测量代码执行时间,以衡量在本地和我的服务器上执行脚本之间的差异.有一次,我忘了禁用screen updating,感谢我对闪光灯不敏感,然后更详细地考虑它:

当我第一次开始使用时,VBA我总是认为它只是被使用,因此它不会吓到最终用户认为他们的PC即将崩溃.当我开始阅读更多关于提高代码效率的内容时,我理解它的用途,但screen updating实际上对代码执行时间的影响有多大?

excel optimization vba excel-vba

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

从过滤范围获取最后一行

如何过滤工作表中的数据,如何找到最后一行数据?我一直在玩Special Cells,Visible Cells但找不到解决方案.我认为它必须是我的下面的某种变化:

    ...
    With ws
        LR = .Range("A" & Rows.Count).End(xlUp).Row
        .Range("A1:E" & LR).AutoFilter Field:=2, Criteria1:="=4"
        LRfilt = .Range("A" & Rows.SpecialCells(xlCellTypeVisible).Count).End(xlUp).Row
        Debug.Print LR
        Debug.Print LRfilt
    End With
    ...
Run Code Online (Sandbox Code Playgroud)

文件可以在这里找到:

wikisend.com/download/443370/FindLRFilteredData.xls

编辑:

在与Siddharth讨论后意识到我不希望Last Row我需要的属性能够找到导致Sid解决方案的可见行数的计数......

excel vba autofilter excel-vba

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

选择 GROUP_CONCAT 中的 WHERE id

如何将WHEREorHAVING子句与 a 结合使用GROUP_CONCAT,以便返回的数据将包括GROUP_CONCAT包含 ID 的项目的任意组合,而不仅仅是单个匹配项,例如

SELECT p.id,
p.title,
GROUP_CONCAT(a.author_id) as 'aus'
FROM publications p INNER JOIN authors a
    ON p.publication_id = a.publication_id
WHERE a.author_id = 2
GROUP BY p.id,p.title
Run Code Online (Sandbox Code Playgroud)

会回来

id    title     aus
1     A         1,2,3
2     B         1,2
3     C         2
4     D         2
5     E         2,3
Run Code Online (Sandbox Code Playgroud)

而不仅仅是 3 和 4。

我在 a.author_id 列和产品上尝试了HAVING和子句的各种组合。WHEREGROUP_CONCAT

mysql group-concat

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

是否可以使用宏批量转换csv到xls?

csv.xls格式中需要大量的文件.是否可以使用宏运行批量转换或使用其他语言进行最佳操作?

我使用此代码http://www.ozgrid.com/forum/showthread.php?t=71409&p=369573#post369573来引用我的目录,但我不确定打开每个文件并保存它们的命令.这就是我所拥有的:

Sub batchconvertcsvxls()
    Dim wb As Workbook
    Dim CSVCount As Integer
    Dim myVar As String

    myVar = FileList("C:\Documents and Settings\alistairw\My Documents\csvxlstest")
    For i = LBound(myVar) To UBound(myVar)

        With wb

            Application.Workbooks.OpenText 'How do I reference the myvar string ?
            wb.SaveAs '....

        End With

    Next
End Sub

Function FileList(fldr As String, Optional fltr As String = "*.*") As Variant
    Dim sTemp As String, sHldr As String
    If Right$(fldr, 1) <> "\" Then fldr = fldr …
Run Code Online (Sandbox Code Playgroud)

csv vba file-conversion excel-vba batch-processing

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

字符串格式丢失

我已经编写了这段代码来创建分支机构号码中的电子邮件地址列表.所有地址都采用以下格式: lp0000@xxx.co.uk

问题是一些分支数字是3位数,所以在这些之前插入零,例如681变为0681.我通过使用自定义数字格式来做到这一点,0000但由于每个的实际值仍然000是在创建电子邮件地址时从零开始就失去了.

我可以编写更多代码来复制数字格式,还是需要先编写一些内容来查找所有三位数字,然后在它们之前插入0.

Option Explicit
Sub Pop_Emails()
    Dim brno As String
    Dim i As Integer
    Dim wks As Worksheet

    Set wks = Sheets("1A")
    i = 2
    Do While i <> 191
        With wks
            brno = .Cells(i, 1).Value
            .Cells(i, 3) = "lp" & brno & "@xxxx.co.uk"
        End With
    i = i + 1
    Debug.Print brno
    Loop
End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba string-formatting excel-vba

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

为什么这个IF语句不需要End IF

我使用以下代码快照循环文件夹中的文件,它有一个简单的方法If来检查文件夹中是否有文件,如果没有则退出.我已经意识到它End If最终不需要正确编译.但是,我想添加一个msgbox解释为什么它已经退出并且这样做我需要End If向我的代码介绍一个.

这是为什么?

原始代码

If Len(strfilename) = 0 Then Exit Sub
    Do Until strfilename = ""
       'Do some stuff
    strfilename = Dir()
Loop
Run Code Online (Sandbox Code Playgroud)

使用MsgBox

If Len(strfilename) = 0 Then
    MsgBox ("No Files Found")
    Exit Sub
Else
    Do Until strfilename = ""
        'Do some stuff
    strfilename = Dir()
    Loop
End If
Run Code Online (Sandbox Code Playgroud)

excel vba loops if-statement excel-vba

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

为什么excel有时会产生"不正确"的错误消息?

拿下面的代码; 我错过了一个End With但是当编译时错误是:Next without For这是不正确的.

Option Explicit
Public Sub Payments()
    Dim ws As Worksheet
    '--> Format the original workbook
    For Each ws In ThisWorkbook.Worksheets
        With ws
            .UsedRange.EntireColumn.Hidden = False

    Next

End Sub
Run Code Online (Sandbox Code Playgroud)

我已经看到这种行为与其他错误,如果问题没有正确传达.为什么是这样?

excel vba compiler-errors excel-vba

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

在VBA中转换为文本时保留日期格式

我正在努力处理excel/VBA中的日期

我有一个带日期列的电子表格,按预期显示英国格式.

然后我操纵电子表格并将其保存为文本文件,以便将数据加载到另一个系统中.

我的问题来自于我保存文件,因为它做了两件事,首先是由于美国的Excel偏见,它试图"翻转"日期所以例如2012年7月1日从2012年7月1日到2012年1月7日

其次当我然后保存文件并重新打开文本文件时,它似乎已经删除了零,所以我的日期现在不仅读取错误的方式,而是没有零,所以显示7/1/2012

我导入的系统非常具体,它接受的日期格式.

我尝试了各种各样的

ActiveCell.FormulaR1C1 = "=TEXT(RC[-1],""dd/mm/yyyy"")"

Cells(x, 3).Value = Left(CStr(Cells(x, 3).Value), 2) + "/" + Mid(CStr(Cells(x, 3).Value), 4, 2) + "/" + Right(CStr(Cells(x, 3).Value), 4)
Run Code Online (Sandbox Code Playgroud)

在Excel中,这两者都可以保持我需要的格式,当我将文件保存为文本时,我就会遇到上述问题.

我几乎想用零填充日期并强制保存为文字字符串,但我的想法已经用完了.

我确信这是一个简单的解决方案,但我需要另外一些关注这个问题,所以任何帮助都是值得赞赏的

excel vba date-format

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