Tag: macros

VBA / Excelmacros – 尝试使用从一个工作表绘制并填充到多个工作表的数组来简化代码

我最初做的工作,但它很笨重,我很确定可以精简。 这是代码的一小部分(我重复了这个过程大约200次以上,我不得不把它分成两个macros): Set rng = ws.Range("C11:AJ11") l = 13 For Each cell In rng Sheets(l).Range("D23") = cell.Value Sheets(l).Range("I23") = cell.Value l = l + 1 Next cell Set rng = ws.Range("C12:AJ12") l = 13 For Each cell In rng Sheets(l).Range("D24") = cell.Value Sheets(l).Range("I24") = cell.Value l = l + 1 Next cell 所以这个工作,但现在我想弄清楚如何使用一个数组,可能精简(如果这是可能的?或者一个数组不是最好的方法吗?我很乐意提供更好的方法build议。): Dim row […]

从另一个文件调用macros时出错

“对象不支持这个属性或方法” 是我正在尝试从当前文件调用另一个macros的错误。 我正在循环几个Excel工作簿,并需要在我正在循环的文件中运行一个macros。 Sub SaveBacktestingFiles() Dim wBCalc As Workbook Dim wBRaw As Workbook Dim wBRun As Workbook For Each c In Worksheets("Static").Range("FILE_RANGE").Cells Range("Date_Range").Value = c Calculate FS_Name = Range("FS_Name_Range").Value FO_RawName = Range("FO_RawName_Range").Value Set wBRun = ActiveWorkbook Workbooks.Open Filename:=Range("FO_CalcName_Range").Value, ReadOnly:=True Application.DisplayAlerts = False ActiveWorkbook.SaveAs FS_Name Set wBCalc = ActiveWorkbook Application.Run (wBCalc & "!FilterLoop") ActiveWorkbook.Close True Next […]

Excel VBA在Foreach循环上运行macros而不切换表格

我在VBA上有一个模块,它基本上为包含列中文本的每个单元格运行一个foreach循环。 然后将每个单元格的内容复制到调用另一个函数(DailyGet)的另一个工作表中。 从函数生成的内容被复制回原来的工作表(我通过录制一个macros来生成这个代码)。 但是,由于在foreach循环中要处理的单元很多,因此每次运行时都会在macros块之间进行切换,因此非常耗时。 有什么办法可以加快这个过程吗? Sub DailyComposite() Dim SrchRng As Range, cel As Range Set SrchRng = Range("B2:B100") For Each cel In SrchRng If cel.Value <> "" Then Worksheets("Calculations").Range("B1").Value = cel.Value Sheets("Calculations").Select Call DailyGet Range("D3:Z3").Select Application.CutCopyMode = False Selection.copy Sheets("Summary").Select cel.Offset(0, 1).Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False End If Next cel Sheets("Calculations").Select Application.CutCopyMode […]

更改PercentRank函数输出的数字格式

当我使用PercentRank函数时,消息框以“0.00”数字格式吐出数字。 有什么方法可以改变吗? 最好是“00%” x = WorksheetFunction.PercentRank(relevant_Array, answer, 2) If x > 0.7 Then MsgBox "WARNING: Price is more than 20% above the average price: " & x If x < 0.3 Then MsgBox "WARNING: Price is more than 20% below the average price: " & x If x > 0.3 And x < 0.7 Then […]

编辑macros以适应所有工作表VBA

我目前有这个查询,查找“)”,并将其向下移动,直到它不是旁边的任何数据。 Sub SeekParen() Dim c As Range, wheree As Range Dim whatt As String Dim TotalCycle As Long, CounterCycle As Long whatt = ")" Set c = Range("A1:A10") Set wheree = c.Find(what:=whatt, after:=c(1)).Offset(0, 1) TotalCycle = Application.WorksheetFunction.CountIf(c, whatt) For CounterCycle = 1 To TotalCycle If wheree.Value <> "" Then Range("A2").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Set wheree […]

macros复制某些单元格并将其粘贴到一个新的工作表

我想创build一个能够复制某些单元格的macros,这取决于标题单元格“G1”中的内容。 然后,它应该打开一个新工作表并将这些单元格粘贴到这个新工作表中的相同单元格中。 Sub CopyCells() Select Case Range("G1").Value Case "PITOT" ActiveSheet.Range("D4,D5,D6,D7,D8,D9,D10,D11,I4,I5,I6,I7,I8").Select Selection.Copy Sheets.Add After:=ActiveSheet ActiveSheet.PasteSpecial Case "DP FLOW TRANSMITTER" ActiveSheet.Range("D4,D5,D6,D7,D8,D9,D10,D11,I4,I5,I6,I7,I8").Select Selection.Copy Sheets.Add After:=ActiveSheet Case Else 'do nothing End Select End Sub 我得到一个1004错误,这是由于我试图复制的范围的长度或我的代码的语法错误?

无法将C#int数组传递给VBA Excelmacros

我试图从我的C#应用​​程序调用我的Excel工作表(2003)的macros与C#互操作。 它使用整数参数之前工作正常。 但现在我需要传递一个整型数组,并且一直得到一个types不匹配的exception。 COMException: Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) C#代码如下所示: object m = Type.Missing; xlApp.Run("MergeColumnsKeepValues", lastGroupRowExcel, firstGroupRowExcel, mergeColumns, rightFormatMergeColumn, multiRowColumn, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m); 其中所有的参数都是Int32types的,除了是Int32[9] mergeColumns Int32[9] 我的Excel模板中的VBAmacros看起来像这样: Sub MergeColumnsKeepValues(lastGroupRow As Integer, […]

