Tag: vba

VBA中的API定时器 – 如何使安全

我在各种地方读到,API定时器在VBA中有风险,如果在定时器运行时编辑一个单元格,将导致Excel崩溃。 但是由于Jordan Goldmeier的http://optionexplicitvba.wordpress.com这个代码似乎没有这个问题。 它使用计时器淡出popup窗口,在淡入淡出时,我可以单击并在单元格和公式栏中input文本,而不会出现任何问题。 什么时候API计时器安全,什么时候不是? 有一些具体的原则可以帮助我理解吗? 什么是崩溃的机制:究竟发生了什么事情,使Excel崩溃? Option Explicit Public Declare Function SetTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long) As Long Public Declare Function KillTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long) […]

通过Excel VBA运行Shell对象/命令时出错

我正在通过VB代码运行一个C ++程序,而且我无法让我的代码在共享驱动器上运行,而在本地计算机上运行。 我的程序生成一组假设,然后通过C ++模型运行这些假设,然后拾取模型输出并准备在VB工作簿中查看。 下面的代码工作正常时,我的工作簿保存在我的C驱动器上的本地目录,但是当我上传到我公司的共享驱动器,我得到以下错误: “运行时错误'-2147024894(80070002)':对象'IWshShell3'的方法'运行'失败” 码: '——————————————————— ' SECTION III – RUN THE MODEL AS C++ EXECUTABLE '——————————————————— Dim ModelDirectoryPath As String Dim ModelExecutableName As String Dim ModelFullString As String ' First build the command string Application.StatusBar = "Running C++ Model…" ModelDirectoryPath = Range("ModelFilePath").value ModelExecutableName = Range("ModelFileName").value ModelFullString = ModelDirectoryPath & ModelExecutableName ModelFullString = […]

以编程方式获取工作表的最大允许列数和行数

在一个生病的Excel(我使用Office 10)VBAmacros, 我需要陷入的情况下,用户设法创build一个最大数量的行或列意外 。 我不记得那是怎么发生的,我也不在乎。 但是我们大多数人都看过Excel工作表,它们的活动工作表大小为16384单元格宽度和/或1048576单元格高度 – 即使表单上只有less数非空单元格。 我只是想在VBA代码中检测到这种情况。 一张表的Rows.Count和Columns.Count当然会返回数字,我可以检查它们是否分别等于16384或1048576 。 但是,这些限制是版本相关的。 所以我的问题是: 如何获得VBA中给定的Excel工作表中的行数和列数的最大限制,而无需编码与版本相关的if语句? 每个极限值可能都有一个常数,但我还没有find它。 注意我不查找Worksheet.UsedRange的大小。 我想确定UsedRange是否已经扩展到整个可用的“工作表空间”,这通常只是偶然发生的,但是 – 它发生了,我想检测这种情况。 我也没有寻找每个Excel版本的限制。 (这很容易googleable。)我不想硬编码这些值和版本号。

将sql查询结果导出为使用vba标题

我需要导出一个简单的SQL查询结果为Excel,我得到的结果,但头失踪,可以any1请帮助导出标题以及? 这是我迄今为止: Sub Conn2SQL() Dim cnn1 As New ADODB.Connection Dim mrs As New ADODB.Recordset Set cnn1 = New ADODB.Connection cnn1.ConnectionString = "driver={SQL Server};server=MyDBServer;uid=MyuserID;pwd=mypassword;database=MyDB" cnn1.ConnectionTimeout = 30 cnn1.Open SQry = "use MyDB select * from TableName" mrs.Open SQry, cnn1 Sheet2.Range("A2").CopyFromRecordset mrs mrs.Close cnn1.Close End Sub

忽略excel退出时的“你想保存”框

