Tag: vba

vba:我如何以编程方式打开工作簿为只读?

这是我如何打开一个Excel文件在VB中: Workbooks.Open(file-path) 有没有一种方法来指定它应该打开为只读? 我打开的文件有一个密码,我总是得到它只能打开为只读的对话框。

VBA填写公式直到最后一列

所以我正在开发一个项目,并且试图让我的VBA代码将单元格M3中的公式一直拖到数据集的末尾。 我使用列L作为我的基础来确定数据的最后一个单元格是什么。 我的公式是两个单元格之间的文本逗号串联。 所以在Excel中,我的公式是= G3&“,”&L3 我希望excel可以画出这个公式,所以在M4单元格中它将是= G4&“,”&L4单元格M5将= G5&“,”&L5等等。 我的代码如下所示: Range("$M$3").Formula = Range("G3") & (",") & Range("L3") Dim Lastrow As Long Application.ScreenUpdating = False Lastrow = Range("L" & Rows.Count).End(xlUp).Row Range("M4").FormulaR1C1 = Range("G4") & (",") & Range("L4") Range("M4").AutoFill Destination:=Range("M4:M" & Lastrow) ActiveSheet.AutoFilterMode = False Application.ScreenUpdating = True 我的输出只是将单元格M3中的文本值一直下拉到数据集的末尾。 我search了几个小时试图寻找修复,但似乎无法find一个正在努力完成我要去的东西。

自动刷新Excel ODC连接和枢纽而无需打开文件PowerShell

我有几个20 MB以上的Excel文件,他们需要在开始营业之前(周一上午8点)每周更新一次。 这些文件包含一个数据表,数据通过外部连接(ODC文件),从SQL Server视图。 它们也有一个数据透视表,在数据表刷新后也需要刷新。 我试图find一个解决scheme(Windows PowerShell)来自动刷新数据和数据透视表,而不需要触摸文件。 “打开时刷新”和其他Excel选项不可行,因为刷新所有连接需要长达20分钟的时间。 我也不想刷新所有图纸,因为文件具有图表的自定义颜色,“刷新”将其重置为Excel默认值,这是不可能发生的。 我试过这个,但似乎没有与ODC连接工作? 至less,它没有做任何事情。 Windows PowerShell : $ExcelApp = new-object -ComObject Excel.Application $ExcelApp.Visible = $false $ExcelApp.DisplayAlerts = $false $Workbook = $ExcelApp.Workbooks.Open("c:\test\ref_test.xlsx", 3, $false, 5, $null, $null, $true) Start-Sleep -s 30 $Workbook.RefreshAll() $Workbook|Get-Member *Save* $Workbook.Save() $ExcelApp.Quit() 有任何想法吗? Office版本:2010,在Windows 7上

使用Excel将信息提交给网站表单并parsing结果

下午好, 我试图设置一个自动化一个内部网站的报告的手段。 我在大学教书,需要通过大学提供的界面从教师可访问的数据库中提取一些数据。 所以,我试图访问我有权查看的资料,需要login才能看到,但不想重复这些步骤数百次。 我的想法是: 1)使用IE凭证login学院提供的界面(所以系统知道我是授权的)。 2)提供优秀的学生身份证号码列表,我试图跟踪 3)使用VBA遍历每个ID,执行以下步骤: 从Excel列表中inputID号码到适当的表格文本框中 点击“提交”button 点击结果页面上的辅助“提交”button 复制出现的HTML文本页面,并parsing出我需要的信息 移到下一个数字并重复 我已经尝试了一些我见过的其他选项(如VBAinput数据在线和提交表单 ),但是在语法上出现错误。 我试图引用的网站上的HTML编码的相关部分是: <FORM ACTION="action" METHOD="POST" NAME="idinputform"> Enter Number Here: <INPUT TYPE="number" NAME="ID_NUM" SIZE="9" MAXLENGTH="9"> <INPUT TYPE="hidden" NAME="refresh_proc" VALUE="menu_1"> <INPUT TYPE="submit" VALUE="Submit"> <INPUT TYPE="reset" VALUE="Reset"> </FORM> 我在Excel中得到的是: Sub QueryInfo() Application.ScreenUpdating = False Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate "website address" […]

相同的date格式在几个本地化

