Tag: vba

Excel 2007和更高版本中的Range.Interior.Color不同

我发现在某些情况下,Range.Interior.Color会返回相同颜色的不同数字,具体取决于它是在Excel 2007还是Excel 2010或2013中运行。 这是预期的? 我很惊讶。 Range.Interior.Color是单元格的背景颜色(“填充颜色”)。 在“即时”窗格中,可以像这样读取它: ?ActiveCell.Interior.Color 并设置它像这样: ActiveCell.Interior.Color = 10921638 例子: 例1: (虽然它们的Range.Interior.Color是不同的,但它们是相同的颜色。) Excel 2007:10855845 Excel 2010/2013:10921638 例2: Excel 2007:14922893 Excel 2010/2013:14857357 例3: Excel 2007:14211288 Excel 2010/2013:14277081 有什么build议么? 现在,我使用条件compliling来为一个数字或其他数据设置常量,具体取决于VBA常量VBA7,该值返回True for Excel 2010或更高版本,False for Excel 2007及更低版本: #If VBA7 Then 'Excel 2010 or later: Const NO_SHADING_COLOR As Long = 16777215 Const MAIN_HEADER_COLOR As Long = […]

使用vba删除excel工作表上的空行,在另一个excel工作簿中

我有两本工作书 Book_A和Book_B。 我想从Book_B工作表1中删除Book_A工作表1中的空白行。 我已经使用VBA编写了一个代码来删除空行。 Sub RemoveEmptyRows() ' this macro will remove all rows that contain no data Dim i As Long Dim LastRow As Long LastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row Application.ScreenUpdating = False For i = LastRow To 1 Step -1 If WorksheetFunction.CountA(ActiveSheet.Rows(i)) = 0 Then ActiveSheet.Rows(i).EntireRow.Delete End If Next i Application.ScreenUpdating = True End Sub 此代码的作品,使我能够删除工作表的空白行。 […]

使用64位Excel连接到32位Oracle客户端

我正尝试使用VBA中的连接string将我的Excel连接到Oracle: dim cn As New ADODB.Connection cn.Open "Provider=OraOLEDB.Oracle;Data Source=source;User Id=userid;Password=pwd;" 我得到这个错误: Run-time error '3706': Provider cannot be found. It may not be properly installed. 相关参考文献: Microsoft ActiveX Data Objects 6.1 Library OraOLEDB 1.0 Type Library Excel是MS Office Professional Plus 2010 64位 Windows是7企业版,Service Pack 1,64位 Oracle客户端是11.2.0 32位(我认为) Oracle服务器是Oracle数据库11g企业版版本11.2.0.3.0 – 64位生产 现在…我已经search了networking,不知道问题是什么,但我最好的猜测是有一些与我使用的驱动程序的32位与64位冲突。 我试图了解在我公司的IT部门为我尝试安装东西之前,应该采取什么样的方式。 如果MS Office是Oracle客户端必须是64位? 或者我只需要64位Oracle数据访问组件? 我已经尝试了一堆不成功的连接string,包括使用MSDAORA而不是OraOLEDB.Oracle […]

Excel和RabbitMQ – 在Excel中处理RabbitMQ消息?

我想从Excel 2013订阅RabbitMQ消息队列。 最终的目标是允许在MQ消息中包含的数据在Excel中处理,并允许Excel通过RabbitMQ消息队列发送格式化的消息。 这可能吗? 消息队列中发送的消息由7个字段组成,每个字段由a分隔; 符号 – 但是消息作为一个string通过消息队列发送… 例如"text;number;number;number;text,text,timestamp" 我希望能够将上面的原始邮件拆分为Excel 2013中格式化的单元格。 可以这样做吗? 我有限的编码经验,我正在努力学习,所以请原谅我,如果这是一个“愚蠢”的问题。 任何指针将不胜感激,例如,这可以通过VBA代码或Excel加载项来完成? 提前致谢…

VBAdebugging器精度

我有一个single ,我相信C + +等价物是在Excel工作簿模块中的VBA float 。 无论如何,我最初分配的值(876.34497)在即时窗口中四舍五入为876.345,并且在VBA上设置断点时监视并hover工具提示。 但是,如果我将这个Single传递给C ++ DLL,C ++会将其报告为原始值876.34497。 那么,它实际上是作为原始值存储在内存中吗? 这是debugging器的一些限制吗? 不确定这里发生了什么。 难以testing我所传递的是我在C ++端得到的东西。 我试过了: ?CStr(test) 876.345 ?CDbl(test) 876.344970703125 ?CSng(test) 876.345 VBA不是非常简单,所以在某些层面上,它必须以876.34497的forms存储在内存中。 否则,我不认为CDbl会是正确的。

默认的Range属性会产生意外的结果