我有一个脚本,打开一个Excel文件并运行一个macros,然后退出该文件。 由于文件处于只读模式,并且脚本对文件进行了临时更改,因此当脚本调用myExcelWorker.Quit() excel时,询问是否要保存更改,并且必须单击“否”。 有什么办法可以退出程序并跳过这个框? ' Create a WshShell to get the current directory Dim WshShell Set WshShell = CreateObject("WScript.Shell") ' Create an Excel instance Dim myExcelWorker Set myExcelWorker = CreateObject("Excel.Application") myExcelWorker.Visible = True ' Tell Excel what the current working directory is ' (otherwise it can't find the files) Dim strSaveDefaultPath Dim strPath strSaveDefaultPath = […]

使用VBA添加注释到excel

给单元格添加评论真的很困难。 我打电话给下面的子 Sub ValidationError(row As Long, column As Integer, ErrorLine As String) Tabelle1.Cells(row, column).Interior.Color = vbYellow Tabelle1.Cells(row, column).AddComment ErrorLine End Sub 但是我总是得到一个1004错误,说“应用程序或对象错误”(这是翻译,原始信息:“Anwendungs-oder objektdefinierter Fehler”) 该子被称为使用 Call ValidationError(8, 9, "Text string") 我究竟做错了什么? 最好

如何以编程方式确定VBA中的Option Base的当前设置

如何以编程方式确定VBA中Option Base的当前设置? Option Base可以设置为0或1 ,这决定了数组索引是从0还是1开始(参见MSDN )。 但是,我看不出有什么简单的方法来找出当前的设置。 我希望可能有一个Option()函数,我可以传递一个参数,如: Debug.Print Option("Base") 它会告诉我,但似乎并不存在。

dynamic更改function区的button标签Excel

我正在使用以下一段XML代码为Excel加载项创build一个自定义function区。 <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="ComdinheiroTab" label="COMDINHEIRO"> <group id="ComdinheiroButtons" label="Comdinheiro"> <button id="Login" getLabel="getLabelLogin" image="Login" size="large" onAction="OnActionLogin"/> </group> </tab> </tabs> </ribbon> </customUI> 我正在使用下面的VBA代码来设置buttonlogin的标签: Sub getLabelLogin(control As IRibbonControl, ByRef returnedVal) if loggedIn = true then returnedVal = "Logged" else returnedVal = "Disconected" end if End Sub 加载function区时,标签的名称将根据variablesloggedIn的值成功更改。 但是,我希望我可以在执行我的程序时更改标签的值。 是否有可能使用VB代码调用getLabel事件? 无论如何刷新我的丝带,所以这个事件会再次被调用?

用分隔符分割string的最有效的方法,同时使用excel vba忽略所述分隔符的某些实例

我有一个非常冗余的旧代码,我创build时,我第一次发现,并决定学习vba(和男人我走了很长的路)。 我正在使用此代码来循环通过包含多个用逗号分隔的值的单元格。 但是,有些情况下,我不能简单地使用诸如Split(string,",")函数之类的东西,因为某些值在该值内有逗号(示例值: [blah blah,so blah blah] )。 在存在这些括号的情况下(它们围绕着每个值都有一个逗号),我devise了一个相当冗长的方法,这是我的老方法来正确地分割值,把它们倒入一个数组,然后继续我的其他任务。 但是,现在我已经决定重新审视这些代码并修正了这个问题的准确性。 这是一些背景。 示例可以在一个单元格中find的数据: 请注意:这是供应商发给我们的数据,我们无法控制他们input的内容或input内容。 这是一个简单的例子,以显示在某些情况下通常提供数据的要点 Available on 2 sides: Silkscreen,[full: color, covers entire face],Pad Print: One color,[heat transfer, may bleed] 价值观是: 可用于两面:丝网印刷 [全部:颜色,覆盖整个脸] 移印:一种颜色 [传热,可能stream血] 我在找什么: 我正在寻找一个更有效和更简单的方法来正确地分割值(同时保留有它们的值的括号)。 我相信我已经设法创build一个更有效率和紧凑的方法来处理不包含使用下面的代码括号的实例 新的代码(正在build设中):我不知道如何有效和准确地分割与括号的单元格的问题 Sub Test() Dim rngXid As Range, RegularColons As New Collection, UpchargeColons As New Collection, additionals As Range, […]

在VBA自动筛选器中使用string数组作为条件

我搜查了其他post,发现类似的问题,但没有什么可以帮助我具体。 我试图采取一个string数组,并将其用作过滤条件。 这很棘手,因为数组是由一个函数创build的,并且具有可变数量的元素和内容。 我需要自动filter,并检查列E的每一个元素。 我试过两种方法 1) With Sheet17 .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr) End With 结果:将筛选器应用于列E,但未能select任何选项 2) For i = 0 To counter – 1 With Sheet17 .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr(i)) End With Next 计数器是一个整数,表示数组中元素的数量结果:这个数组正确地循环遍历数组,但是只select了filter的最后一个选项 – 大概是因为每次循环它都会重新开始并取消选中所有其他选项最后只有最近的选项保持被选中。