我一直在测量代码执行时间,以衡量在本地和我的服务器上执行脚本之间的差异.有一次,我忘了禁用screen updating,感谢我对闪光灯不敏感,然后更详细地考虑它:
当我第一次开始使用时,VBA我总是认为它只是被使用,因此它不会吓到最终用户认为他们的PC即将崩溃.当我开始阅读更多关于提高代码效率的内容时,我理解它的用途,但screen updating实际上对代码执行时间的影响有多大?
如何过滤工作表中的数据,如何找到最后一行数据?我一直在玩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解决方案的可见行数的计数......
如何将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
我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) 我已经编写了这段代码来创建分支机构号码中的电子邮件地址列表.所有地址都采用以下格式:
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) 我使用以下代码快照循环文件夹中的文件,它有一个简单的方法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) 拿下面的代码; 我错过了一个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中的日期
我有一个带日期列的电子表格,按预期显示英国格式.
然后我操纵电子表格并将其保存为文本文件,以便将数据加载到另一个系统中.
我的问题来自于我保存文件,因为它做了两件事,首先是由于美国的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中,这两者都可以保持我需要的格式,当我将文件保存为文本时,我就会遇到上述问题.
我几乎想用零填充日期并强制保存为文字字符串,但我的想法已经用完了.
我确信这是一个简单的解决方案,但我需要另外一些关注这个问题,所以任何帮助都是值得赞赏的
vba ×7
excel ×6
excel-vba ×6
autofilter ×1
csv ×1
date-format ×1
group-concat ×1
if-statement ×1
loops ×1
mysql ×1
optimization ×1