由于语法错误(logging时)和对象定义的错误(运行时),无法运行VBA

我得到了和丹尼斯一样的错误,但是他提供的答案只是说删除一些模块或者重命名它们。 但是,我只有一个模块,重命名它对我没有任何帮助。 我甚至试图制作一个全新的工作手册,并将其复制到一个新的开始,但它也没有做任何事情。 当我在录制macros之后运行macros时,它也给我一个“应用程序定义的或对象定义的”错误。 这个公式本身在macros之外是完全正确的,但是我确实需要它作为macros的一部分。 这里是Excellogging的,这是我的macros给我的错误: ActiveCell.FormulaR1C1 = _ "=IF(COUNTA(RC[-15]:RC[-2])=2,RC[-14],IF(COUNTA(RC[-15]:RC[-2])=4,CONCATENATE(RC[-14],"":"",RC[-12]),IF(COUNTA(RC[-15]:RC[-2])=6,CONCATENATE(RC[-14],"":"",RC[-12],"" – "",RC[-10]),IF(COUNTA(RC[-15]:RC[-2])=8,CONCATENATE(RC[-14],"":"",RC[-12],"":"",RC[-10],"" – "",RC[-8]),IF(COUNTA(RC[-15]:RC[-2])=10,CONCATENATE(RC[-14],"":"",RC[-12],"":"",RC[-10],"":"",RC[-8],"" – """ & _ ","""")))))" 它有一个Range("Q3").Select之前,激活该单元格。 而且,如果你看看它logging的是什么,而不是原来的公式,你可以看到它离开了K3)或者RC[-6]), 。 我试图添加它,但它并没有帮助。 原始配方: =IF(COUNTA(B3:O3)=2,C3,IF(COUNTA(B3:O3)=4,CONCATENATE(C3,":",E3),IF(COUNTA(B3:O3)=6,CONCATENATE(C3,":",E3," – ",G3),IF(COUNTA(B3:O3)=8,CONCATENATE(C3,":",E3,":",G3," – ",I3),IF(COUNTA(B3:O3)=10,CONCATENATE(C3,":",E3,":",G3,":",I3," – ",K3),""))))) 我也尝试了没有concatenate的公式,但它也没有帮助。 如下: ActiveCell.FormulaR1C1 = _ "=IF(COUNTA(RC[-15]:RC[-2])=2,RC[-14],IF(COUNTA(RC[-15]:RC[-2])=4,RC[-14]&"":""&RC[-12],IF(COUNTA(RC[-15]:RC[-2])=6,RC[-14]&"":""&RC[-12]&"" – ""&RC[-10],IF(COUNTA(RC[-15]:RC[-2])=8,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"" – ""&RC[-8]),IF(COUNTA(RC[-15]:RC[-2])=10,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"":""&RC[-8]&"" – ""&RC[-6],"""")))))" 编辑:这里是直​​接在上面的代码,和P3公式工作正常: Range("P3").Select ActiveCell.FormulaR1C1 = _ "=INDEX(RC[-14]:RC[-1],1,IF(COUNT(RC[-14]:RC[-1])=1,COUNT(RC[-14]:RC[-1]),COUNT(RC[-14]:RC[-1])*2-1))" Range("P3").Select Range("P3").AutoFill Destination:=Range("P3:P" & LastRow) Range("Q3").Select […]

更改macros上的合并源

我试图做一个macros,一切都很好,但我很难巩固使用macros的工作表。 它的工作,但问题是与代码,因为我合并一张表在另一个工作表,但在同一个工作簿(文件)。 但在macros上,它使用我的电脑上的文件地址,所以如果我改变文件名或地方,它不会工作。 请我真的尝试过。 所以,我需要在表格“Analise de Estoque”上合并表格“Controle Estoque Fixo”,两者都在同一个文件中,所以我需要删除文件源。 ActiveSheet.Select ActiveSheet.Name = "Analise de Estoque" Range("A1").Select Selection.Consolidate Sources:= _ "'C:\Users\rapha\Desktop\Cerealista\25062016\[Controle de Estoque v2.xlsm]Controle Estoque Fixo'!C1:C4", Function:=xlSum, _ TopRow:=True, LeftColumn:=True, CreateLinks:=False

代码在ThisWorkbook中工作,但不在Personal.xlsb中

我的笔记本电脑上的两个Shift键都卡住了很多,我通常在Excel中使用ctrl + page进行导航时,偶然在Excel中编辑组表单。 一个朋友给了我一个代码,我可以粘贴在VBA的ThisWorkbook,但是,我有很多的Excel文件。 他给出的代码(下面)将撤消我的组编辑,并将取消select除了其他工作表之外的所有工作表。 我想知道是否有一种方法可以在Personal.xlsb上工作,这样我就不必将这些代码粘贴到我的所有文件中。 (我想感谢先进的,我的互联网连接是相当薄弱的,所以我可能无法立即回应,但感谢您的帮助!) Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range) If ActiveWindow.SelectedSheets.Count > 1 Then Application.EnableEvents = False Dim x As Integer x = MsgBox("This will undo previous action taken. Do you want to continue?", vbYesNo, "Confirmation") If x = vbYes Then Application.Undo Else End If ActiveSheet.Select Application.EnableEvents […]