Tag: vba

VBA和Excel:为什么我的TRIM脚本在大数据集上产生#VALUE?

以下脚本适用于较小的数据集(小于30k行左右),但当范围大于此值时,将导致所选范围内的每个单元格出现“#VALUE”错误。 Dim FirstCell As Range, LastCell As Range, MyRange As Range Set LastCell = Cells(Cells.Find(What:="*", SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _ Cells.Find(What:="*", SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Column) Set FirstCell = Cells(Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlRows, _ SearchDirection:=xlNext, LookIn:=xlValues).Row, _ Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlByColumns, _ SearchDirection:=xlNext, LookIn:=xlValues).Column) Set MyRange = Range(FirstCell, LastCell) MyRange.Select If MyRange Is Nothing Then Exit Sub Application.ScreenUpdating […]

为什么数字单元格没有.Characters()属性?

使用任何文本值,我可以单独格式化每个字符,然后通过迭代Range.Characters()集合将该格式复制到另一个单元格。 但是,如果单元格是一个数字(即使numberFormatting将其显示为一个string,例如date),那么它不会公开.Characters()属性,实际上不能有select地逐个格式化。 为什么Excel使用字符对象而不是数字显示string,即使数字显示为string?

Application.EnableEvents默认为False

使用Excel 2007/2010的用户正在使用我在2013年devise的Worksheet_Change和Worksheet_SelectionChange事件。 似乎正在发生的事情是,当他们第一次打开工作簿时,他们的工作表事件不会触发。 我确定他们有默认的选项来启用macros。 如果我打开即时窗口并运行Application.EnableEvents = True那么他们的事件开始触发就好了。 Excel 2013的用户似乎没有此问题,即使从共享的networking驱动器打开完全相同的工作簿的副本。 我似乎已经能够通过在Workbook_Open事件下放置Application.EnableEvents = True来解决这个问题,但我想知道这是一个可行的长期解决scheme。 我真的很想弄明白为什么这个问题首先要直接解决。

这些新颖的方法(也许是最好的方法?)在VBA中引用dynamic单元格?

我们通常使用expression式: Cells(i, 1) , Cells(i, "A")或Range("A" & i)来引用VBA中的一个dynamic单元格,但是我发现下面的怪异代码也可以工作: Sub Test1() For i = 1 To 10000 Range("A1")(i) = i Next End Sub 我也发现使用方括号[]来引用单元格的快捷方式符号(是的,我知道expressionEVALUATE命令的简写方法)也可以用在这里,如下面的代码 Sub Test2() For i = 1 To 10000 [A1].Resize(1000, 1)(i) = i Next End Sub 要么 Sub Test3() For i = 1 To 10000 [A1].Offset(i – 1) = i Next End Sub […]

Excel VBAexception行为的细胞。找合并细胞

解决:错误是由于在其他地方操作find的属性造成的 我对VBA的世界很陌生,我对.Find函数的一些exception行为有个疑问。 我有一些代码,我打电话在子程序如下。 For i = 2 To UBound(pullDataPckg) For j = 1 To UBound(section) Set cell = dataSheet.Cells.Find(What:=section(j)) 'Below returns nothing on call 2, works for call 1 'Set cell = dataSheet.Cells.Find(What:="Value from section(j) in second call") If Not cell Is Nothing Then 'Do some stuff End If Next Next pullDataPckg和section是两个string数组, dataSheet是一个工作表对象,并且代码都位于我调用的从工作表中提取数据值的Sub中。 我遇到的exception行为是, Find总是返回单元格作为我的第二个子调用单元格(search的单元格都是合并单元格,我知道是在工作表中,如果我unmerge单元格然后查找方法是能够find细胞)。 […]

获取光标在单元格中的位置

