Tag: excel vba

如何避免重置从userform设置的全局variables在另一个模块中使用?

我有一个在Excel中的用户窗体,有很多选项可以select和input值。 在用户窗体的代码中,我有几个声明的公共variables存储在用户窗体中input的信息。 当用户input用户表单中的所有内容时,他们点击“处理”button,并执行表单的主要function(将来自多个不同Excel文件的数据编译到该表单中)。 所有的数据编译后,我有第一个工作表上的另一个命令button用于运行编译的数据的汇总报告,它放在同一工作簿中的另一个工作表中。 此摘要macros的代码在模块1中定义,而不是在用户窗体的代码中定义,因为它连接到不同的命令button。 看来,我所有的公共变​​量是在用户窗体的代码中设置的,当我运行这个汇总macros,所以没有任何工作正常。 我必须以某种方式将此模块链接到用户窗体才能访问这些公共variables? 或者我必须把摘要macros的代码放在用户表单的代码中? 如果是这样的话,我如何从RunSummary_Click()命令button代码的代码中调用用户窗体代码中的Sub?

错误91:对象variables或未设置块variables

我有以下代码在Excel 2007中正常工作。 但是,它在Excel 2010上给出以下错误: 错误91:对象variables或未设置块variables。 任何想法如何解决? 我检查了其他职位没有运气。 更新:请注意,如果包含vba代码的工作簿是activeworkbook,代码工作正常。 但是我正在做的是打开另一个工作簿,然后按F3(运行此代码)。 那是当它失败的时候。 所以基本上iif工作簿与代码是积极的,它的工作原理,如果它是另一个工作簿是积极的,它会给出错误。 Sub Process_current_Sheet() Dim WS_Count As Integer Dim i As Integer Dim sheet_name As String WS_Count = ActiveWorkbook.Worksheets.Count nameofworkbook = ActiveWorkbook.Name ' Begin the loop. For i = 1 To WS_Count If InStr(ActiveWorkbook.Worksheets(i).Name, "xxx") > 0 Then sheet_name1 = activeWorkbook.Worksheets(i).Name End If Next i End […]

从string范围中select多个范围

我正在尝试同时select多个范围。 IE浏览器。 B2:C2,B12:C12,B14:C14。 更新的代码 Sub MarkForDMSLookup() Dim MarkingString As String Dim MarkingRange As String j = 0 For i = 3 To 20 'LastRow() If Cells(i, 5) = "Yes" Then j = j + 1 MarkingRange = "B" & i & ":C" & i 'MsgBox MarkingRange If j = 1 Then MarkingString = MarkingRange If […]

Excel – VBA – 在工作表中search数组值

我有一个VBAmacros,其中的一部分循环通过定义的string数组,并在工作表的列A中find它们。 如果数组的所有string都存在于A列中,那么这样做的效果很好,但如果string不存在,则会下降。 我一直在努力做一个简单的if语句来帮助我。 如果未find数组值,请移动下一步 For iArow = 0 To UBound(MyArray) – 1 iRow = Range("A:A").Find(MyArray(iArow), LookIn:=xlValues, lookat:=xlWhole).Row Range("D" & iRow).ClearContents Range("I" & iRow).ClearContents Rows(iRow + 1).Insert Rows(iRow).Insert Next iArow 有什么build议么?

Excel VBA如何查找过滤工作表的ActiveCell计数

我有一个可过滤的联系人数据库和用户窗体。 我想要的是在用户窗体上的2个计数器。 lblSelection应该给出数据集的总量。 而lblCount应该在整个数据集内给出所选单元格的位置。 就像“你在第45集中的300” 现在,当数据库被过滤时,它应该读取例如“你在第67组中”,只使用可见单元格并计算在该范围内所选单元格的位置。 这是我迄今使用的简单代码: Public Sub CountReset() 'Display Count If ActiveSheet.FilterMode = False Then Me.lblCount = activecell.Row – 1 Me.lblSelection = activecell.Offset(-1, 0).End(xlDown).Row – 1 Else Me.lblCount = ???? Me.lblSelection = Base.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count – 1 End If End Sub 感谢您的帮助!

连接string连接到远程Oracle 11g