目前面临的问题困扰了我很多。 我希望有人能帮助我。 我为Office 2007(32位)和Office 2010(64位)使用的大公司工作。 通过整个公司编写macros来兼容是我的难题(我之前从未在VBA中编程 – 实际上这个论坛对我有很大帮助)。 我的任务是在共享的Excel工作表中维护一个大表。 有几个macros和几个用户表单。 现在我将简要说明问题:工作表包含两个date格式的列(开始date和结束date)。 这两个值都被导入到列表forms的用户表单的文本框(命令buttonMsCal – 导出到类 – 填充这些文本框与date)。 我只需要在date格式为mm / dd / yyyy在这两列以执行过滤和其他操作。 当此值由使用与英语不同的本地化的工作人员更新时,美国date被input为dd.mm.yyyy。 这是基于date不可能的适当的过滤。 我试图改变格式: UserForm1.TextBox10.Value = Format(Calendar1.Value, "mm/dd/yyyy") 但这段代码不知何故行事不端。 在一些机器上它工作,其中一些机器不工作。 那是什么让我头痛。 我现在该怎么办? 有没有办法强制Excel中使用工作表中相同的date格式,并忽略Windows中的本地化设置? 员工不希望将本地化改为英文版美国,因为他们要么用于他们的格式,要么用于其他应用程序。 只有在此表打开时,是否有办法暂时更改本地化? 任何build议将被认为是。 先谢了彼得

在Excel中使用Javascript

我目前正在创build一个运行Monte Carlotypes模拟的Excel工作簿。 模拟器代码目前使用JavaScript,而且由于团队对这种语言的经验不足,所以完全移植到VBA似乎并不重要。 所以,我已经能够将JavaScript组件合并到一个WSC文件中,效果很好。 (下面的简单例子) Sub Simulate() Set ATPSim = GetObject("script:http://www.example.com/ATPSim.wsc") 'Set ATPSim = GetObject("script:C:\ATPSim.wsc") Dim ParamOne As Integer ParamOne = Range("B2").Value Dim ParamTwo As Double ParamTwo = Range("B3").Value Dim ParamThree As Double ParamThree = Range("B4").Value Range("B1").Value = ATPSim.simulate(ParamOne, ParamTwo, ParamThree) End Sub 不幸的是,这需要我主持javascript代码或依靠不熟练的用户来更新绝对path。 有没有一个独立的解决scheme? 我宁愿把所有的东西放在一个.xlsm文件里,这个文件可以通过电子邮件发送给用户。

在PowerPoint演示文稿中旋转3D图表

我在Excel中创build了一个可以旋转3D图表的macros。 我将图表复制到PowerPoint中,设置代码以在幻灯片显示时在PowerPoint中运行。 代码运行,但我不能得到它实际上改变屏幕上显示的内容。 幻灯片处于编辑模式时,graphics旋转。 任何想法如何让代码不只是运行(我可以看到debugging数字显示),但更新屏幕时,在演示模式? 我的代码是: Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Sub SpinTheChart() RotateX = ActivePresentation.Slides(2).Shapes(2).Chart.ChartArea.Format _ .ThreeD.RotationX Do While ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 2 RotateX = RotateX + 7 If RotateX > 360 Then RotateX = RotateX – 360 ActivePresentation.Slides(2).Shapes(2).Chart.ChartArea.Format _ .ThreeD.RotationX = RotateX DoEvents Sleep 125 Debug.Print RotateX Loop […]

VBA使用模式文件提取数据

我有下面的代码 Option Explicit Sub MadMule2() Dim IE As InternetExplorer Dim el Dim els Dim colDocLinks As New Collection Dim Ticker As String Dim lnk Dim intCounter as Integer Set IE = New InternetExplorer IE.Visible = False Ticker = Worksheets("Sheet1").Range("A1").Value LoadPage IE, "https://www.sec.gov/cgi-bin/browse-edgar?" & _ "action=getcompany&CIK=" & Ticker & "&type=10-Q" & _ "&dateb=&owner=exclude&count=20" Set els = […]

Excel VBA语言困难

我有这个代码,我的问题是,它会在英文版的Excel中工作吗? 我的意思是当地的公式会在英文版的excel上运行? (ORAZ的意思是和我的语言)。 当我把ORAZ它只适用于我的电脑,但在英文电脑它不,当我把它并没有给错误,但它不工作,任何想法如何帮助我? With Range("$H$6:$FH$50").FormatConditions _ .Add(xlExpression, xlFormula, "=ORAZ(H$7<=$G$7,(H$7+7)>$G$7)") With .Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.799981688894314 End With End With

更改SmartArtNodes的宽度或高度

是否有可能改变SmartArtNode的宽度或高度? 以下代码完全不起作用: ' mySmartArt is a SmartArt Object mySmartArt.AllNodes.Item(1).Shapes.Width = 4 奇怪的是,如果你改变一个形状的宽度,它就可以工作。 所以我不知道SmartArtNodes的Shape对象为什么不能resize。 我所知道的唯一方法是使用更大或更小的方法,但是使用这种方法不可能只改变形状的宽度/高度。 如果我使用上面的代码,我总是会得到一个RunTime错误“对象不支持这个动作(错误445)”,这是奇怪的,因为通过Excel的GUI我可以改变单个节点的宽度和高度SmartArt没有问题。 所以,为什么不能通过VBA来改变它是没有任何意义的。 有人有一个想法我怎么能解决这个问题?