我正在尝试在公式栏中创build一个自定义的右键单击菜单(右键单击时出现的单元格,例如键入内容)。 我已经设法得到我想要的button,但我找不到如何find光标位于单元格内的位置。 例如,如果光标位于单元格中的第5个字符之后,我如何确定BeforeRightClick事件发生之前或之前? 我唯一发现的是相反的问题。 将光标放在单元格的特定部分,使用SendKeys: '=================================================================================== '- MOVE CURSOR IN THE FORMULA BAR AS REQUIRED '- Brian Baulsom September 2007 '=================================================================================== Sub test() Dim c As Integer c = 3 '—————————————————————————— Range("A1").Select ' select cell SendKeys "{F2}", True ' activate formula bar. cursor is to right of contents. DoEvents '—————————————————————————— '- move cursor 3 characters […]

使用VBA将Excel 2003转换为2007或最近的版本

我有一个xls excel文件(excel 97-2003工作簿),其中有vba代码。 我想将其转换为2007年或更高版本的Excel与启用此VBA代码。 我努力了: 另存为macro-enabled.xlsm文件 从这个博客更改macros的设置。 它改变了.xlsm中的文档,但在单元格的值上(macros正在运行),它显示#NAME而不是值。 orignal文件截图: 转化: 我被困在这里。 macros的代码: 1.moveAcross.bas Attribute VB_Name = "MoveAcross" Sub GoToValues() Attribute GoToValues.VB_Description = "Macro recorded 23-01-2001 by Murad Assaggaf" Attribute GoToValues.VB_ProcData.VB_Invoke_Func = " \n14" ' ' GoToValues Macro ' Macro recorded 23-01-2001 by Murad Assaggaf ' ' ActiveWindow.SmallScroll ToRight:=13 ActiveWindow.LargeScroll Down:=-2 ActiveWindow.SmallScroll Down:=-3 ActiveWindow.SmallScroll ToRight:=2 Range("X6").Select […]

运行时错误“9”:下标超出范围 – 仅当Excel VBEclosures时

所有, 我在Excelmacros中遇到了一些VBA代码的错误。 这是我正在尝试的工作stream程: 我有一个运行代码的模块来创build一个新的工作表,格式化并添加一堆值 在这个相同的模块中,我根据最后一行填充来确定一个单元格的范围(根据之前的步骤,这个单元格总是不同的) 一旦我知道这个范围,我使用下面的代码写入新创build的工作表codemodule,所以我可以设置一个'change_event'。 我只想在刚刚确定的范围内的值发生变化时触发change_event:` Dim Startline As Long Startline = 1 Dim x As Integer x = Errors.Count – 1 Dim rng As Range Set rng = Range("D" & LastRow – x & ":" & "D" & LastRow) With ThisWorkbook.VBProject.VBComponents(VRS.CodeName).CodeModule Startline = .CreateEventProc("Change", "Worksheet") + 1 .InsertLines Startline, "Dim rng As Range […]

如何在VBA中打开两个Excel实例之间进行复制?

我想将一个已经打开的Excel实例中的数据复制到VBA中的另一个Excel实例中。 我试过了: Option Explicit Sub copy_paste() Dim destination_sanitized As String Dim fs As New FileSystemObject destination_sanitized = fs.BuildPath("c:\temp\", "1.xlsx") Dim xl As New Excel.Application Dim wb As Workbook Set wb = xl.Workbooks.Open(Filename:=destination_sanitized) Dim r1 As Range Dim r2 As Range Set r1 = ThisWorkbook.Sheets("hidden").Range("E10:E13") Set r2 = wb.Sheets("Sheet1").Range("J20:J23") On Error GoTo Cleanup r1.Copy r2 Cleanup: […]

Excel中的VBAmacros来运行SQL插入语句

嗨,我很新的VBA,我希望有人能帮我最后一点的代码。 我试图从电子表格中取出单元格并将它们添加到SQL表中,但是我正在运行SQL语句。 这是我到目前为止的代码。 Private Sub ConnectDB() Dim oConn As Object Set oConn = CreateObject("ADODB.Connection") oConn.Open = "DRIVER={SQL Server};" & _ "SERVER=SERVER02;" & _ "DATABASE=platform;" & _ "USER=5y5t3mus3r;" & _ "PASSWORD=*******;" & _ "Option=3;" If oConn.State = adStateOpen Then MsgBox "Welcome to Database!" Else MsgBox "Sorry No Database Access." End If Dim rs As ADODB.Recordset Dim […]