作为后续问题,我在这里发布的答案,我想知道为什么以下不会错误,这是VBA中的一个可能的错误? 采取以下数据: 如果我们使用下面的VBA代码,我们会收到一个错误,因为我们需要使用date的数字值来匹配: '//Produces error Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14"), 0) 所以这些陈述中的任何一个都可以工作: '// Cast to Long Debug.Print WorksheetFunction.Match(CLng(Range("C3").Value), Range("A1:A14"), 0) '// Access .Value2 property directly Debug.Print WorksheetFunction.Match(Range("C3").Value2, Range("A1:A14"), 0) 然而正如让 – 弗朗索瓦·科贝特 ( Jean-FrançoisCorbett)所指出的,如果我们不指定一个财产,它也可以工作: Debug.Print WorksheetFunction.Match(Range("C3"), Range("A1:A14"), 0) 所以如果.Value不起作用,这是Range对象的默认属性 – 为什么它在上面的例子中工作? 这可能是一个错误? 还是有一些评估正在发生,以抵消这一点?

按照VLOOKUP和VBA中的引用

情况: 我有许多工作表的Excel工作簿。 工作簿中的某些单元格通过MasterData引用另一个Excel文件(称为MasterData )。 一个工作表内的一些单元格(称为Worksheet A )引用另一个工作表的其他单元格(称为Worksheet B )。 Worksheet B的单元格引用MasterData 。 在第三个工作Worksheet C工作Worksheet C一些单元MasterData直接引用MasterData 。 我的任务是find依赖关系结构。 所以对于上面的例子,它应该给: Worksheet A -> Worksheet B -> MasterData Worksheet C -> MasterData 当然,对于更高级别的链接(例如, Worksheet D – > Worksheet E – > Worksheet F – > MasterData 到目前为止我所做的是: 我遍历所有工作表,然后遍历工作表的单元格。 在迭代内我testing如果单元格有一个公式,如果公式包含MasterData我知道这个工作表引用MasterData 。 所以我已经有了第一层。 问题: 现在我有像这样的单元格:(假设我在单元格B2中的Worksheet1中) =Worksheet2!A1 Worksheet2的单元格A1如下所示: ='X:\[MasterData.xslm]FZE'!A8 所以当我处理单元格Worksheet1!B2我想遵循对Worksheet2!A1的引用,然后看到这个引用了MasterData 。 […]

Excel 2013在两个不同组的任意点之间添加一个连接器

我正在使用Excel 2013(以编程方式)在作为分组形状的一部分的矩形的右下angular与分组的一系列线段的端点之间添加直线连接器。 就目前而言,我甚至无法在包含这些形状的Excel工作表上手动执行此操作。 问题包括: 只有所需长方形的中点将接受连接器。 分组的一系列线段甚至没有显示直线连接器terminal的“连接点”。 这里是我想要做的事情的图表: [我没有10个“口碑点”,所以我似乎无法发布我想要做的事情。 不是一个特别有用的function! 我如何在这个游戏中获得声望点?] 我已经能够创build和命名这两个组,并认为与他们合作添加一个连接器是件小事,但事实并非如此。 这是我一直在使用的代码: Sub create_new_profile() Dim firstRect As Shape Dim firstLine As Shape Set myDocument = Worksheets(1) Set s = myDocument.Shapes ' Set firstRect = s.Range("shpNewGarage") ' Set firstLine = s.Range("shpProfile") Dim Shp As Shape ' For Each Shp In myDocument.Shapes For Each Shp In s […]

在Excel中通过VBA发布文档

我试图通过模仿docusign文档中列出的六种编程语言的语法来在VBA中发布文档,但没有运气。 我可以成功GETlogin信息,但是使用这些信息来发布文档certificate是致命的:这是我收到的错误: INVALID_MULTI_PART_REQUESTparsing多部分请求时发现错误。 在请求中找不到边界终结符“–BOUNDARY–”。 任何援助将不胜感激。 这是我到目前为止的代码: Private Sub APILoginCallTest() ' Step 1 – get initial login information ' defined request and result variables Set httpRequest = New XMLHTTP60 Set httpResult = New DOMDocument60 ' clear out login information response fields With ThisWorkbook.Sheets("Dashboard") .Range("rngResponseLoginStatus").Value = vbNullString .Range("rngResponseLoginFull").Value = vbNullString End With 'open login information url httpRequest.Open […]

使用Excel VBA列出打印机时遇到问题

所以这是原来的问题: 我有一个运行macros的button的Excel文件。 该macros需要将工作表打印到2台独立的networking打印机。 该工作簿将在networking上的多个不同的计算机上运行。 我目前的代码如下所示: Application.ActivePrinter = "Printer-A on Ne02:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False Application.ActivePrinter = "Printer-B on Ne05:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False 问题在于on Ne02:和on Ne05: 这些值因计算机而异。 例如: 打印机-A在Ne03上: Ne02上的打印机B: 打印机-A Ne07: 等等 我可以通过显示“select打印机”对话框并强制用户手动select打印机来绕过这个问题,但我更希望这是自动的。 我已经尝试使用Windows脚本宿主对象模型列出所有打印机,如下所示: Function FindPrinter(name As String) Dim nwo As New WshNetwork Dim i As Integer Dim fullName As String For i = […]