假设我有10个工作表,4个名称非常相似: 汤姆 2.危险的人 三十 4.丹格兰 我希望我的代码能够find名称中包含危险文本string的所有工作表,并执行我的代码 我已经尝试了以下两个实例: Public Sub SubName() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets If ws.Name Like "danger" Then *Also tried this version: If ws.Name Like "danger" = True Then* Range("A1").Interior.ColorIndex = 37 End If Next ws End Sub 拿2 Sub WorksheetLoop() Dim ws As Worksheet For Each ws In […]
我有一个VBAmacrosExcel 2013中生成一个单独的Excel报告。 在这个创build的excel报告中,我想closuresGridLines。 我碰到的唯一代码就是这样的 ActiveWindow.DisplayGridlines = False 但是,这个excel是在后台生成的, Dim appObject As New Excel.Application appObject.Visible = False 这意味着这个报告不是ActiveWindow。 是否有不使用ActiveWindow对象closures网格线的替代方法?
我有一系列(复杂的)程序,它们通过一系列用户表单运行,以创build一个新的工作簿,根据用户input插入所需VB的几个模块,通过从一系列隐藏的模板中复制元素来格式化新的工作簿包含过程的工作簿,并提示用户在过程结束时将文档另存为.xlsm文件。 我已经实现了这一点。 为了达到这个目的,我编写的程序的一些变化是以模块化方式编写的,因为用户表单作为一个小型的可视化工具,用于用两种方式定制他们希望生成的工作簿:他们能够指定有多less工作表他们希望在工作簿中指定他们希望在工作簿中为每个工作表显示多less个数据表,并且根据他们希望创build的每个工作表的工作表和数据表的组合,调用一个过程来适应它。 该过程生成工作簿,并根据用户的需求在其中插入VB代码,然后调用一系列单独的模块化过程,为每个需要的工作表构build每个单独的数据表。 如果需要,我可以提供这些代码示例。 我的问题与我从用户窗口调用这些过程的方式有关。 目前我使用了一系列If语句(没有吸引力,但是我不确定在这种情况下是否有必要,因为每个语句都是基于一个唯一的数字组合,并且每个语句都调用一个单独的过程): 'Declare the number of worksheets the user needs Dim NumberOfTabsNeeded As String NumberOfTabsNeeded = UserForm1.ComboBox2.Value 'Number of data tables needed per worksheet Dim Tab1Amount As String Tab1Amount = UserForm1.Label71.Caption Dim Tab2Amount As String Tab2Amount = UserForm1.Label72.Caption 'One worksheet needed If NumberOfTabsNeeded = "1" And Tab1Amount = "1" Then […]
我有一个Excel文件需要处理checkbox。 checkbox的名称是用法语自动定义的(由于我的安装是法语的)。 例如“Caseàcocher 100”而不是“Checkbox 100”。 但是,当我们的兄弟姐妹公司使用这个Excel文件时,由于他们的安装是英文而崩溃。 有没有办法为英文和法文做下列工作? ActiveSheet.CheckBoxes("Case à cocher 488").Interior.Color = RGB(255, 255, 255) ActiveSheet.CheckBoxes("Case à cocher 383").Interior.Color = RGB(255, 255, 255) ActiveSheet.CheckBoxes("Case à cocher 467").Interior.Color = RGB(255, 255, 255) ActiveSheet.CheckBoxes("Case à cocher 461").Interior.Color = RGB(255, 255, 255) ActiveSheet.CheckBoxes("Case à cocher 460").Interior.Color = RGB(255, 255, 255) ActiveSheet.CheckBoxes("Case à cocher 459").Interior.Color = RGB(255, 255, 255) […]
我正在编写一些代码,将多个工作表(它们形成单个部件列表)合并为一个大型部件列表。 到目前为止,我有2个函数扫描每个工作表的最后一行和一列 Function LastRow(sh As Worksheet) On Error Resume Next LastRow = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row On Error GoTo 0 End Function 和 Function LastCol(sh As Worksheet) On Error Resume Next LastCol = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Column […]
我将如何去打开一个Excel 2007电子表格的ADO连接? 我这样做是为了将数据导入到Access 2007中。相当恼人的是,数据需要在导入之前进行过滤和预处理,因此为什么要打开一个ADO连接来读取它。
我想编写一个范围作为一个可选参数的VBA函数。 比如像这样的东西: Public Function testfunc(S As String, Optional R As Range) As String testfunc = S For Each cell In R testfunc = testfunc + cell Next cell End Function 我试过上面的函数,但是我得到了一个#VALUE! 错误。 我也尝试在If(R)Then … End If语句中包装For循环。 如何处理一个可选的范围,如果范围存在,那么它将通过For Each循环来迭代?
我制作了一个日历来跟踪Excel 2003中的任务和类似项目。我需要做的是通过VBA设置一个计时器。 像这样的东西: run_in_x_secs ( timetowait, function to exec) 有没有办法在Excel VBA中做到这一点,或者我应该尝试find一个警报,通过命令行运行并从VBA运行。 你会怎么做?
我正在使用工作簿path的GetObject来创build一个新的或抓住现有的Excel实例。 如果抓取现有的用户创build的实例,应用程序窗口是可见的; 如果问题的工作簿path已closures,则会打开并隐藏,但不会在屏幕上闪烁。 Application.ScreenUpdating没有帮助。 我不认为我可以使用Win32Api调用LockWindowUpdate,因为我不知道我得到或创build文件之前打开。 是否有一些其他的VBA友好的方式(即WinAPI)冻结屏幕足够长的时间来获取对象? 编辑 :只是为了澄清,因为第一个答案build议使用应用程序对象…这些是重现此行为的步骤。 1.打开Excel – 确保只运行一个实例 – 保存并closures默认工作簿。 Excel窗口现在可见但“空”2.打开Powerpoint或Word,插入一个模块,添加下面的代码 Public Sub Open_SomeWorkbook() Dim MyObj As Object Set MyObj = GetObject("C:\temp\MyFlickerbook.xlsx") 'uncomment the next line to see the workbook again' 'MyObj.Parent.Windows(MyObj.Name).Visible = True' 'here's how you work with the application object… after the fact' Debug.Print MyObj.Parent.Version End Sub 注意闪烁,因为Excel在现有实例中打开文件,然后隐藏它,因为它是自动化的 但是请注意,在闪烁完成之前,没有应用程序对象可以使用。 这就是为什么我正在寻找一些更大的API方法来“冻结”屏幕。
任何人都可以告诉我如何撤消对工作簿的所有更改? 我有文件excel1.xlsx,我已经使用vba excel.xlsxsorting和许多操作。 但是最后我想让excel1.xlsx与之前的一样。 如何使用vba撤消所有更改? activeworkbook.saved = True 我发现它保留了所有的内容在开始,但它不起作用。所以有任何命令,我可以得到我的原始文件执行操作之后。 嗯,是 wb1.Sheets(1).Activate ActiveWorkbook.Close savechanges:=False 它的工作,但我不希望我的工作簿被closures,它应该仍然打开。 我如何做到这一点? 提前致谢。