我目前正在构建一个Excel 2003应用程序,需要一个非常复杂的形式,我担心控件数量的限制.它目前有154个控件(计算使用Me.Controls.Count- 这应该是准确的,对吗?)但可能只有大约三分之一完成.工作流程真的适合单一形式,但我想如果我真的需要,我可以拆分它.
我在Google搜索中看到VB6(通常包括VBA)在表单中有254个控件的硬限制.但是,我创建了一个超过1200个控件的虚拟表单,它仍然可以加载并且似乎工作正常.
尝试添加特定的控件组合时,我确实得到了一些"内存不足"错误,比如800个按钮和150个标签,这让我认为任何限制都可能受到每种控件的内存要求的影响.
有没有人有任何可能有助于确保我或者更重要的是,具有不同环境的其他用户不会遇到如此大型表单的任何内存问题的信息?
在Excel中,我们有一个VLOOKUP函数,它在表中的列中查找值,然后在找到某些内容时返回该表中给定列的值.如果没有,则会产生错误.
是否有一个函数只返回true或false,具体取决于是否在列中找到了值?
以下代码演示了问题标题中所述的问题。
将其复制并粘贴到新的 Microsoft Excel 2003 工作簿中。
Sub mytest()
mypath = Application.GetSaveAsFilename()
Workbooks.OpenText Filename:=mypath, DataType:=xlDelimited, _
TextQualifier:=xlTextQualifierDoubleQuote, _
semicolon:=True, _
fieldinfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2)), _
Local:=True
End Sub
Run Code Online (Sandbox Code Playgroud)
执行代码。它将要求输入文件,您应该在其中使用此分号分隔的test.csv。它创建一个新工作簿并将所有数据从 test.csv 导入到 sheet1。
下图显示了结果

但它应该显示这样的结果

fieldinfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2))
声明 Excel 应将所有导入的数据视为文本。不幸的是它没有。
有人可以告诉我如何以正确的方式使用 opentext 和 fieldinfo 吗?
我已经知道 QueryTables.Add(Connection[...]
的解决方法。但这不是我的情况的解决方案。
这段代码是我工作的一小部分.我已将问题缩小到以下部分.我有这个UDF SampleFunction,我需要传递一个数组,{3; 4}作为唯一的参数.
Function SampleFunction(InputVar As Variant) As Integer
SampleFunction = InputVar(LBound(InputVar))
End Function
Run Code Online (Sandbox Code Playgroud)
我用两种不同的方式称之为UDF.首先,通过VBA
Sub testSF()
MsgBox SampleFunction(Array(3, 4))
End Sub
Run Code Online (Sandbox Code Playgroud)
其次,通过我的excel工作表作为
={SampleFunction(ROW(3:4))} - >即作为数组函数.
UDF适用于案例1,即通过VBA调用#VALUE,当我通过excel工作表调用它时,它为案例2 提供了错误.
我在案例2中使用F8逐步执行该函数.Lbound(InputVar)计算结果为1(这与从案例1中的子句调用不同,它的计算结果为0),但InputVar(Lbound(InputVar))在案例2中显示"下标超出范围"错误.
我想知道的是如何从工作表中调用SampleFunction函数,即Case 2,使其具有与上面显示的Case 1相同的行为.作为奖励,如果有人可以解释为什么Lbound(InputVar)在上述情况下进行不同的评估会很好.
一些其他细节:
我正在构建一个UDF来执行一些正则表达式操作.InputVar上面的论点将是一个数组{x; y; z; ...},指定xth,yth,zth ......出现.数据类型InputVar保留为Variant,因为我希望能够将任意数字(作为一个长度数组),数组或范围(接收并转换为数组)传递给函数.
提前致谢!!
我正在构建一个项目,我知道Excel 2003支持通过"数据 - >导入外部数据 - >新Web查询"从外部网页导入数据.
这可以通过此处列出的几个步骤完成:http://www.internet4classrooms.com/excel_import.htm
但是,我从中导入数据的站点是内部网站(Intranet),每次访问时都需要登录.
网站不记得密码,每次点击"导入"按钮,由于登录,它都没有做任何事情.
在Excel 2003中从外部网站导入数据时,如何提示输入用户名+密码并登录网站?
我曾经看到一些SO用户在尝试使用某些变体时遇到了问题Cells.Count; 在某些情况下,VBA代码会引发溢出错误.
供参考,请参阅对此答案的评论:
我认为这会起作用,但是我得到一个"溢出"错误并且它指向代码"If Master.Cells.SpecialCells(xlCellTypeVisible).Count> 0然后"---它似乎没有特别针对任何东西进行过滤 - user1556069
而这个答案:
这是onyl工作(和Cells.Count没有工作)因为后者使用整数,16位,最大值65,536并且整个电子表格返回更大的数字? - fast_code
我假设在幕后的某个地方,VBA试图将单元计数强制转换为小整数(16位)或长整数(32位).Excel 2007工作表的单元格数将溢出这两种数据类型.不幸的是我现在无法隔离它,因为我没有Excel 2007的副本,并且实际上无法重现您的错误. - mwolfe02
试图理解这一点,我试图重现自己,并尝试指定Cells.Count为整数时溢出.这是有道理的,因为该值对于Integer数据类型而言太大.
在Excel 2003和2010中使用下面的代码,在尝试分配为Long或Variant时,我得到了一个数值结果.
Option Explicit
Sub testInteger()
Dim i As Integer
i = Cells.Count 'Overflow
Debug.Print i 'Doesn't get this far...
End Sub
Sub testLong()
Dim l As Long
l = Cells.Count
Debug.Print l 'Prints 16777216 in both versions
End Sub
Sub testVariant()
Dim v As Variant
v = Cells.Count
Debug.Print v 'Prints 16777216 in …Run Code Online (Sandbox Code Playgroud) 我正在做一个简单的c#应用程序,它是编辑现有的excel 2003模板(xlt)并保存到新的*.xls文件.它像是:
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open("\\my_template.xlt");
Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[0];
Run Code Online (Sandbox Code Playgroud)
然后我修改一些在文件中的各种公式中使用的单元格,并将模板保存到一个新文件:
workbook.SaveAs("newfile.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
workbook.Close(true, misValue, misValue);
app.Quit();
worksheet = null;
workbook = null;
app = null;
Run Code Online (Sandbox Code Playgroud)
所以问题是当新文件被成功保存时,我打开它,看到使用我编辑过的单元格的公式结果就像"#NAME"一样.当我重新打开文件时 - 一切都变好了.为什么会这样?
也许我正在以不正确的方式保存文件,这就是我在第一次打开时看到错误的原因?这个问题仅适用于2003年的办公室......正如我承认的那样.
我正在使用vba for Excel,以便通过以下方式将数据保存到数组中:
Dim allPosts As Variant
allPosts = Range("A2:J5000")
Run Code Online (Sandbox Code Playgroud)
之后,我正在更改allPosts数组中的数据,然后我想通过以下方式将其粘贴回来:
Range("A2:J5000").Value = allPosts
Run Code Online (Sandbox Code Playgroud)
我收到错误:
运行时错误1004应用程序定义或对象定义
并且复制在特定单元格停止,当我将此单元格中的字符串更改为更短时,问题就解决了.
谢谢
我正在Excel2003中编写一个宏来查找工作簿中包含公式的所有单元格,并在不同工作表的几列中输出它们的地址和公式.
我知道我可以使用单个细胞显示公式
Public Function ShowFormula(cell As Range) As String
ShowFormula = cell.Formula
End Function
Run Code Online (Sandbox Code Playgroud)
哪个工作得很好,但由于我不想手工找到所有的单元格,我写了下面的宏来找到它们对我来说
Sub Macro2()
Dim i As Integer
Dim targetCells As Range
Dim cell As Range
Dim referenceRange As Range
Dim thisSheet As Worksheet
Set referenceRange = ActiveSheet.Range("CA1")
With referenceRange
For Each thisSheet In ThisWorkbook.Sheets
If thisSheet.Index >= referenceRange.Parent.Index Then
Set targetCells = thisSheet.Cells.SpecialCells(xlCellTypeFormulas, 23)
For Each cell In targetCells
If cell.HasFormula Then
.Offset(i, 0).Value = thisSheet.Name
.Offset(i, 1).Value = cell.Address
.Offset(i, 2).Value = CStr(cell.Formula)
i = …Run Code Online (Sandbox Code Playgroud) 我想在Excel(2003)中获取导入的数据转储并将其格式化为报表.我所做的大部分工作都涉及录制宏,然后根据需要自定义代码.我有一个需要纯代码的地方.
我有一个SORTED列(D)列出了事件类型(例如:车辆火灾,中风,动物咬伤等).我想读取D列中的每个值,如果它不是我们要查找的几个值中的一个,则删除整行.
我已经尝试了多个版本的代码(我在网上找到),并且生成最接近我需要的结果的代码如下所示:
Range("D:D").Select
Dim workrange As Range
Dim cell As Range
Set workrange = Intersect(Selection, ActiveSheet.UsedRange)
For Each cell In workrange
If ActiveCell.Value <> "VFIRE" _
And ActiveCell.Value <> "ILBURN" _
And ActiveCell.Value <> "SMOKEA" _
And ActiveCell.Value <> "ST3" _
And ActiveCell.Value <> "TA1PED" _
And ActiveCell.Value <> "UN1" _
Then ActiveCell.EntireRow.Delete
Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)
此代码删除列表的大部分(原始168的约100行),但它只删除行,直到它达到我想要的第一个值.例如,此当前数据转储没有"ILBURN"或"SMOKEA"的任何值,但是当第一次出现"ST3"时,宏停止.没有产生错误,它似乎认为它已经完成.
我应该添加什么来通过整个列表调用宏?
excel-2003 ×10
vba ×8
excel ×6
excel-vba ×6
ms-office ×2
arrays ×1
c# ×1
excel-2010 ×1
forms ×1
limits ×1