我需要从VBA连接到远程Oracle服务器。 我不想安装任何额外的驱动程序或软件连接,因为我需要将Excel分发给团队。 我尝试了几个连接string,如SQL_HANDLE_ENV failed 。 或者Oracle client and networking components not found. 或者在使用OraOLEDB.Oracle我没有findProvider。 连接string到目前为止: "Driver={Microsoft ODBC for Oracle}; CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=servicename))); uid=username; pwd=Password;" "PROVIDER=MSDAORA.Oracle;DATA SOURCE=hostname;USER ID=username;PASSWORD=Password" "PROVIDER=MSDAORA;DATA SOURCE=hostname;USER ID=username;PASSWORD=Password" "Driver={Oracle in OraClient11g_home1};Dbq=servicename;Uid=username;Pwd=Password;" "Provider=OraOLEDB.Oracle;Data Source=hostname;User Id=username;Password=Password;" 有一些预先定义的驱动程序在Windows中我想。 但是,它不适用于甲骨文? 我使用Windows 8的任何帮助极大赞赏.. 我做了更多的研究,并且遇到了ODP.net。 所以我认为的结论是使用Oracle即时客户端或ODP.net。 但我不知道如果任何.NET应用程序如ODP.net将工作,没有.NET框架。 请让我知道是否有人遇到这个。

从Windows 7升级到Windows 10后出现VBScript问题

所以我有一个在VBA中与VBA一起工作的VBScript,并且每天都执行模型的自动更新(绑定到Task Scheduler)。 除了将名称中的当前date保存为excel文件外,还可以保存pdf格式的硬拷贝(也包含相关date)。 切换到Win 10后,脚本每运行一次,窗口就会popup并询问 – 您想如何打开一个文件? Adobe,记事本等pdf默认由Adobe(set)打开。 那么我怎样才能摆脱那个popup窗口? 它违背了自动化过程的整个目的,也阻止了它的正常工作,因为在popup之后,pdf不被保存。 另外,如果我通过cmd通过cscript运行脚本,它一切正常,但如果通过任务调度(也与cscript)比问题仍然存在。 任何帮助?

vba中closures并重新打开excel后,点击button不起作用

我是MS Excel中的VBA新手,我需要帮助。 我一直在网上search,但我还没有find任何解决我的问题。 我在我的excel中添加了一个button,并尝试点击button后popup一条消息,它完美的工作。 但是,当我closuresExcel应用程序时,单击button时警报消息不起作用。 这是我的代码。 Private Sub CommandButton1_Click() msgbox ("this is test") End Sub 我做什么?

Excel编程VBA

我必须从EXCEL的给定数据中显示YES或NO。 我试图写程序。 但我找不到解决scheme。 即使输出为NO,也只显示YES。 请帮助我这个程序。 我要检查整列C的数据(数据是从列的2到1439)。 如果数据大于等于0.003,则显示否,否则显示是。 码: ' Declare array Dim arrMarks(0 To 1437) As Double Sub ArrayLoops() ' Fill the array with numbers Dim i As Integer For i = LBound(arrMarks) To UBound(arrMarks) arrMarks(i) = Range("C2:C1439").Select Next i ' Using If statement For i = LBound(arrMarks) To UBound(arrMarks) If arrMarks(i) >= 0.003 Then […]

重复的单元格跳过10行

我有两张工作表的Excel电子表格,工作Sheet 1包含一些文本和公式我希望复制下来写我的项目的2,000奇数行的C#代码。 非常重复,所以我想我可以用Excel来为我写。 Sheet 2包含我的数据库提取,我希望用来填充该值。 我的Excel代码段看起来像这样,分布在10行5列: new AccountingPeriod() { MonthCovered="=Sheet2!B2", StartDate=DateTime.Parse("Sheet2!C2"), EndDate=DateTime.Parse("Sheet2!D2"), AccountingPeriodDescription="Sheet2!E2", Active='=Sheet2!F2', April='=Sheet2!G2, TaxYear="Sheet2!H2" }, 当我突出显示这10行并使用Excel复制工具时,我希望单元格引用(例如,在我的电子表格Sheet1!D3 = Sheet2!B2 ,我希望Sheet1!D13 = Sheet2!B3 NOT Sheet2!B13 )增加1而不是像我在电子表格中所做的那样。 我们已经尝试了一种替代解决scheme,即写入一个macros以在Sheet2为每个填充行插入10个空白行,以便重复的引用在Sheet1是正确的,但是我们目前正在使这个工作正常地失败。