我一直在使用 .xlsx 文件运行 excel 导出功能。有时在加载 excel 文件时,我会使用 System.Runtime.InteropServices.Marshal.BindToMoniker() 方法。当有问题的文件未打开但存在时,我得到以下结果:
Excel 将启动,但不会加载工作簿,也不会加载任何工作表。Excel 显示为空白。
在执行导出的程序之外打开文件时,它以完全相同的方式加载。Excel 已打开,它在窗口顶部显示 Microsoft Excel,但没有可见的工作表。Excel 看起来根本没有打开任何东西。
进入选项还表明没有打开的工作簿。该文件肯定有内容,正如我在 Notepad++ 中打开它时所看到的那样,该文件有足够的细节让我看到工作簿中有工作表,但没有显示。
我不确定如何以编程方式防止这种损坏发生,或者如何修复它。任何建议或想法将不胜感激!
为了避免这个问题,我从来没有在关闭的 Excel 文件上使用 BindToMoniker(通过检查文件是否被锁定,如果它被解锁,我只使用 open 函数)
这是我遇到此问题时运行的代码。仅当文件存在且未打开时才会发生:
Public Function OpenExcelFile( _
ByRef pobjExcel As Excel.Application, _
ByRef pwkbWorkBook As Excel.Workbook, _
ByVal pstrFileName As String) As Boolean
Run Code Online (Sandbox Code Playgroud)
...
pwkbWorkBook = BindToMoniker(pstrFileName)
pobjExcel = pwkbWorkBook.Parent
pobjExcel.Visible = True 'Temp; I use this to see the state of the file
Run Code Online (Sandbox Code Playgroud) 我有一个旧的宏,它在 Excel 2003 上运行良好,但在 Excel 2010 上产生了问题。导致问题的部分是:
If Not IsNull(someRange.FormatConditions(parActiveCondition).Interior.Color) Then
locVisibleColor = someRange.FormatConditions(parActiveCondition).Interior.Color
End if
Run Code Online (Sandbox Code Playgroud)
上parActiveCondition的活动条件格式编号在哪里someRange。
当背景选择为“无颜色”时,someRange.FormatConditions(parActiveCondition).Interior.Color返回
Null 在 Excel 2003 中问题是黑色背景也返回 0。所以在 Excel 2010 中似乎不再可能区分黑色背景和无背景颜色。
有人知道解决方法吗?
ps:我显然可以选择白色背景而不是“无颜色”,但我不想更改所有电子表格和条件格式规则。
我的Excel文件(包含宏)只有4 MB的大小突然变成了12MB的文件...我只对vba代码做了一些小改动,我不认为这就是这个的原因....还有什么可能是这个原因?有关如何修复的建议吗?
在VBA中,我正在更新单元格中的公式(工作正常),但自动重新计算不起作用:
updated_formula = "=COUNT(Sheet1!A3:A" & nr_points & ")"
Cells(x, y).Formula = updated_formula
ActiveWorkbook.Save
Cells(x, y).Calculate
Run Code Online (Sandbox Code Playgroud)
该公式只计算另一个工作表中现有行的数量.当我运行宏时,函数文本字段中的单元格值是正确的,但在单元格本身中我有"#NAME?",我需要按下ENTER函数重新计算公式.
我期待过多的Excel吗?或者我做错了什么?
编辑:情况的屏幕截图 - 这是我在运行宏后看到的.(对不起黑色审查,必须与客户公司保持一致)

我在 UserForm2 的一个命令按钮中有此代码:
Private Sub CButton1_Click()
UserForm1.Show
Me.Hide
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,Userform1显示。
然后我在 Userform1 的一个命令按钮中有另一个代码:
Private Sub CButton2_Click()
UserForm2.Show
Unload Me
End Sub
Run Code Online (Sandbox Code Playgroud)
这会抛出一个:
运行时错误:表单已显示;不能模态显示
我该如何正确执行此操作?隐藏或卸载后
如何返回上一个Userform?
我有这个代码:
Dim fStrecke As String
fStrecke = "=A" & z & "*B" & z & "*C" & z
wks.Cells(z, "L").Formula = fStrecke
Dim fZeit As String
fZeit = "=IF(ISBLANK(H" & z & ");((A" & z & "*B" & z & "*I" & z & ")-I" & z & ")+(A" & z & "*B" & z & "*J" & z & ");(A" & z & "*B" & z & "*H" & z & "))"
wks.Cells(z, "K").Formula = fZeit
Run Code Online (Sandbox Code Playgroud)
第一个公式是工作,第二个公式我得到一个运行时错误1004.任何想法?我已将列K格式化为用户定义的"m:ss".
我有一个条件格式规则的列设置为根据日期与当前日期(今天的日期+ 7,+ 15,+ 30天)的接近程度使背景成为三种颜色之一.
我想扩展条件格式以影响整行,而不仅仅是用户的单个单元格更容易看到哪个项目的日期即将到来.
是否可以使用单元格格式进行条件格式化?
更新:进一步解释.条件格式设置为一列:如果单元格值介于今天的日期和今天的7天之间,则格式化为绿色背景.我希望这种格式在ROW中延伸,其中值变为绿色.
excel datetime conditional-formatting excel-formula excel-2010
我正在管理一个包含超过 200 000 个公式(一些非常复杂的数组公式)的工作簿,这意味着我不能让 Excel 每次单击某个地方时自动计算所有单元格(计算所有内容大约需要 8 小时)。
取而代之的是,计算设置为手动,并且在打开Calculation.xlsm时执行了以下 VBA 代码:
With Application
.CalculateBeforeSave = False
.Calculation = xlCalculationManual
End With
Run Code Online (Sandbox Code Playgroud)
我使用自定义按钮在需要时仅计算 200k 单元格的某些部分。
我注意到 Excel 会跟踪每个工作簿中的设置,这意味着如果我打开我的 Calculation.xlsm,Excel 会记住计算设置为手动。如果我打开 Values.xlsx,Excel 会记住计算设置为自动。这是在我尝试将值从Calculation.xlsm复制到Values.xlsx 之前。
现在,因为我在 Calculation.xlsm 中使用 VBA 将值复制到 Values.xlsx,ExcelApplication.Calculation也会将该设置应用于该工作簿,这意味着如果我使用新的 Excel 实例打开它,计算仍将被设置手动。
如果我在我的Calculation.xlsm工作簿中使用 VBAApplication.Calculation = xlCalculationAutomatic关闭Values.xlsx之前添加一个,它将起作用,但 Excel 也将开始计算我的Calculation.xlsm工作簿中的 200k 单元格,这显然是我不想要的。
所以我的问题是关于如何根据特定的工作簿而不是Application对象来实际设置 Excel 的计算。这是基于这样一个事实,即 Excel 会根据打开的工作簿跟踪该设置(您只需进行测试并创建 2 个不同的.xlsx文件,一个启用计算,另一个禁用计算,Excel 将记住这些设置)。
我知道我可以Worksheets.Range.Calculate …
我有这个Excel电子表格,在其中一个列中我需要提出一个公式来计算给定日期的总金额.这是一个巨大的电子表格的小快照:
Date/Time Time Amount Balance Total $ per day
9/30/2014 5:30 PM $5.20 $87.81
9/30/2014 4:23 PM $0.14 $93.01
9/30/2014 8:53 AM ($4.61) $93.15
9/30/2014 7:53 AM $5.20 $88.54
9/29/2014 5:08 PM $1.09 $93.74
9/29/2014 7:18 AM $1.09 $94.83
9/26/2014 5:31 PM ($4.61) $95.92
Run Code Online (Sandbox Code Playgroud)
对于这个例子,Total $ per day将是:
E2 $5.93
E6 $2.18
E8 ($4.61)
Run Code Online (Sandbox Code Playgroud)
我猜有一个公式比手动计算更好=SUM(X#:X#)吗?
excel ×10
excel-2010 ×10
vba ×7
excel-vba ×4
datetime ×1
excel-2003 ×1
excel-2007 ×1
if-statement ×1
pivot-table ×1
vb.net ×1